fastlane 2.225.0 → 2.227.0
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/README.md +98 -98
- data/cert/lib/cert/options.rb +7 -2
- data/cert/lib/cert/runner.rb +23 -11
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
- data/fastlane/lib/fastlane/actions/import_from_git.rb +11 -4
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/notarize.rb +4 -0
- data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -4
- data/fastlane/lib/fastlane/actions/testfairy.rb +41 -4
- data/fastlane/lib/fastlane/actions/unlock_keychain.rb +6 -1
- data/fastlane/lib/fastlane/fast_file.rb +9 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +1 -1
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/Atomic.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +1 -1
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +39 -13
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +2 -2
- data/fastlane/swift/LaneFileProtocol.swift +1 -1
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +2 -2
- data/fastlane/swift/OptionalConfigValue.swift +1 -1
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +1 -1
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +2 -2
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/SocketClient.swift +1 -1
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +1 -1
- data/fastlane/swift/main.swift +1 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +6 -1
- data/match/lib/assets/READMETemplate.md +2 -2
- data/match/lib/match/generator.rb +2 -2
- data/match/lib/match/runner.rb +1 -1
- data/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/options.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -0
- data/supply/lib/supply/uploader.rb +22 -11
- data/trainer/lib/trainer/legacy_xcresult.rb +586 -0
- data/trainer/lib/trainer/options.rb +5 -0
- data/trainer/lib/trainer/plist_test_summary_parser.rb +84 -0
- data/trainer/lib/trainer/test_parser.rb +12 -293
- data/trainer/lib/trainer/xcresult/helper.rb +53 -0
- data/trainer/lib/trainer/xcresult/repetition.rb +39 -0
- data/trainer/lib/trainer/xcresult/test_case.rb +221 -0
- data/trainer/lib/trainer/xcresult/test_case_attributes.rb +49 -0
- data/trainer/lib/trainer/xcresult/test_plan.rb +91 -0
- data/trainer/lib/trainer/xcresult/test_suite.rb +134 -0
- data/trainer/lib/trainer/xcresult.rb +31 -388
- data/trainer/lib/trainer.rb +3 -1
- metadata +31 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd8ce422d952c22cd384e6459133d3d668178a6237168e59c2902f3e0b35fcbe
|
4
|
+
data.tar.gz: 55220418b3abab5621d41ab450f870b588f30cf566e01f71b7e4c993abc60c06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d10309c76cd22469932971ad8372617ccd997e5c21b53af5ed871ba58029f75ba362ca2ff61573ec44cf5e10e19bd7b34743a955c438a7a9dbd286aa5f599865
|
7
|
+
data.tar.gz: 7da6fcdff81271b64632d11e8da1f7937249061776263b72244c925c27060d4022842953a8e78b7435e7df11ed78f34c1935b058da3dbc973ba3389e797e5973
|
data/README.md
CHANGED
@@ -35,11 +35,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
35
35
|
<!-- This table is regenerated and resorted on each release -->
|
36
36
|
<table id='team'>
|
37
37
|
<tr>
|
38
|
-
<td id='
|
39
|
-
<a href='https://github.com/
|
40
|
-
<img src='https://github.com/
|
38
|
+
<td id='roger-oba'>
|
39
|
+
<a href='https://github.com/rogerluan'>
|
40
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
41
41
|
</a>
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
42
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
43
|
+
</td>
|
44
|
+
<td id='aaron-brager'>
|
45
|
+
<a href='https://github.com/getaaron'>
|
46
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
47
|
+
</a>
|
48
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
49
|
+
</td>
|
50
|
+
<td id='iulian-onofrei'>
|
51
|
+
<a href='https://github.com/revolter'>
|
52
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
53
|
+
</a>
|
54
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
43
55
|
</td>
|
44
56
|
<td id='stefan-natchev'>
|
45
57
|
<a href='https://github.com/snatchev'>
|
@@ -47,17 +59,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
47
59
|
</a>
|
48
60
|
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
49
61
|
</td>
|
50
|
-
<td id='
|
51
|
-
<a href='https://github.com/
|
52
|
-
<img src='https://github.com/
|
62
|
+
<td id='jimmy-dee'>
|
63
|
+
<a href='https://github.com/jdee'>
|
64
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
53
65
|
</a>
|
54
|
-
<h4 align='center'
|
66
|
+
<h4 align='center'>Jimmy Dee</h4>
|
55
67
|
</td>
|
56
|
-
|
57
|
-
<
|
58
|
-
<
|
68
|
+
</tr>
|
69
|
+
<tr>
|
70
|
+
<td id='manish-rathi'>
|
71
|
+
<a href='https://github.com/crazymanish'>
|
72
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
59
73
|
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
74
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
75
|
+
</td>
|
76
|
+
<td id='fumiya-nakamura'>
|
77
|
+
<a href='https://github.com/nafu'>
|
78
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
79
|
+
</a>
|
80
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
61
81
|
</td>
|
62
82
|
<td id='luka-mirosevic'>
|
63
83
|
<a href='https://github.com/lmirosevic'>
|
@@ -65,141 +85,121 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
65
85
|
</a>
|
66
86
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
67
87
|
</td>
|
68
|
-
|
69
|
-
<
|
70
|
-
<
|
71
|
-
<a href='https://github.com/matthewellis'>
|
72
|
-
<img src='https://github.com/matthewellis.png' width='140px;'>
|
88
|
+
<td id='felix-krause'>
|
89
|
+
<a href='https://github.com/KrauseFx'>
|
90
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
73
91
|
</a>
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
92
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
75
93
|
</td>
|
76
|
-
<td id='
|
77
|
-
<a href='https://github.com/
|
78
|
-
<img src='https://github.com/
|
94
|
+
<td id='jan-piotrowski'>
|
95
|
+
<a href='https://github.com/janpio'>
|
96
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
79
97
|
</a>
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
98
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
81
99
|
</td>
|
100
|
+
</tr>
|
101
|
+
<tr>
|
82
102
|
<td id='jérôme-lacoste'>
|
83
103
|
<a href='https://github.com/lacostej'>
|
84
104
|
<img src='https://github.com/lacostej.png' width='140px;'>
|
85
105
|
</a>
|
86
106
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
87
107
|
</td>
|
88
|
-
<td id='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
91
|
-
</a>
|
92
|
-
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
93
|
-
</td>
|
94
|
-
<td id='maksym-grebenets'>
|
95
|
-
<a href='https://github.com/mgrebenets'>
|
96
|
-
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
97
|
-
</a>
|
98
|
-
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
99
|
-
</td>
|
100
|
-
</tr>
|
101
|
-
<tr>
|
102
|
-
<td id='jimmy-dee'>
|
103
|
-
<a href='https://github.com/jdee'>
|
104
|
-
<img src='https://github.com/jdee.png' width='140px;'>
|
108
|
+
<td id='łukasz-grabowski'>
|
109
|
+
<a href='https://github.com/lucgrabowski'>
|
110
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
105
111
|
</a>
|
106
|
-
<h4 align='center'
|
112
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
107
113
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
114
|
+
<td id='satoshi-namai'>
|
115
|
+
<a href='https://github.com/ainame'>
|
116
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
111
117
|
</a>
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
113
119
|
</td>
|
114
|
-
<td id='
|
115
|
-
<a href='https://github.com/
|
116
|
-
<img src='https://github.com/
|
120
|
+
<td id='kohki-miki'>
|
121
|
+
<a href='https://github.com/giginet'>
|
122
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
117
123
|
</a>
|
118
|
-
<h4 align='center'><a href='https://twitter.com/
|
124
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
119
125
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
126
|
+
<td id='max-ott'>
|
127
|
+
<a href='https://github.com/max-ott'>
|
128
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
123
129
|
</a>
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
130
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
125
131
|
</td>
|
132
|
+
</tr>
|
133
|
+
<tr>
|
126
134
|
<td id='jorge-revuelta-h'>
|
127
135
|
<a href='https://github.com/minuscorp'>
|
128
136
|
<img src='https://github.com/minuscorp.png' width='140px;'>
|
129
137
|
</a>
|
130
138
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
131
139
|
</td>
|
132
|
-
|
133
|
-
<
|
134
|
-
<
|
135
|
-
<a href='https://github.com/janpio'>
|
136
|
-
<img src='https://github.com/janpio.png' width='140px;'>
|
137
|
-
</a>
|
138
|
-
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
139
|
-
</td>
|
140
|
-
<td id='satoshi-namai'>
|
141
|
-
<a href='https://github.com/ainame'>
|
142
|
-
<img src='https://github.com/ainame.png' width='140px;'>
|
140
|
+
<td id='maksym-grebenets'>
|
141
|
+
<a href='https://github.com/mgrebenets'>
|
142
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
143
143
|
</a>
|
144
|
-
<h4 align='center'><a href='https://twitter.com/
|
144
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
145
145
|
</td>
|
146
|
-
<td id='
|
147
|
-
<a href='https://github.com/
|
148
|
-
<img src='https://github.com/
|
146
|
+
<td id='matthew-ellis'>
|
147
|
+
<a href='https://github.com/matthewellis'>
|
148
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
149
149
|
</a>
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
152
|
+
<td id='joshua-liebowitz'>
|
153
|
+
<a href='https://github.com/taquitos'>
|
154
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
155
155
|
</a>
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
156
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
158
|
+
<td id='josh-holtz'>
|
159
|
+
<a href='https://github.com/joshdholtz'>
|
160
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
161
161
|
</a>
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
163
163
|
</td>
|
164
164
|
</tr>
|
165
165
|
<tr>
|
166
|
-
<td id='aaron-brager'>
|
167
|
-
<a href='https://github.com/getaaron'>
|
168
|
-
<img src='https://github.com/getaaron.png' width='140px;'>
|
169
|
-
</a>
|
170
|
-
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
171
|
-
</td>
|
172
166
|
<td id='danielle-tomlinson'>
|
173
167
|
<a href='https://github.com/endocrimes'>
|
174
168
|
<img src='https://github.com/endocrimes.png' width='140px;'>
|
175
169
|
</a>
|
176
170
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
177
171
|
</td>
|
178
|
-
<td id='roger-oba'>
|
179
|
-
<a href='https://github.com/rogerluan'>
|
180
|
-
<img src='https://github.com/rogerluan.png' width='140px;'>
|
181
|
-
</a>
|
182
|
-
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
183
|
-
</td>
|
184
|
-
<td id='łukasz-grabowski'>
|
185
|
-
<a href='https://github.com/lucgrabowski'>
|
186
|
-
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
187
|
-
</a>
|
188
|
-
<h4 align='center'>Łukasz Grabowski</h4>
|
189
|
-
</td>
|
190
172
|
<td id='andrew-mcburney'>
|
191
173
|
<a href='https://github.com/armcburney'>
|
192
174
|
<img src='https://github.com/armcburney.png' width='140px;'>
|
193
175
|
</a>
|
194
176
|
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
195
177
|
</td>
|
178
|
+
<td id='daniel-jankowski'>
|
179
|
+
<a href='https://github.com/mollyIV'>
|
180
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
181
|
+
</a>
|
182
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
183
|
+
</td>
|
184
|
+
<td id='helmut-januschka'>
|
185
|
+
<a href='https://github.com/hjanuschka'>
|
186
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
187
|
+
</a>
|
188
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
189
|
+
</td>
|
190
|
+
<td id='olivier-halligon'>
|
191
|
+
<a href='https://github.com/AliSoftware'>
|
192
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
193
|
+
</a>
|
194
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
195
|
+
</td>
|
196
196
|
</tr>
|
197
197
|
<tr>
|
198
|
-
<td id='
|
199
|
-
<a href='https://github.com/
|
200
|
-
<img src='https://github.com/
|
198
|
+
<td id='manu-wallner'>
|
199
|
+
<a href='https://github.com/milch'>
|
200
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
201
201
|
</a>
|
202
|
-
<h4 align='center'><a href='https://twitter.com/
|
202
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
203
203
|
</td>
|
204
204
|
</table>
|
205
205
|
|
data/cert/lib/cert/options.rb
CHANGED
@@ -100,9 +100,11 @@ module Cert
|
|
100
100
|
env_name: "CERT_KEYCHAIN_PATH",
|
101
101
|
description: "Path to a custom keychain",
|
102
102
|
code_gen_sensitive: true,
|
103
|
-
default_value: Dir["#{Dir.home}/Library/Keychains/login.keychain", "#{Dir.home}/Library/Keychains/login.keychain-db"].last,
|
103
|
+
default_value: Helper.mac? ? Dir["#{Dir.home}/Library/Keychains/login.keychain", "#{Dir.home}/Library/Keychains/login.keychain-db"].last : nil,
|
104
104
|
default_value_dynamic: true,
|
105
|
+
optional: true,
|
105
106
|
verify_block: proc do |value|
|
107
|
+
UI.user_error!("Keychain is not supported on platforms other than macOS") if !Helper.mac? && value
|
106
108
|
value = File.expand_path(value)
|
107
109
|
UI.user_error!("Keychain not found at path '#{value}'") unless File.exist?(value)
|
108
110
|
end),
|
@@ -111,7 +113,10 @@ module Cert
|
|
111
113
|
env_name: "CERT_KEYCHAIN_PASSWORD",
|
112
114
|
sensitive: true,
|
113
115
|
description: "This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password",
|
114
|
-
optional: true
|
116
|
+
optional: true,
|
117
|
+
verify_block: proc do |value|
|
118
|
+
UI.user_error!("Keychain is not supported on platforms other than macOS") unless Helper.mac?
|
119
|
+
end),
|
115
120
|
FastlaneCore::ConfigItem.new(key: :skip_set_partition_list,
|
116
121
|
short_option: "-P",
|
117
122
|
env_name: "CERT_SKIP_SET_PARTITION_LIST",
|
data/cert/lib/cert/runner.rb
CHANGED
@@ -12,10 +12,14 @@ module Cert
|
|
12
12
|
def launch
|
13
13
|
run
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
if Helper.mac?
|
16
|
+
UI.message("Verifying the certificate is properly installed locally...")
|
17
|
+
installed = FastlaneCore::CertChecker.installed?(ENV["CER_FILE_PATH"], in_keychain: ENV["CER_KEYCHAIN_PATH"])
|
18
|
+
UI.user_error!("Could not find the newly generated certificate installed", show_github_issues: true) unless installed
|
19
|
+
UI.success("Successfully installed certificate #{ENV['CER_CERTIFICATE_ID']}")
|
20
|
+
else
|
21
|
+
UI.message("Skipping verifying certificates as it would not work on this operating system.")
|
22
|
+
end
|
19
23
|
return ENV["CER_FILE_PATH"]
|
20
24
|
end
|
21
25
|
|
@@ -45,7 +49,7 @@ module Cert
|
|
45
49
|
|
46
50
|
should_create = Cert.config[:force]
|
47
51
|
unless should_create
|
48
|
-
cert_path = find_existing_cert
|
52
|
+
cert_path = find_existing_cert if Helper.mac?
|
49
53
|
should_create = cert_path.nil?
|
50
54
|
end
|
51
55
|
|
@@ -223,17 +227,25 @@ module Cert
|
|
223
227
|
|
224
228
|
cert_path = store_certificate(certificate, Cert.config[:filename])
|
225
229
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
230
|
+
if Helper.mac?
|
231
|
+
# Import all the things into the Keychain
|
232
|
+
keychain = File.expand_path(Cert.config[:keychain_path])
|
233
|
+
password = Cert.config[:keychain_password]
|
234
|
+
FastlaneCore::KeychainImporter.import_file(private_key_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
|
235
|
+
FastlaneCore::KeychainImporter.import_file(cert_path, keychain, keychain_password: password, skip_set_partition_list: Cert.config[:skip_set_partition_list])
|
236
|
+
else
|
237
|
+
UI.message("Skipping importing certificates as it would not work on this operating system.")
|
238
|
+
end
|
231
239
|
|
232
240
|
# Environment variables for the fastlane action
|
233
241
|
ENV["CER_CERTIFICATE_ID"] = certificate.id
|
234
242
|
ENV["CER_FILE_PATH"] = cert_path
|
235
243
|
|
236
|
-
|
244
|
+
if Helper.mac?
|
245
|
+
UI.success("Successfully generated #{certificate.id} which was imported to the local machine.")
|
246
|
+
else
|
247
|
+
UI.success("Successfully generated #{certificate.id}")
|
248
|
+
end
|
237
249
|
|
238
250
|
return cert_path
|
239
251
|
end
|
@@ -99,7 +99,7 @@ module Deliver
|
|
99
99
|
optional: true,
|
100
100
|
default_value: "ios",
|
101
101
|
verify_block: proc do |value|
|
102
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
102
|
+
UI.user_error!("The platform can only be ios, appletvos/tvos, xros or osx") unless %w(ios appletvos tvos xros osx).include?(value)
|
103
103
|
end),
|
104
104
|
|
105
105
|
# live version
|
@@ -186,7 +186,7 @@ module Fastlane
|
|
186
186
|
optional: true,
|
187
187
|
default_value: "ios",
|
188
188
|
verify_block: proc do |value|
|
189
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
189
|
+
UI.user_error!("The platform can only be ios, appletvos/tvos, xros or osx") unless %w(ios appletvos tvos xros osx).include?(value)
|
190
190
|
end),
|
191
191
|
FastlaneCore::ConfigItem.new(key: :team_name,
|
192
192
|
short_option: "-e",
|
@@ -564,7 +564,7 @@ What's the worst that could happen for each of the profile types?
|
|
564
564
|
|
565
565
|
#### App Store Profiles
|
566
566
|
|
567
|
-
An App Store profile can't be used for anything as long as it's not re-signed by Apple. The only way to get an app resigned is to submit an app for review which could take anywhere from 24 hours to a few days
|
567
|
+
An App Store profile can't be used for anything as long as it's not re-signed by Apple. The only way to get an app resigned is to submit an app for review which could take anywhere from 24 hours to a few days. Attackers could only submit an app for review, if they also got access to your App Store Connect credentials (which are not stored in git, but in your local keychain). Additionally you get an email notification every time a build gets uploaded to cancel the submission even before your app gets into the review stage.
|
568
568
|
|
569
569
|
#### Development and Ad Hoc Profiles
|
570
570
|
|
@@ -30,9 +30,10 @@ module Fastlane
|
|
30
30
|
default_value: 'HEAD',
|
31
31
|
optional: true),
|
32
32
|
FastlaneCore::ConfigItem.new(key: :dependencies,
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
description: "The array of additional Fastfiles in the repository",
|
34
|
+
default_value: [],
|
35
|
+
type: Array,
|
36
|
+
optional: true),
|
36
37
|
FastlaneCore::ConfigItem.new(key: :path,
|
37
38
|
description: "The path of the Fastfile in the repository",
|
38
39
|
default_value: 'fastlane/Fastfile',
|
@@ -43,6 +44,11 @@ module Fastlane
|
|
43
44
|
optional: true),
|
44
45
|
FastlaneCore::ConfigItem.new(key: :cache_path,
|
45
46
|
description: "The path to a directory where the repository should be cloned into. Defaults to `nil`, which causes the repository to be cloned on every call, to a temporary directory",
|
47
|
+
optional: true),
|
48
|
+
FastlaneCore::ConfigItem.new(key: :git_extra_headers,
|
49
|
+
description: "An optional list of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)",
|
50
|
+
default_value: [],
|
51
|
+
type: Array,
|
46
52
|
optional: true)
|
47
53
|
]
|
48
54
|
end
|
@@ -68,7 +74,8 @@ module Fastlane
|
|
68
74
|
branch: "HEAD", # The branch to checkout on the repository.
|
69
75
|
path: "fastlane/Fastfile", # The path of the Fastfile in the repository.
|
70
76
|
version: [">= 1.1.0", "< 2.0.0"], # The version to checkout on the repository. Multiple conditions can be used to select the latest version within constraints.
|
71
|
-
cache_path: "~/.cache/fastlane/imported" # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
77
|
+
cache_path: "~/.cache/fastlane/imported", # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
78
|
+
git_extra_headers: ["Authorization: Basic <YOUR BASE64 KEY>", "Cache-Control: no-cache"]
|
72
79
|
)'
|
73
80
|
]
|
74
81
|
end
|
@@ -83,7 +83,7 @@ module Fastlane
|
|
83
83
|
optional: true,
|
84
84
|
default_value: "ios",
|
85
85
|
verify_block: proc do |value|
|
86
|
-
UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %(
|
86
|
+
UI.user_error!("The platform can only be ios, osx, xros or appletvos/tvos") unless %w(ios osx xros appletvos tvos).include?(value)
|
87
87
|
end),
|
88
88
|
FastlaneCore::ConfigItem.new(key: :initial_build_number,
|
89
89
|
env_name: "INITIAL_BUILD_NUMBER",
|
@@ -53,7 +53,7 @@ module Fastlane
|
|
53
53
|
payload["organization_id"] = organization_id unless organization_id.nil?
|
54
54
|
|
55
55
|
# here's the actual lifting - POST or PUT to OneSignal
|
56
|
-
json_headers = { 'Content-Type' => 'application/json', 'Authorization' => "
|
56
|
+
json_headers = { 'Content-Type' => 'application/json', 'Authorization' => "Key #{auth_token}" }
|
57
57
|
url = +'https://api.onesignal.com/apps'
|
58
58
|
url << '/' + app_id if is_update
|
59
59
|
uri = URI.parse(url)
|
@@ -58,7 +58,7 @@ module Fastlane
|
|
58
58
|
optional: true,
|
59
59
|
default_value: platform.empty? ? "ios" : platform,
|
60
60
|
verify_block: proc do |value|
|
61
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
61
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
62
62
|
end),
|
63
63
|
FastlaneCore::ConfigItem.new(key: :udid,
|
64
64
|
env_name: "FL_REGISTER_DEVICE_UDID",
|
@@ -160,7 +160,7 @@ module Fastlane
|
|
160
160
|
optional: true,
|
161
161
|
default_value: platform.empty? ? "ios" : platform,
|
162
162
|
verify_block: proc do |value|
|
163
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
163
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
164
164
|
end)
|
165
165
|
]
|
166
166
|
end
|
@@ -8,7 +8,7 @@ module Fastlane
|
|
8
8
|
end
|
9
9
|
|
10
10
|
case detect_provider(params)
|
11
|
-
when 'circleci'
|
11
|
+
when 'circleci', 'codebuild'
|
12
12
|
setup_output_paths
|
13
13
|
end
|
14
14
|
|
@@ -20,7 +20,7 @@ module Fastlane
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.detect_provider(params)
|
23
|
-
params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil)
|
23
|
+
params[:provider] || (Helper.is_circle_ci? ? 'circleci' : nil) || (Helper.is_codebuild? ? 'codebuild' : nil)
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.setup_keychain(params)
|
@@ -34,7 +34,7 @@ module Fastlane
|
|
34
34
|
return
|
35
35
|
end
|
36
36
|
|
37
|
-
keychain_name =
|
37
|
+
keychain_name = params[:keychain_name]
|
38
38
|
ENV["MATCH_KEYCHAIN_NAME"] = keychain_name
|
39
39
|
ENV["MATCH_KEYCHAIN_PASSWORD"] = ""
|
40
40
|
|
@@ -108,7 +108,12 @@ module Fastlane
|
|
108
108
|
env_name: "FL_SETUP_CI_TIMEOUT",
|
109
109
|
description: "Set a custom timeout in seconds for keychain. Set `0` if you want to specify 'no time-out'",
|
110
110
|
type: Integer,
|
111
|
-
default_value: 3600)
|
111
|
+
default_value: 3600),
|
112
|
+
FastlaneCore::ConfigItem.new(key: :keychain_name,
|
113
|
+
env_name: "FL_SETUP_CI_KEYCHAIN_NAME",
|
114
|
+
description: "Set a custom keychain name",
|
115
|
+
type: String,
|
116
|
+
default_value: "fastlane_tmp_keychain")
|
112
117
|
]
|
113
118
|
end
|
114
119
|
|
@@ -128,6 +133,11 @@ module Fastlane
|
|
128
133
|
'setup_ci(
|
129
134
|
provider: "circleci",
|
130
135
|
timeout: 0
|
136
|
+
)',
|
137
|
+
'setup_ci(
|
138
|
+
provider: "circleci",
|
139
|
+
timeout: 0,
|
140
|
+
keychain_name: "custom_keychain_name"
|
131
141
|
)'
|
132
142
|
]
|
133
143
|
end
|
@@ -98,6 +98,14 @@ module Fastlane
|
|
98
98
|
[key, value]
|
99
99
|
when :tags
|
100
100
|
[key, value.join(',')]
|
101
|
+
when :folder_name
|
102
|
+
[key, value]
|
103
|
+
when :landing_page_mode
|
104
|
+
[key, value]
|
105
|
+
when :upload_to_saucelabs
|
106
|
+
[key, value]
|
107
|
+
when :platform
|
108
|
+
[key, value]
|
101
109
|
else
|
102
110
|
UI.user_error!("Unknown parameter: #{key}")
|
103
111
|
end
|
@@ -143,11 +151,14 @@ module Fastlane
|
|
143
151
|
private_class_method :parse_response
|
144
152
|
|
145
153
|
def self.description
|
146
|
-
'Upload a new build to
|
154
|
+
'Upload a new build to SauceLabs\' TestFairy'
|
147
155
|
end
|
148
156
|
|
149
157
|
def self.details
|
150
|
-
|
158
|
+
<<~DETAILS
|
159
|
+
Upload a new build to [TestFairy](https://saucelabs.com/products/mobile-testing/app-betas).
|
160
|
+
You can retrieve your API key on [your settings page](https://app.testfairy.com/settings/access-key)
|
161
|
+
DETAILS
|
151
162
|
end
|
152
163
|
|
153
164
|
def self.available_options
|
@@ -237,7 +248,7 @@ module Fastlane
|
|
237
248
|
FastlaneCore::ConfigItem.new(key: :custom,
|
238
249
|
optional: true,
|
239
250
|
env_name: "FL_TESTFAIRY_CUSTOM",
|
240
|
-
description: "Array of custom options. Contact support
|
251
|
+
description: "Array of custom options. Contact support for more information",
|
241
252
|
default_value: ''),
|
242
253
|
FastlaneCore::ConfigItem.new(key: :timeout,
|
243
254
|
env_name: "FL_TESTFAIRY_TIMEOUT",
|
@@ -249,7 +260,33 @@ module Fastlane
|
|
249
260
|
env_name: "FL_TESTFAIRY_TAGS",
|
250
261
|
description: "Custom tags that can be used to organize your builds",
|
251
262
|
type: Array,
|
252
|
-
default_value: [])
|
263
|
+
default_value: []),
|
264
|
+
FastlaneCore::ConfigItem.new(key: :folder_name,
|
265
|
+
optional: true,
|
266
|
+
env_name: "FL_TESTFAIRY_FOLDER_NAME",
|
267
|
+
description: "Name of the dashboard folder that contains this app",
|
268
|
+
default_value: ''),
|
269
|
+
FastlaneCore::ConfigItem.new(key: :landing_page_mode,
|
270
|
+
optional: true,
|
271
|
+
env_name: "FL_TESTFAIRY_LANDING_PAGE_MODE",
|
272
|
+
description: "Visibility of build landing after upload. Can be 'open' or 'closed'",
|
273
|
+
default_value: 'open',
|
274
|
+
verify_block: proc do |value|
|
275
|
+
UI.user_error!("The landing page mode can only be open or closed") unless %w(open closed).include?(value)
|
276
|
+
end),
|
277
|
+
FastlaneCore::ConfigItem.new(key: :upload_to_saucelabs,
|
278
|
+
optional: true,
|
279
|
+
env_name: "FL_TESTFAIRY_UPLOAD_TO_SAUCELABS",
|
280
|
+
description: "Upload file directly to Sauce Labs. It can be 'on' or 'off'",
|
281
|
+
default_value: 'off',
|
282
|
+
verify_block: proc do |value|
|
283
|
+
UI.user_error!("The upload to Sauce Labs can only be on or off") unless %w(on off).include?(value)
|
284
|
+
end),
|
285
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
286
|
+
optional: true,
|
287
|
+
env_name: "FL_TESTFAIRY_PLATFORM",
|
288
|
+
description: "Use if upload build is not iOS or Android. Contact support for more information",
|
289
|
+
default_value: '')
|
253
290
|
]
|
254
291
|
end
|
255
292
|
|