fastlane 2.197.0 → 2.198.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 +90 -90
- data/cert/lib/cert/runner.rb +5 -2
- data/deliver/lib/deliver/runner.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +6 -2
- data/fastlane/lib/fastlane/actions/notarize.rb +29 -11
- data/fastlane/lib/fastlane/actions/set_github_release.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +23 -7
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +23 -18
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +31 -7
- data/match/lib/match/nuke.rb +79 -1
- data/match/lib/match/spaceship_ensure.rb +1 -0
- data/pem/lib/pem/manager.rb +29 -6
- data/pem/lib/pem/options.rb +9 -0
- data/pilot/lib/pilot/build_manager.rb +1 -1
- data/scan/lib/scan/runner.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +3 -0
- metadata +17 -18
- data/spaceship/lib/spaceship/connect_api/models/.build.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: 34ffaaedeedaf54aea167114b6be61500026da48a419856dbf15de2453425e90
|
|
4
|
+
data.tar.gz: 7ab613d2b2c4d94cdc1a49b092af2e15c6f9beb99edbdfa714a2f851704f46cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b0ce3c761e4d9015ec19618bfe8cb0bf797a740ddbfbeed841b01f7c8a0100491b45308c62caf877f20360d969bf13605dfefed2d37a9b236ec029c8ffc3e107
|
|
7
|
+
data.tar.gz: c567ba5dfc3fbff8f6eec14e0616d8b0c886f3f55873f6d762944bf088537b6cc78c2e2e2bb600af711d5adb19e68cfd46baf074ac32ac201234b1773163095d
|
data/README.md
CHANGED
|
@@ -35,43 +35,49 @@ 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='satoshi-namai'>
|
|
39
|
+
<a href='https://github.com/ainame'>
|
|
40
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
|
41
41
|
</a>
|
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
42
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
|
43
43
|
</td>
|
|
44
|
-
<td id='
|
|
45
|
-
<a href='https://github.com/
|
|
46
|
-
<img src='https://github.com/
|
|
44
|
+
<td id='luka-mirosevic'>
|
|
45
|
+
<a href='https://github.com/lmirosevic'>
|
|
46
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
47
47
|
</a>
|
|
48
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
48
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
49
49
|
</td>
|
|
50
|
-
<td id='
|
|
51
|
-
<a href='https://github.com/
|
|
52
|
-
<img src='https://github.com/
|
|
50
|
+
<td id='felix-krause'>
|
|
51
|
+
<a href='https://github.com/KrauseFx'>
|
|
52
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
53
53
|
</a>
|
|
54
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
54
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
55
55
|
</td>
|
|
56
|
-
<td id='
|
|
57
|
-
<a href='https://github.com/
|
|
58
|
-
<img src='https://github.com/
|
|
56
|
+
<td id='joshua-liebowitz'>
|
|
57
|
+
<a href='https://github.com/taquitos'>
|
|
58
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
59
59
|
</a>
|
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
60
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
61
61
|
</td>
|
|
62
|
-
<td id='
|
|
63
|
-
<a href='https://github.com/
|
|
64
|
-
<img src='https://github.com/
|
|
62
|
+
<td id='stefan-natchev'>
|
|
63
|
+
<a href='https://github.com/snatchev'>
|
|
64
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
|
65
65
|
</a>
|
|
66
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
66
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
67
67
|
</td>
|
|
68
68
|
</tr>
|
|
69
69
|
<tr>
|
|
70
|
-
<td id='
|
|
71
|
-
<a href='https://github.com/
|
|
72
|
-
<img src='https://github.com/
|
|
70
|
+
<td id='daniel-jankowski'>
|
|
71
|
+
<a href='https://github.com/mollyIV'>
|
|
72
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
|
73
73
|
</a>
|
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
74
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
75
|
+
</td>
|
|
76
|
+
<td id='andrew-mcburney'>
|
|
77
|
+
<a href='https://github.com/armcburney'>
|
|
78
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
|
79
|
+
</a>
|
|
80
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
75
81
|
</td>
|
|
76
82
|
<td id='matthew-ellis'>
|
|
77
83
|
<a href='https://github.com/matthewellis'>
|
|
@@ -79,31 +85,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
79
85
|
</a>
|
|
80
86
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
81
87
|
</td>
|
|
88
|
+
<td id='manish-rathi'>
|
|
89
|
+
<a href='https://github.com/crazymanish'>
|
|
90
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
|
91
|
+
</a>
|
|
92
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
93
|
+
</td>
|
|
94
|
+
<td id='max-ott'>
|
|
95
|
+
<a href='https://github.com/max-ott'>
|
|
96
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
|
97
|
+
</a>
|
|
98
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
99
|
+
</td>
|
|
100
|
+
</tr>
|
|
101
|
+
<tr>
|
|
82
102
|
<td id='olivier-halligon'>
|
|
83
103
|
<a href='https://github.com/AliSoftware'>
|
|
84
104
|
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
|
85
105
|
</a>
|
|
86
106
|
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
87
107
|
</td>
|
|
88
|
-
<td id='
|
|
89
|
-
<a href='https://github.com/
|
|
90
|
-
<img src='https://github.com/
|
|
108
|
+
<td id='aaron-brager'>
|
|
109
|
+
<a href='https://github.com/getaaron'>
|
|
110
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
|
91
111
|
</a>
|
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
112
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
93
113
|
</td>
|
|
94
|
-
<td id='
|
|
95
|
-
<a href='https://github.com/
|
|
96
|
-
<img src='https://github.com/
|
|
114
|
+
<td id='manu-wallner'>
|
|
115
|
+
<a href='https://github.com/milch'>
|
|
116
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
|
97
117
|
</a>
|
|
98
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
118
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
99
119
|
</td>
|
|
100
|
-
|
|
101
|
-
<
|
|
102
|
-
<
|
|
103
|
-
<a href='https://github.com/janpio'>
|
|
104
|
-
<img src='https://github.com/janpio.png' width='140px;'>
|
|
120
|
+
<td id='fumiya-nakamura'>
|
|
121
|
+
<a href='https://github.com/nafu'>
|
|
122
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
|
105
123
|
</a>
|
|
106
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
124
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
107
125
|
</td>
|
|
108
126
|
<td id='jorge-revuelta-h'>
|
|
109
127
|
<a href='https://github.com/minuscorp'>
|
|
@@ -111,37 +129,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
111
129
|
</a>
|
|
112
130
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
113
131
|
</td>
|
|
132
|
+
</tr>
|
|
133
|
+
<tr>
|
|
114
134
|
<td id='kohki-miki'>
|
|
115
135
|
<a href='https://github.com/giginet'>
|
|
116
136
|
<img src='https://github.com/giginet.png' width='140px;'>
|
|
117
137
|
</a>
|
|
118
138
|
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
119
139
|
</td>
|
|
120
|
-
<td id='
|
|
121
|
-
<a href='https://github.com/
|
|
122
|
-
<img src='https://github.com/
|
|
123
|
-
</a>
|
|
124
|
-
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
125
|
-
</td>
|
|
126
|
-
<td id='luka-mirosevic'>
|
|
127
|
-
<a href='https://github.com/lmirosevic'>
|
|
128
|
-
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
|
129
|
-
</a>
|
|
130
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
131
|
-
</td>
|
|
132
|
-
</tr>
|
|
133
|
-
<tr>
|
|
134
|
-
<td id='felix-krause'>
|
|
135
|
-
<a href='https://github.com/KrauseFx'>
|
|
136
|
-
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
|
140
|
+
<td id='danielle-tomlinson'>
|
|
141
|
+
<a href='https://github.com/endocrimes'>
|
|
142
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
|
137
143
|
</a>
|
|
138
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
144
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
139
145
|
</td>
|
|
140
|
-
<td id='
|
|
141
|
-
<a href='https://github.com/
|
|
142
|
-
<img src='https://github.com/
|
|
146
|
+
<td id='helmut-januschka'>
|
|
147
|
+
<a href='https://github.com/hjanuschka'>
|
|
148
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
|
143
149
|
</a>
|
|
144
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
150
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
145
151
|
</td>
|
|
146
152
|
<td id='jimmy-dee'>
|
|
147
153
|
<a href='https://github.com/jdee'>
|
|
@@ -149,49 +155,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
149
155
|
</a>
|
|
150
156
|
<h4 align='center'>Jimmy Dee</h4>
|
|
151
157
|
</td>
|
|
152
|
-
<td id='
|
|
153
|
-
<a href='https://github.com/
|
|
154
|
-
<img src='https://github.com/
|
|
155
|
-
</a>
|
|
156
|
-
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
|
157
|
-
</td>
|
|
158
|
-
<td id='joshua-liebowitz'>
|
|
159
|
-
<a href='https://github.com/taquitos'>
|
|
160
|
-
<img src='https://github.com/taquitos.png' width='140px;'>
|
|
158
|
+
<td id='iulian-onofrei'>
|
|
159
|
+
<a href='https://github.com/revolter'>
|
|
160
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
|
161
161
|
</a>
|
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
162
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
163
163
|
</td>
|
|
164
164
|
</tr>
|
|
165
165
|
<tr>
|
|
166
|
-
<td id='
|
|
167
|
-
<a href='https://github.com/
|
|
168
|
-
<img src='https://github.com/
|
|
166
|
+
<td id='josh-holtz'>
|
|
167
|
+
<a href='https://github.com/joshdholtz'>
|
|
168
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
|
169
169
|
</a>
|
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
170
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
171
171
|
</td>
|
|
172
|
-
<td id='
|
|
173
|
-
<a href='https://github.com/
|
|
174
|
-
<img src='https://github.com/
|
|
172
|
+
<td id='jérôme-lacoste'>
|
|
173
|
+
<a href='https://github.com/lacostej'>
|
|
174
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
|
175
175
|
</a>
|
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
176
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
177
177
|
</td>
|
|
178
|
-
<td id='
|
|
179
|
-
<a href='https://github.com/
|
|
180
|
-
<img src='https://github.com/
|
|
178
|
+
<td id='maksym-grebenets'>
|
|
179
|
+
<a href='https://github.com/mgrebenets'>
|
|
180
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
|
181
181
|
</a>
|
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
182
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
183
183
|
</td>
|
|
184
|
-
<td id='
|
|
185
|
-
<a href='https://github.com/
|
|
186
|
-
<img src='https://github.com/
|
|
184
|
+
<td id='roger-oba'>
|
|
185
|
+
<a href='https://github.com/rogerluan'>
|
|
186
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
|
187
187
|
</a>
|
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
188
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
|
189
189
|
</td>
|
|
190
|
-
<td id='
|
|
191
|
-
<a href='https://github.com/
|
|
192
|
-
<img src='https://github.com/
|
|
190
|
+
<td id='jan-piotrowski'>
|
|
191
|
+
<a href='https://github.com/janpio'>
|
|
192
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
|
193
193
|
</a>
|
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
194
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
195
195
|
</td>
|
|
196
196
|
</tr>
|
|
197
197
|
</table>
|
data/cert/lib/cert/runner.rb
CHANGED
|
@@ -154,8 +154,11 @@ module Cert
|
|
|
154
154
|
when :developer_id_kext
|
|
155
155
|
return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_KEXT
|
|
156
156
|
when :developer_id_installer
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
if !Spaceship::ConnectAPI.token.nil?
|
|
158
|
+
raise "As of 2021-11-09, the App Store Connect API does not allow accessing DEVELOPER_ID_INSTALLER with the API Key. Please file an issue on GitHub if this has changed and needs to be updated"
|
|
159
|
+
else
|
|
160
|
+
return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_INSTALLER
|
|
161
|
+
end
|
|
159
162
|
else
|
|
160
163
|
UI.user_error("Unaccepted value for :type - #{Cert.config[:type]}")
|
|
161
164
|
end
|
|
@@ -186,7 +186,7 @@ module Deliver
|
|
|
186
186
|
end
|
|
187
187
|
|
|
188
188
|
transporter = transporter_for_selected_team
|
|
189
|
-
result = transporter.upload(package_path: package_path)
|
|
189
|
+
result = transporter.upload(package_path: package_path, asset_path: upload_ipa || upload_pkg)
|
|
190
190
|
|
|
191
191
|
unless result
|
|
192
192
|
transporter_errors = transporter.displayable_errors
|
|
@@ -109,8 +109,10 @@ module Fastlane
|
|
|
109
109
|
options = plist_files.keys
|
|
110
110
|
selected = UI.select("What build configuration would you like to use?", options)
|
|
111
111
|
plist_file = plist_files[selected]
|
|
112
|
-
|
|
112
|
+
elsif plist_files_count > 0
|
|
113
113
|
plist_file = plist_files.values.first
|
|
114
|
+
else
|
|
115
|
+
return nil
|
|
114
116
|
end
|
|
115
117
|
|
|
116
118
|
# $(SRCROOT) is the path of where the XcodeProject is
|
|
@@ -131,6 +133,8 @@ module Fastlane
|
|
|
131
133
|
end
|
|
132
134
|
|
|
133
135
|
def self.get_version_number_from_plist!(plist_file)
|
|
136
|
+
return '$(MARKETING_VERSION)' if plist_file.nil?
|
|
137
|
+
|
|
134
138
|
plist = Xcodeproj::Plist.read_from_path(plist_file)
|
|
135
139
|
UI.user_error!("Unable to read plist: #{plist_file}") unless plist
|
|
136
140
|
|
|
@@ -146,7 +150,7 @@ module Fastlane
|
|
|
146
150
|
end
|
|
147
151
|
|
|
148
152
|
def self.details
|
|
149
|
-
"This action will return the current version number set on your project."
|
|
153
|
+
"This action will return the current version number set on your project. It first looks in the plist and then for '$(MARKETING_VERSION)' in the build settings."
|
|
150
154
|
end
|
|
151
155
|
|
|
152
156
|
def self.available_options
|
|
@@ -5,6 +5,7 @@ module Fastlane
|
|
|
5
5
|
def self.run(params)
|
|
6
6
|
package_path = params[:package]
|
|
7
7
|
bundle_id = params[:bundle_id]
|
|
8
|
+
skip_stapling = params[:skip_stapling]
|
|
8
9
|
try_early_stapling = params[:try_early_stapling]
|
|
9
10
|
print_log = params[:print_log]
|
|
10
11
|
verbose = params[:verbose]
|
|
@@ -38,13 +39,13 @@ module Fastlane
|
|
|
38
39
|
UI.user_error!('Could not read bundle identifier, provide as a parameter') unless bundle_id
|
|
39
40
|
|
|
40
41
|
if use_notarytool
|
|
41
|
-
notarytool(params, package_path, bundle_id,
|
|
42
|
+
notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
42
43
|
else
|
|
43
|
-
altool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
44
|
+
altool(params, package_path, bundle_id, try_early_stapling, skip_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
44
45
|
end
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
def self.notarytool(params, package_path, bundle_id,
|
|
48
|
+
def self.notarytool(params, package_path, bundle_id, skip_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
48
49
|
temp_file = nil
|
|
49
50
|
|
|
50
51
|
# Create authorization part of command with either API Key or Apple ID
|
|
@@ -89,10 +90,15 @@ module Fastlane
|
|
|
89
90
|
submission_id = notarization_info["id"]
|
|
90
91
|
UI.success("Successfully uploaded package to notarization service with request identifier #{submission_id}")
|
|
91
92
|
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
if skip_stapling
|
|
94
|
+
UI.success("Successfully notarized artifact")
|
|
95
|
+
else
|
|
96
|
+
UI.message('Stapling package')
|
|
94
97
|
|
|
95
|
-
|
|
98
|
+
self.staple(package_path, verbose)
|
|
99
|
+
|
|
100
|
+
UI.success("Successfully notarized and stapled package")
|
|
101
|
+
end
|
|
96
102
|
when 'Invalid'
|
|
97
103
|
UI.user_error!("Could not notarize package with message '#{notarization_info['statusSummary']}'")
|
|
98
104
|
else
|
|
@@ -102,7 +108,7 @@ module Fastlane
|
|
|
102
108
|
temp_file.delete if temp_file
|
|
103
109
|
end
|
|
104
110
|
|
|
105
|
-
def self.altool(params, package_path, bundle_id, try_early_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
111
|
+
def self.altool(params, package_path, bundle_id, try_early_stapling, skip_stapling, print_log, verbose, api_key, compressed_package_path)
|
|
106
112
|
UI.message('Uploading package to notarization service, might take a while')
|
|
107
113
|
|
|
108
114
|
notarization_upload_command = "xcrun altool --notarize-app -t osx -f \"#{compressed_package_path || package_path}\" --primary-bundle-id #{bundle_id} --output-format xml"
|
|
@@ -133,7 +139,7 @@ module Fastlane
|
|
|
133
139
|
while notarization_info.empty? || (notarization_info['Status'] == 'in progress')
|
|
134
140
|
if notarization_info.empty?
|
|
135
141
|
UI.message('Waiting to query request status')
|
|
136
|
-
elsif try_early_stapling
|
|
142
|
+
elsif try_early_stapling && !skip_stapling
|
|
137
143
|
UI.message('Request in progress, trying early staple')
|
|
138
144
|
|
|
139
145
|
begin
|
|
@@ -182,11 +188,15 @@ module Fastlane
|
|
|
182
188
|
|
|
183
189
|
case notarization_info['Status']
|
|
184
190
|
when 'success'
|
|
185
|
-
|
|
191
|
+
if skip_stapling
|
|
192
|
+
UI.success("Successfully notarized artifact#{log_suffix}")
|
|
193
|
+
else
|
|
194
|
+
UI.message('Stapling package')
|
|
186
195
|
|
|
187
|
-
|
|
196
|
+
self.staple(package_path, verbose)
|
|
188
197
|
|
|
189
|
-
|
|
198
|
+
UI.success("Successfully notarized and stapled package#{log_suffix}")
|
|
199
|
+
end
|
|
190
200
|
when 'invalid'
|
|
191
201
|
UI.user_error!("Could not notarize package with message '#{notarization_info['Status Message']}'#{log_suffix}")
|
|
192
202
|
else
|
|
@@ -262,6 +272,14 @@ module Fastlane
|
|
|
262
272
|
env_name: 'FL_NOTARIZE_TRY_EARLY_STAPLING',
|
|
263
273
|
description: 'Whether to try early stapling while the notarization request is in progress',
|
|
264
274
|
optional: true,
|
|
275
|
+
conflicting_options: [:skip_stapling],
|
|
276
|
+
default_value: false,
|
|
277
|
+
type: Boolean),
|
|
278
|
+
FastlaneCore::ConfigItem.new(key: :skip_stapling,
|
|
279
|
+
env_name: 'FL_NOTARIZE_SKIP_STAPLING',
|
|
280
|
+
description: 'Do not staple the notarization ticket to the artifact; useful for single file executables and ZIP archives',
|
|
281
|
+
optional: true,
|
|
282
|
+
conflicting_options: [:try_early_stapling],
|
|
265
283
|
default_value: false,
|
|
266
284
|
type: Boolean),
|
|
267
285
|
FastlaneCore::ConfigItem.new(key: :bundle_id,
|
|
@@ -19,11 +19,12 @@ module Fastlane
|
|
|
19
19
|
|
|
20
20
|
payload = {
|
|
21
21
|
'tag_name' => params[:tag_name],
|
|
22
|
-
'name' => params[:name],
|
|
23
|
-
'body' => params[:description],
|
|
24
22
|
'draft' => !!params[:is_draft],
|
|
25
|
-
'prerelease' => !!params[:is_prerelease]
|
|
23
|
+
'prerelease' => !!params[:is_prerelease],
|
|
24
|
+
'generate_release_notes' => !!params[:is_generate_release_notes]
|
|
26
25
|
}
|
|
26
|
+
payload['name'] = params[:name] if params[:name]
|
|
27
|
+
payload['body'] = params[:description] if params[:description]
|
|
27
28
|
payload['target_commitish'] = params[:commitish] if params[:commitish]
|
|
28
29
|
|
|
29
30
|
GithubApiAction.run(
|
|
@@ -48,8 +49,7 @@ module Fastlane
|
|
|
48
49
|
UI.user_error!("You are not authorized to access #{repo_name}, please make sure you provided a valid API token (GITHUB_API_TOKEN)")
|
|
49
50
|
end,
|
|
50
51
|
'*' => proc do |result|
|
|
51
|
-
UI.
|
|
52
|
-
return nil
|
|
52
|
+
UI.user_error!("GitHub responded with #{result[:status]}:#{result[:body]}")
|
|
53
53
|
end
|
|
54
54
|
}
|
|
55
55
|
) do |result|
|
|
@@ -221,6 +221,12 @@ module Fastlane
|
|
|
221
221
|
optional: true,
|
|
222
222
|
default_value: false,
|
|
223
223
|
type: Boolean),
|
|
224
|
+
FastlaneCore::ConfigItem.new(key: :is_generate_release_notes,
|
|
225
|
+
env_name: "FL_SET_GITHUB_RELEASE_IS_GENERATE_RELEASE_NOTES",
|
|
226
|
+
description: "Whether the name and body of this release should be generated automatically",
|
|
227
|
+
optional: true,
|
|
228
|
+
default_value: false,
|
|
229
|
+
type: Boolean),
|
|
224
230
|
FastlaneCore::ConfigItem.new(key: :upload_assets,
|
|
225
231
|
env_name: "FL_SET_GITHUB_RELEASE_UPLOAD_ASSETS",
|
|
226
232
|
description: "Path to assets to be uploaded with the release",
|
|
@@ -4993,6 +4993,7 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
|
|
|
4993
4993
|
Ensure a valid push profile is active, creating a new one if needed (via _pem_)
|
|
4994
4994
|
|
|
4995
4995
|
- parameters:
|
|
4996
|
+
- platform: Set certificate's platform. Used for creation of production & development certificates. Supported platforms: ios, macos
|
|
4996
4997
|
- development: Renew the development push certificate instead of the production one
|
|
4997
4998
|
- websitePush: Create a Website Push certificate
|
|
4998
4999
|
- generateP12: Generate a p12 file additionally to a PEM file
|
|
@@ -5020,7 +5021,8 @@ public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<Str
|
|
|
5020
5021
|
```|
|
|
5021
5022
|
>|
|
|
5022
5023
|
*/
|
|
5023
|
-
public func getPushCertificate(
|
|
5024
|
+
public func getPushCertificate(platform: String = "ios",
|
|
5025
|
+
development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
5024
5026
|
websitePush: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
5025
5027
|
generateP12: OptionalConfigValue<Bool> = .fastlaneDefault(true),
|
|
5026
5028
|
activeDaysLimit: Int = 30,
|
|
@@ -5035,6 +5037,7 @@ public func getPushCertificate(development: OptionalConfigValue<Bool> = .fastlan
|
|
|
5035
5037
|
outputPath: String = ".",
|
|
5036
5038
|
newProfile: ((String) -> Void)? = nil)
|
|
5037
5039
|
{
|
|
5040
|
+
let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
|
|
5038
5041
|
let developmentArg = development.asRubyArgument(name: "development", type: nil)
|
|
5039
5042
|
let websitePushArg = websitePush.asRubyArgument(name: "website_push", type: nil)
|
|
5040
5043
|
let generateP12Arg = generateP12.asRubyArgument(name: "generate_p12", type: nil)
|
|
@@ -5049,7 +5052,8 @@ public func getPushCertificate(development: OptionalConfigValue<Bool> = .fastlan
|
|
|
5049
5052
|
let pemNameArg = pemName.asRubyArgument(name: "pem_name", type: nil)
|
|
5050
5053
|
let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
|
|
5051
5054
|
let newProfileArg = RubyCommand.Argument(name: "new_profile", value: newProfile, type: .stringClosure)
|
|
5052
|
-
let array: [RubyCommand.Argument?] = [
|
|
5055
|
+
let array: [RubyCommand.Argument?] = [platformArg,
|
|
5056
|
+
developmentArg,
|
|
5053
5057
|
websitePushArg,
|
|
5054
5058
|
generateP12Arg,
|
|
5055
5059
|
activeDaysLimitArg,
|
|
@@ -5078,7 +5082,7 @@ public func getPushCertificate(development: OptionalConfigValue<Bool> = .fastlan
|
|
|
5078
5082
|
- target: Target name, optional. Will be needed if you have more than one non-test target to avoid being prompted to select one
|
|
5079
5083
|
- configuration: Configuration name, optional. Will be needed if you have altered the configurations from the default or your version number depends on the configuration selected
|
|
5080
5084
|
|
|
5081
|
-
This action will return the current version number set on your project.
|
|
5085
|
+
This action will return the current version number set on your project. It first looks in the plist and then for '$(MARKETING_VERSION)' in the build settings.
|
|
5082
5086
|
*/
|
|
5083
5087
|
@discardableResult public func getVersionNumber(xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
5084
5088
|
target: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
@@ -7098,6 +7102,7 @@ public func nexusUpload(file: String,
|
|
|
7098
7102
|
- package: Path to package to notarize, e.g. .app bundle or disk image
|
|
7099
7103
|
- useNotarytool: Whether to `xcrun notarytool` or `xcrun altool`
|
|
7100
7104
|
- tryEarlyStapling: Whether to try early stapling while the notarization request is in progress
|
|
7105
|
+
- skipStapling: Do not staple the notarization ticket to the artifact; useful for single file executables and ZIP archives
|
|
7101
7106
|
- bundleId: Bundle identifier to uniquely identify the package
|
|
7102
7107
|
- username: Apple ID username
|
|
7103
7108
|
- ascProvider: Provider short name for accounts associated with multiple providers
|
|
@@ -7109,6 +7114,7 @@ public func nexusUpload(file: String,
|
|
|
7109
7114
|
public func notarize(package: String,
|
|
7110
7115
|
useNotarytool: OptionalConfigValue<Bool> = .fastlaneDefault(true),
|
|
7111
7116
|
tryEarlyStapling: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
7117
|
+
skipStapling: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
7112
7118
|
bundleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
7113
7119
|
username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
7114
7120
|
ascProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
@@ -7120,6 +7126,7 @@ public func notarize(package: String,
|
|
|
7120
7126
|
let packageArg = RubyCommand.Argument(name: "package", value: package, type: nil)
|
|
7121
7127
|
let useNotarytoolArg = useNotarytool.asRubyArgument(name: "use_notarytool", type: nil)
|
|
7122
7128
|
let tryEarlyStaplingArg = tryEarlyStapling.asRubyArgument(name: "try_early_stapling", type: nil)
|
|
7129
|
+
let skipStaplingArg = skipStapling.asRubyArgument(name: "skip_stapling", type: nil)
|
|
7123
7130
|
let bundleIdArg = bundleId.asRubyArgument(name: "bundle_id", type: nil)
|
|
7124
7131
|
let usernameArg = username.asRubyArgument(name: "username", type: nil)
|
|
7125
7132
|
let ascProviderArg = ascProvider.asRubyArgument(name: "asc_provider", type: nil)
|
|
@@ -7130,6 +7137,7 @@ public func notarize(package: String,
|
|
|
7130
7137
|
let array: [RubyCommand.Argument?] = [packageArg,
|
|
7131
7138
|
useNotarytoolArg,
|
|
7132
7139
|
tryEarlyStaplingArg,
|
|
7140
|
+
skipStaplingArg,
|
|
7133
7141
|
bundleIdArg,
|
|
7134
7142
|
usernameArg,
|
|
7135
7143
|
ascProviderArg,
|
|
@@ -7391,6 +7399,7 @@ public func optOutUsage() {
|
|
|
7391
7399
|
Alias for the `get_push_certificate` action
|
|
7392
7400
|
|
|
7393
7401
|
- parameters:
|
|
7402
|
+
- platform: Set certificate's platform. Used for creation of production & development certificates. Supported platforms: ios, macos
|
|
7394
7403
|
- development: Renew the development push certificate instead of the production one
|
|
7395
7404
|
- websitePush: Create a Website Push certificate
|
|
7396
7405
|
- generateP12: Generate a p12 file additionally to a PEM file
|
|
@@ -7418,7 +7427,8 @@ public func optOutUsage() {
|
|
|
7418
7427
|
```|
|
|
7419
7428
|
>|
|
|
7420
7429
|
*/
|
|
7421
|
-
public func pem(
|
|
7430
|
+
public func pem(platform: String = "ios",
|
|
7431
|
+
development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
7422
7432
|
websitePush: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
7423
7433
|
generateP12: OptionalConfigValue<Bool> = .fastlaneDefault(true),
|
|
7424
7434
|
activeDaysLimit: Int = 30,
|
|
@@ -7433,6 +7443,7 @@ public func pem(development: OptionalConfigValue<Bool> = .fastlaneDefault(false)
|
|
|
7433
7443
|
outputPath: String = ".",
|
|
7434
7444
|
newProfile: ((String) -> Void)? = nil)
|
|
7435
7445
|
{
|
|
7446
|
+
let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
|
|
7436
7447
|
let developmentArg = development.asRubyArgument(name: "development", type: nil)
|
|
7437
7448
|
let websitePushArg = websitePush.asRubyArgument(name: "website_push", type: nil)
|
|
7438
7449
|
let generateP12Arg = generateP12.asRubyArgument(name: "generate_p12", type: nil)
|
|
@@ -7447,7 +7458,8 @@ public func pem(development: OptionalConfigValue<Bool> = .fastlaneDefault(false)
|
|
|
7447
7458
|
let pemNameArg = pemName.asRubyArgument(name: "pem_name", type: nil)
|
|
7448
7459
|
let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
|
|
7449
7460
|
let newProfileArg = RubyCommand.Argument(name: "new_profile", value: newProfile, type: .stringClosure)
|
|
7450
|
-
let array: [RubyCommand.Argument?] = [
|
|
7461
|
+
let array: [RubyCommand.Argument?] = [platformArg,
|
|
7462
|
+
developmentArg,
|
|
7451
7463
|
websitePushArg,
|
|
7452
7464
|
generateP12Arg,
|
|
7453
7465
|
activeDaysLimitArg,
|
|
@@ -9438,6 +9450,7 @@ public func setChangelog(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDef
|
|
|
9438
9450
|
- description: Description of this release
|
|
9439
9451
|
- isDraft: Whether the release should be marked as draft
|
|
9440
9452
|
- isPrerelease: Whether the release should be marked as prerelease
|
|
9453
|
+
- isGenerateReleaseNotes: Whether the name and body of this release should be generated automatically
|
|
9441
9454
|
- uploadAssets: Path to assets to be uploaded with the release
|
|
9442
9455
|
|
|
9443
9456
|
- returns: A hash containing all relevant information of this release
|
|
@@ -9457,6 +9470,7 @@ public func setChangelog(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDef
|
|
|
9457
9470
|
description: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
9458
9471
|
isDraft: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
9459
9472
|
isPrerelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
9473
|
+
isGenerateReleaseNotes: OptionalConfigValue<Bool> = .fastlaneDefault(false),
|
|
9460
9474
|
uploadAssets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil)) -> [String: Any]
|
|
9461
9475
|
{
|
|
9462
9476
|
let repositoryNameArg = RubyCommand.Argument(name: "repository_name", value: repositoryName, type: nil)
|
|
@@ -9469,6 +9483,7 @@ public func setChangelog(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDef
|
|
|
9469
9483
|
let descriptionArg = description.asRubyArgument(name: "description", type: nil)
|
|
9470
9484
|
let isDraftArg = isDraft.asRubyArgument(name: "is_draft", type: nil)
|
|
9471
9485
|
let isPrereleaseArg = isPrerelease.asRubyArgument(name: "is_prerelease", type: nil)
|
|
9486
|
+
let isGenerateReleaseNotesArg = isGenerateReleaseNotes.asRubyArgument(name: "is_generate_release_notes", type: nil)
|
|
9472
9487
|
let uploadAssetsArg = uploadAssets.asRubyArgument(name: "upload_assets", type: nil)
|
|
9473
9488
|
let array: [RubyCommand.Argument?] = [repositoryNameArg,
|
|
9474
9489
|
serverUrlArg,
|
|
@@ -9480,6 +9495,7 @@ public func setChangelog(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDef
|
|
|
9480
9495
|
descriptionArg,
|
|
9481
9496
|
isDraftArg,
|
|
9482
9497
|
isPrereleaseArg,
|
|
9498
|
+
isGenerateReleaseNotesArg,
|
|
9483
9499
|
uploadAssetsArg]
|
|
9484
9500
|
let args: [RubyCommand.Argument] = array
|
|
9485
9501
|
.filter { $0?.value != nil }
|
|
@@ -13048,7 +13064,7 @@ public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil)
|
|
|
13048
13064
|
coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13049
13065
|
coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13050
13066
|
xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
|
|
13051
|
-
ideFoundationPath: String = "/Applications/Xcode.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
|
13067
|
+
ideFoundationPath: String = "/Applications/Xcode-13.1.0.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
|
13052
13068
|
legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
|
|
13053
13069
|
{
|
|
13054
13070
|
let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
|
|
@@ -13250,4 +13266,4 @@ public let snapshotfile = Snapshotfile()
|
|
|
13250
13266
|
|
|
13251
13267
|
// Please don't remove the lines below
|
|
13252
13268
|
// They are used to detect outdated files
|
|
13253
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
13269
|
+
// FastlaneRunnerAPIVersion [0.9.140]
|
|
@@ -2,30 +2,35 @@
|
|
|
2
2
|
"entries": {
|
|
3
3
|
"brew": {
|
|
4
4
|
"swiftformat": {
|
|
5
|
-
"version": "0.48.
|
|
5
|
+
"version": "0.48.18",
|
|
6
6
|
"bottle": {
|
|
7
7
|
"rebuild": 0,
|
|
8
8
|
"root_url": "https://ghcr.io/v2/homebrew/core",
|
|
9
9
|
"files": {
|
|
10
|
+
"arm64_monterey": {
|
|
11
|
+
"cellar": ":any_skip_relocation",
|
|
12
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:adbb11cdda0596a1f40e920f826a2e1ffe6aeb1643c43ddb108f25f30755be39",
|
|
13
|
+
"sha256": "adbb11cdda0596a1f40e920f826a2e1ffe6aeb1643c43ddb108f25f30755be39"
|
|
14
|
+
},
|
|
10
15
|
"arm64_big_sur": {
|
|
11
16
|
"cellar": ":any_skip_relocation",
|
|
12
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
13
|
-
"sha256": "
|
|
17
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:74691b21c40d34459c5825306828039bdbdfdd02c80d1cea5c449c3f59760ab1",
|
|
18
|
+
"sha256": "74691b21c40d34459c5825306828039bdbdfdd02c80d1cea5c449c3f59760ab1"
|
|
14
19
|
},
|
|
15
|
-
"
|
|
20
|
+
"monterey": {
|
|
16
21
|
"cellar": ":any_skip_relocation",
|
|
17
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
18
|
-
"sha256": "
|
|
22
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:14e4b90f29b55b06c92f90b6e81e8dd55c54ff258ee8b0bab2bb479ce0cc8daf",
|
|
23
|
+
"sha256": "14e4b90f29b55b06c92f90b6e81e8dd55c54ff258ee8b0bab2bb479ce0cc8daf"
|
|
19
24
|
},
|
|
20
|
-
"
|
|
25
|
+
"big_sur": {
|
|
21
26
|
"cellar": ":any_skip_relocation",
|
|
22
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
23
|
-
"sha256": "
|
|
27
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:73f0497b504f87159bc2d133371014e0372799d89f62bc78068b3b5427ae614f",
|
|
28
|
+
"sha256": "73f0497b504f87159bc2d133371014e0372799d89f62bc78068b3b5427ae614f"
|
|
24
29
|
},
|
|
25
|
-
"
|
|
30
|
+
"catalina": {
|
|
26
31
|
"cellar": ":any_skip_relocation",
|
|
27
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
|
28
|
-
"sha256": "
|
|
32
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:11543d157b589acdf9de93133a68fa32aa00372b574a64c40292aead20f6f6cb",
|
|
33
|
+
"sha256": "11543d157b589acdf9de93133a68fa32aa00372b574a64c40292aead20f6f6cb"
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
36
|
}
|
|
@@ -51,12 +56,12 @@
|
|
|
51
56
|
"macOS": "11.6"
|
|
52
57
|
},
|
|
53
58
|
"monterey": {
|
|
54
|
-
"HOMEBREW_VERSION": "3.
|
|
55
|
-
"HOMEBREW_PREFIX": "/
|
|
56
|
-
"Homebrew/homebrew-core": "
|
|
57
|
-
"CLT": "13.
|
|
58
|
-
"Xcode": "13.
|
|
59
|
-
"macOS": "12.0"
|
|
59
|
+
"HOMEBREW_VERSION": "3.3.4",
|
|
60
|
+
"HOMEBREW_PREFIX": "/opt/homebrew",
|
|
61
|
+
"Homebrew/homebrew-core": "446005a8fbbc1a51d0bd8efd8e03bf82f1f78fab",
|
|
62
|
+
"CLT": "13.1.0.0.1.1633545042",
|
|
63
|
+
"Xcode": "13.1",
|
|
64
|
+
"macOS": "12.0.1"
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'shellwords'
|
|
2
|
+
require 'tmpdir'
|
|
2
3
|
require 'fileutils'
|
|
3
4
|
require 'credentials_manager/account_manager'
|
|
4
5
|
|
|
@@ -148,6 +149,14 @@ module FastlaneCore
|
|
|
148
149
|
end
|
|
149
150
|
end
|
|
150
151
|
|
|
152
|
+
def file_upload_option(source)
|
|
153
|
+
if File.extname(source) == ".itmsp"
|
|
154
|
+
return "-f #{source.shellescape}"
|
|
155
|
+
else
|
|
156
|
+
return "-assetFile #{source.shellescape}"
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
151
160
|
def additional_upload_parameters
|
|
152
161
|
# As Apple recommends in Transporter User Guide we shouldn't specify the -t transport parameter
|
|
153
162
|
# and instead allow Transporter to use automatic transport discovery
|
|
@@ -177,7 +186,7 @@ module FastlaneCore
|
|
|
177
186
|
("-u #{username.shellescape}" unless use_jwt),
|
|
178
187
|
("-p #{shell_escaped_password(password)}" unless use_jwt),
|
|
179
188
|
("-jwt #{jwt}" if use_jwt),
|
|
180
|
-
|
|
189
|
+
file_upload_option(source),
|
|
181
190
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
|
182
191
|
"-k 100000",
|
|
183
192
|
("-WONoPause true" if Helper.windows?), # Windows only: process instantly returns instead of waiting for key press
|
|
@@ -261,7 +270,7 @@ module FastlaneCore
|
|
|
261
270
|
("-u #{username.shellescape}" unless use_jwt),
|
|
262
271
|
("-p @env:ITMS_TRANSPORTER_PASSWORD" unless use_jwt),
|
|
263
272
|
("-jwt #{jwt}" if use_jwt),
|
|
264
|
-
|
|
273
|
+
file_upload_option(source),
|
|
265
274
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
|
266
275
|
'-k 100000',
|
|
267
276
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
|
@@ -282,7 +291,7 @@ module FastlaneCore
|
|
|
282
291
|
("-u #{username.shellescape}" unless use_jwt),
|
|
283
292
|
("-p #{password.shellescape}" unless use_jwt),
|
|
284
293
|
("-jwt #{jwt}" if use_jwt),
|
|
285
|
-
|
|
294
|
+
file_upload_option(source),
|
|
286
295
|
additional_upload_parameters, # that's here, because the user might overwrite the -t option
|
|
287
296
|
'-k 100000',
|
|
288
297
|
("-itc_provider #{provider_short_name}" if jwt.nil? && !provider_short_name.to_s.empty?),
|
|
@@ -472,12 +481,27 @@ module FastlaneCore
|
|
|
472
481
|
# @param app_id [Integer] The unique App ID
|
|
473
482
|
# @param dir [String] the path in which the package file is located
|
|
474
483
|
# @param package_path [String] the path to the package file (used instead of app_id and dir)
|
|
484
|
+
# @param asset_path [String] the path to the ipa/dmg/pkg file (used instead of package_path if running on macOS)
|
|
475
485
|
# @return (Bool) True if everything worked fine
|
|
476
486
|
# @raise [Deliver::TransporterTransferError] when something went wrong
|
|
477
487
|
# when transferring
|
|
478
|
-
def upload(app_id = nil, dir = nil, package_path: nil)
|
|
479
|
-
raise "app_id and dir are required or package_path is required" if (app_id.nil? || dir.nil?) && package_path.nil?
|
|
480
|
-
|
|
488
|
+
def upload(app_id = nil, dir = nil, package_path: nil, asset_path: nil)
|
|
489
|
+
raise "app_id and dir are required or package_path or asset_path is required" if (app_id.nil? || dir.nil?) && package_path.nil? && asset_path.nil?
|
|
490
|
+
|
|
491
|
+
# Transport can upload .ipa, .dmg, and .pkg files directly with -assetFile
|
|
492
|
+
# However, -assetFile requires -assetDescription if Linux or Windows
|
|
493
|
+
# This will give the asset directly if macOS and asset_path exists
|
|
494
|
+
# otherwise it will use the .itmsp package
|
|
495
|
+
actual_dir = if Helper.is_mac? && asset_path
|
|
496
|
+
# The asset gets deleted upon completion so copying to a temp directory
|
|
497
|
+
tmp_asset_path = File.join(Dir.tmpdir, File.basename(asset_path))
|
|
498
|
+
FileUtils.cp(asset_path, tmp_asset_path)
|
|
499
|
+
tmp_asset_path
|
|
500
|
+
elsif package_path
|
|
501
|
+
package_path
|
|
502
|
+
else
|
|
503
|
+
File.join(dir, "#{app_id}.itmsp")
|
|
504
|
+
end
|
|
481
505
|
|
|
482
506
|
UI.message("Going to upload updated app to App Store Connect")
|
|
483
507
|
UI.success("This might take a few minutes. Please don't interrupt the script.")
|
|
@@ -492,7 +516,7 @@ module FastlaneCore
|
|
|
492
516
|
result = @transporter_executor.execute(command, ItunesTransporter.hide_transporter_output?)
|
|
493
517
|
rescue TransporterRequiresApplicationSpecificPasswordError => ex
|
|
494
518
|
handle_two_step_failure(ex)
|
|
495
|
-
return upload(app_id, dir, package_path: package_path)
|
|
519
|
+
return upload(app_id, dir, package_path: package_path, asset_path: asset_path)
|
|
496
520
|
end
|
|
497
521
|
|
|
498
522
|
if result
|
data/match/lib/match/nuke.rb
CHANGED
|
@@ -9,7 +9,11 @@ require_relative 'module'
|
|
|
9
9
|
require_relative 'storage'
|
|
10
10
|
require_relative 'encryption'
|
|
11
11
|
|
|
12
|
+
require 'tempfile'
|
|
13
|
+
require 'base64'
|
|
14
|
+
|
|
12
15
|
module Match
|
|
16
|
+
# rubocop:disable Metrics/ClassLength
|
|
13
17
|
class Nuke
|
|
14
18
|
attr_accessor :params
|
|
15
19
|
attr_accessor :type
|
|
@@ -67,6 +71,7 @@ module Match
|
|
|
67
71
|
title: "Summary for match nuke #{Fastlane::VERSION}")
|
|
68
72
|
|
|
69
73
|
prepare_list
|
|
74
|
+
filter_by_cert
|
|
70
75
|
print_tables
|
|
71
76
|
|
|
72
77
|
if params[:readonly]
|
|
@@ -139,7 +144,7 @@ module Match
|
|
|
139
144
|
types = profile_types(prov_type)
|
|
140
145
|
# Filtering on 'profileType' seems to be undocumented as of 2020-07-30
|
|
141
146
|
# but works on both web session and official API
|
|
142
|
-
self.profiles += Spaceship::ConnectAPI::Profile.all(filter: { profileType: types.join(",") })
|
|
147
|
+
self.profiles += Spaceship::ConnectAPI::Profile.all(filter: { profileType: types.join(",") }, includes: "certificates")
|
|
143
148
|
end
|
|
144
149
|
|
|
145
150
|
# Gets the main and additional cert types
|
|
@@ -173,6 +178,78 @@ module Match
|
|
|
173
178
|
self.files = certs + keys + profiles
|
|
174
179
|
end
|
|
175
180
|
|
|
181
|
+
def filter_by_cert
|
|
182
|
+
# Force will continue to revoke and delete all certificates and profiles
|
|
183
|
+
return if self.params[:force] || !UI.interactive?
|
|
184
|
+
return if self.certs.count < 2
|
|
185
|
+
|
|
186
|
+
# Print table showing certificates that can be revoked
|
|
187
|
+
puts("")
|
|
188
|
+
rows = self.certs.each_with_index.collect do |cert, i|
|
|
189
|
+
cert_expiration = cert.expiration_date.nil? ? "Unknown" : Time.parse(cert.expiration_date).strftime("%Y-%m-%d")
|
|
190
|
+
[i + 1, cert.name, cert.id, cert.class.to_s.split("::").last, cert_expiration]
|
|
191
|
+
end
|
|
192
|
+
puts(Terminal::Table.new({
|
|
193
|
+
title: "Certificates that can be revoked".green,
|
|
194
|
+
headings: ["Option", "Name", "ID", "Type", "Expires"],
|
|
195
|
+
rows: FastlaneCore::PrintTable.transform_output(rows)
|
|
196
|
+
}))
|
|
197
|
+
puts("")
|
|
198
|
+
|
|
199
|
+
UI.important("By default, all listed certificates and profiles will be nuked")
|
|
200
|
+
if UI.confirm("Do you want to only nuke specific certificates and their associated profiles?")
|
|
201
|
+
input_indexes = UI.input("Enter the \"Option\" number(s) from the table above? (comma-separated)").split(',')
|
|
202
|
+
|
|
203
|
+
# Get certificates from option indexes
|
|
204
|
+
self.certs = input_indexes.map do |index|
|
|
205
|
+
self.certs[index.to_i - 1]
|
|
206
|
+
end.compact
|
|
207
|
+
|
|
208
|
+
if self.certs.empty?
|
|
209
|
+
UI.user_error!("No certificates were selected based on option number(s) entered")
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# Do profile selection logic
|
|
213
|
+
cert_ids = self.certs.map(&:id)
|
|
214
|
+
self.profiles = self.profiles.select do |profile|
|
|
215
|
+
profile_cert_ids = profile.certificates.map(&:id)
|
|
216
|
+
(cert_ids & profile_cert_ids).any?
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Do file selection logic
|
|
220
|
+
self.files = self.files.select do |f|
|
|
221
|
+
found = false
|
|
222
|
+
|
|
223
|
+
ext = File.extname(f)
|
|
224
|
+
filename = File.basename(f, ".*")
|
|
225
|
+
|
|
226
|
+
# Attempt to find cert based on filename
|
|
227
|
+
if ext == ".cer" || ext == ".p12"
|
|
228
|
+
found ||= self.certs.any? do |cert|
|
|
229
|
+
filename == cert.id.to_s
|
|
230
|
+
end
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Attempt to find profile matched on UUIDs in profile
|
|
234
|
+
if ext == ".mobileprovision" || ext == ".provisionprofile"
|
|
235
|
+
storage_uuid = FastlaneCore::ProvisioningProfile.uuid(f)
|
|
236
|
+
|
|
237
|
+
found ||= self.profiles.any? do |profile|
|
|
238
|
+
tmp_file = Tempfile.new
|
|
239
|
+
tmp_file.write(Base64.decode64(profile.profile_content))
|
|
240
|
+
tmp_file.close
|
|
241
|
+
|
|
242
|
+
# Compare profile uuid in storage to profile uuid on developer portal
|
|
243
|
+
portal_uuid = FastlaneCore::ProvisioningProfile.uuid(tmp_file.path)
|
|
244
|
+
storage_uuid == portal_uuid
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
found
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
176
253
|
# Print tables to ask the user
|
|
177
254
|
def print_tables
|
|
178
255
|
puts("")
|
|
@@ -351,4 +428,5 @@ module Match
|
|
|
351
428
|
end
|
|
352
429
|
end
|
|
353
430
|
end
|
|
431
|
+
# rubocop:disable Metrics/ClassLength
|
|
354
432
|
end
|
|
@@ -70,6 +70,7 @@ module Match
|
|
|
70
70
|
UI.error("for the user #{username}")
|
|
71
71
|
UI.error("Make sure to use the same user and team every time you run 'match' for this")
|
|
72
72
|
UI.error("Git repository. This might be caused by revoking the certificate on the Dev Portal")
|
|
73
|
+
UI.error("If missing certificate is a Developer ID Installer, you may need to auth with Apple ID instead of App Store API Key")
|
|
73
74
|
UI.user_error!("To reset the certificates of your Apple account, you can use the `fastlane match nuke` feature, more information on https://docs.fastlane.tools/actions/match/")
|
|
74
75
|
end
|
|
75
76
|
|
data/pem/lib/pem/manager.rb
CHANGED
|
@@ -18,7 +18,13 @@ module PEM
|
|
|
18
18
|
|
|
19
19
|
if existing_certificate
|
|
20
20
|
remaining_days = (existing_certificate.expires - Time.now) / 60 / 60 / 24
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
display_platform = ''
|
|
23
|
+
unless PEM.config[:website_push]
|
|
24
|
+
display_platform = "#{PEM.config[:platform]} "
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
UI.message("Existing #{display_platform}push notification profile for '#{existing_certificate.owner_name}' is valid for #{remaining_days.round} more days.")
|
|
22
28
|
if remaining_days > PEM.config[:active_days_limit]
|
|
23
29
|
if PEM.config[:force]
|
|
24
30
|
UI.success("You already have an existing push certificate, but a new one will be created since the --force option has been set.")
|
|
@@ -59,7 +65,7 @@ module PEM
|
|
|
59
65
|
|
|
60
66
|
x509_certificate = cert.download
|
|
61
67
|
|
|
62
|
-
filename_base = PEM.config[:pem_name] || "#{certificate_type}_#{PEM.config[:app_identifier]}"
|
|
68
|
+
filename_base = PEM.config[:pem_name] || "#{certificate_type}_#{PEM.config[:app_identifier]}_#{PEM.config[:platform]}"
|
|
63
69
|
filename_base = File.basename(filename_base, ".pem") # strip off the .pem if it was provided.
|
|
64
70
|
|
|
65
71
|
output_path = File.expand_path(PEM.config[:output_path])
|
|
@@ -86,12 +92,29 @@ module PEM
|
|
|
86
92
|
end
|
|
87
93
|
|
|
88
94
|
def certificate
|
|
89
|
-
if PEM.config[:
|
|
90
|
-
Spaceship.certificate.development_push
|
|
91
|
-
elsif PEM.config[:website_push]
|
|
95
|
+
if PEM.config[:website_push]
|
|
92
96
|
Spaceship.certificate.website_push
|
|
93
97
|
else
|
|
94
|
-
|
|
98
|
+
platform = PEM.config[:platform]
|
|
99
|
+
UI.user_error!('platform parameter is unspecified.') unless platform
|
|
100
|
+
|
|
101
|
+
case platform
|
|
102
|
+
when 'ios'
|
|
103
|
+
if PEM.config[:development]
|
|
104
|
+
Spaceship.certificate.development_push
|
|
105
|
+
else
|
|
106
|
+
Spaceship.certificate.production_push
|
|
107
|
+
end
|
|
108
|
+
when 'macos'
|
|
109
|
+
if PEM.config[:development]
|
|
110
|
+
Spaceship.certificate.mac_development_push
|
|
111
|
+
else
|
|
112
|
+
Spaceship.certificate.mac_production_push
|
|
113
|
+
end
|
|
114
|
+
else
|
|
115
|
+
UI.user_error!("Unsupported platform '#{platform}'. Supported platforms for development and production certificates are 'ios' & 'macos'")
|
|
116
|
+
end
|
|
117
|
+
|
|
95
118
|
end
|
|
96
119
|
end
|
|
97
120
|
|
data/pem/lib/pem/options.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'fastlane_core/configuration/config_item'
|
|
2
2
|
require 'credentials_manager/appfile_config'
|
|
3
|
+
require 'fastlane/helper/lane_helper'
|
|
3
4
|
|
|
4
5
|
require_relative 'module'
|
|
5
6
|
|
|
@@ -10,6 +11,14 @@ module PEM
|
|
|
10
11
|
user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
|
11
12
|
|
|
12
13
|
[
|
|
14
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
|
15
|
+
description: "Set certificate's platform. Used for creation of production & development certificates. Supported platforms: ios, macos",
|
|
16
|
+
short_option: "-m",
|
|
17
|
+
env_name: "PEM_PLATFORM",
|
|
18
|
+
default_value: "ios",
|
|
19
|
+
verify_block: proc do |value|
|
|
20
|
+
UI.user_error!("The platform can only be ios or macos") unless ['ios', 'macos'].include?(value)
|
|
21
|
+
end),
|
|
13
22
|
FastlaneCore::ConfigItem.new(key: :development,
|
|
14
23
|
env_name: "PEM_DEVELOPMENT",
|
|
15
24
|
description: "Renew the development push certificate instead of the production one",
|
|
@@ -38,7 +38,7 @@ module Pilot
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
transporter = transporter_for_selected_team(options)
|
|
41
|
-
result = transporter.upload(package_path: package_path)
|
|
41
|
+
result = transporter.upload(package_path: package_path, asset_path: options[:ipa] || options[:pkg])
|
|
42
42
|
|
|
43
43
|
unless result
|
|
44
44
|
transporter_errors = transporter.displayable_errors
|
data/scan/lib/scan/runner.rb
CHANGED
|
@@ -226,7 +226,7 @@ module Scan
|
|
|
226
226
|
FileUtils.cp(xctestrun_file, output_path)
|
|
227
227
|
UI.message("Successfully copied xctestrun file: #{output_path}")
|
|
228
228
|
else
|
|
229
|
-
UI.user_error!("Could not find .
|
|
229
|
+
UI.user_error!("Could not find .xctestrun file to copy")
|
|
230
230
|
end
|
|
231
231
|
end
|
|
232
232
|
|
|
@@ -41,6 +41,9 @@ module Spaceship
|
|
|
41
41
|
MAC_APP_DEVELOPMENT = "MAC_APP_DEVELOPMENT"
|
|
42
42
|
DEVELOPER_ID_KEXT = "DEVELOPER_ID_KEXT"
|
|
43
43
|
DEVELOPER_ID_APPLICATION = "DEVELOPER_ID_APPLICATION"
|
|
44
|
+
|
|
45
|
+
# As of 2021-11-09, this is only available with Apple ID auth
|
|
46
|
+
DEVELOPER_ID_INSTALLER = "DEVELOPER_ID_INSTALLER"
|
|
44
47
|
end
|
|
45
48
|
|
|
46
49
|
def self.type
|
metadata
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.198.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
- Max Ott
|
|
8
|
-
- Danielle Tomlinson
|
|
9
|
-
- Jimmy Dee
|
|
10
|
-
- Manish Rathi
|
|
11
|
-
- Manu Wallner
|
|
12
|
-
- Maksym Grebenets
|
|
13
7
|
- Iulian Onofrei
|
|
8
|
+
- Luka Mirosevic
|
|
14
9
|
- Felix Krause
|
|
15
|
-
-
|
|
16
|
-
- Jan Piotrowski
|
|
10
|
+
- Manish Rathi
|
|
17
11
|
- Stefan Natchev
|
|
18
|
-
-
|
|
19
|
-
-
|
|
12
|
+
- Jorge Revuelta H
|
|
13
|
+
- Danielle Tomlinson
|
|
20
14
|
- Fumiya Nakamura
|
|
15
|
+
- Helmut Januschka
|
|
16
|
+
- Maksym Grebenets
|
|
17
|
+
- Andrew McBurney
|
|
18
|
+
- Jimmy Dee
|
|
21
19
|
- Kohki Miki
|
|
20
|
+
- Josh Holtz
|
|
21
|
+
- Aaron Brager
|
|
22
|
+
- Max Ott
|
|
22
23
|
- Satoshi Namai
|
|
24
|
+
- Manu Wallner
|
|
23
25
|
- Jérôme Lacoste
|
|
24
|
-
-
|
|
25
|
-
- Aaron Brager
|
|
26
|
+
- Jan Piotrowski
|
|
26
27
|
- Olivier Halligon
|
|
27
28
|
- Matthew Ellis
|
|
28
29
|
- Roger Oba
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
- Jorge Revuelta H
|
|
30
|
+
- Joshua Liebowitz
|
|
31
|
+
- Daniel Jankowski
|
|
32
32
|
autorequire:
|
|
33
33
|
bindir: bin
|
|
34
34
|
cert_chain: []
|
|
35
|
-
date: 2021-
|
|
35
|
+
date: 2021-11-16 00:00:00.000000000 Z
|
|
36
36
|
dependencies:
|
|
37
37
|
- !ruby/object:Gem::Dependency
|
|
38
38
|
name: xcodeproj
|
|
@@ -1654,7 +1654,6 @@ files:
|
|
|
1654
1654
|
- spaceship/lib/spaceship/connect_api/client.rb
|
|
1655
1655
|
- spaceship/lib/spaceship/connect_api/file_uploader.rb
|
|
1656
1656
|
- spaceship/lib/spaceship/connect_api/model.rb
|
|
1657
|
-
- spaceship/lib/spaceship/connect_api/models/.build.rb.swp
|
|
1658
1657
|
- spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
|
|
1659
1658
|
- spaceship/lib/spaceship/connect_api/models/app.rb
|
|
1660
1659
|
- spaceship/lib/spaceship/connect_api/models/app_category.rb
|
|
Binary file
|