fastlane 2.160.0 → 2.161.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 +80 -80
- data/fastlane/lib/fastlane/actions/actions_helper.rb +20 -1
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +6 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -0
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +13 -2
- 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 +8 -5
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +17 -21
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +2 -2
- 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/match/lib/match/options.rb +1 -1
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +4 -1
- data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +11 -5
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b04dd428b80beb70de6d4aa2f7e0348b4e0c0e1d4aa0e781c311ab18e44d0de5
|
4
|
+
data.tar.gz: fe4342a1c8d7df3e617c111e37bd3cab7c7b3675875f8bd384917f0cafb1a221
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ad358398a4033fe329a06934cee91566dd29c084a0e0e62a86148c0e2b456be46ce008de0b921a68b9d2ffbb3ec11d97a41a286d33cac395d3e4c37ac01adce
|
7
|
+
data.tar.gz: 3d5fbd2690e8dafe1efc9fd4a6d63e711b3569b071d00d39b82e078a5c038c6110df73234d0e15ecc03c7f2792253edea430d6e716c460a7d8c9d371deed0dd0
|
data/README.md
CHANGED
@@ -34,49 +34,43 @@ 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='fumiya-nakamura'>
|
38
|
-
<a href='https://github.com/nafu'>
|
39
|
-
<img src='https://github.com/nafu.png?size=140'>
|
40
|
-
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
42
|
-
</td>
|
43
37
|
<td id='stefan-natchev'>
|
44
38
|
<a href='https://github.com/snatchev'>
|
45
39
|
<img src='https://github.com/snatchev.png?size=140'>
|
46
40
|
</a>
|
47
41
|
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
48
42
|
</td>
|
49
|
-
<td id='
|
50
|
-
<a href='https://github.com/
|
51
|
-
<img src='https://github.com/
|
43
|
+
<td id='jorge-revuelta-h'>
|
44
|
+
<a href='https://github.com/minuscorp'>
|
45
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
52
46
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
47
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
54
48
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
49
|
+
<td id='olivier-halligon'>
|
50
|
+
<a href='https://github.com/AliSoftware'>
|
51
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
58
52
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
60
54
|
</td>
|
61
|
-
<td id='
|
62
|
-
<a href='https://github.com/
|
63
|
-
<img src='https://github.com/
|
55
|
+
<td id='fumiya-nakamura'>
|
56
|
+
<a href='https://github.com/nafu'>
|
57
|
+
<img src='https://github.com/nafu.png?size=140'>
|
64
58
|
</a>
|
65
|
-
<h4 align='center'>
|
59
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
66
60
|
</td>
|
67
|
-
|
68
|
-
<
|
69
|
-
<
|
70
|
-
<a href='https://github.com/mgrebenets'>
|
71
|
-
<img src='https://github.com/mgrebenets.png?size=140'>
|
61
|
+
<td id='matthew-ellis'>
|
62
|
+
<a href='https://github.com/matthewellis'>
|
63
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
72
64
|
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/
|
65
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
74
66
|
</td>
|
75
|
-
|
76
|
-
<
|
77
|
-
<
|
67
|
+
</tr>
|
68
|
+
<tr>
|
69
|
+
<td id='aaron-brager'>
|
70
|
+
<a href='https://github.com/getaaron'>
|
71
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
78
72
|
</a>
|
79
|
-
<h4 align='center'><a href='https://twitter.com/
|
73
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
80
74
|
</td>
|
81
75
|
<td id='max-ott'>
|
82
76
|
<a href='https://github.com/max-ott'>
|
@@ -84,69 +78,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
84
78
|
</a>
|
85
79
|
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
86
80
|
</td>
|
87
|
-
<td id='
|
88
|
-
<a href='https://github.com/
|
89
|
-
<img src='https://github.com/
|
81
|
+
<td id='felix-krause'>
|
82
|
+
<a href='https://github.com/KrauseFx'>
|
83
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
90
84
|
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
85
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
92
86
|
</td>
|
93
|
-
<td id='
|
94
|
-
<a href='https://github.com/
|
95
|
-
<img src='https://github.com/
|
87
|
+
<td id='luka-mirosevic'>
|
88
|
+
<a href='https://github.com/lmirosevic'>
|
89
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
96
90
|
</a>
|
97
|
-
<h4 align='center'><a href='https://twitter.com/
|
91
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
98
92
|
</td>
|
99
|
-
|
100
|
-
<
|
101
|
-
<
|
102
|
-
<a href='https://github.com/taquitos'>
|
103
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
93
|
+
<td id='manu-wallner'>
|
94
|
+
<a href='https://github.com/milch'>
|
95
|
+
<img src='https://github.com/milch.png?size=140'>
|
104
96
|
</a>
|
105
|
-
<h4 align='center'><a href='https://twitter.com/
|
97
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
106
98
|
</td>
|
107
|
-
|
108
|
-
<
|
109
|
-
<
|
99
|
+
</tr>
|
100
|
+
<tr>
|
101
|
+
<td id='iulian-onofrei'>
|
102
|
+
<a href='https://github.com/revolter'>
|
103
|
+
<img src='https://github.com/revolter.png?size=140'>
|
110
104
|
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/
|
105
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
112
106
|
</td>
|
113
|
-
<td id='
|
114
|
-
<a href='https://github.com/
|
115
|
-
<img src='https://github.com/
|
107
|
+
<td id='jimmy-dee'>
|
108
|
+
<a href='https://github.com/jdee'>
|
109
|
+
<img src='https://github.com/jdee.png?size=140'>
|
116
110
|
</a>
|
117
|
-
<h4 align='center'
|
111
|
+
<h4 align='center'>Jimmy Dee</h4>
|
118
112
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
113
|
+
<td id='andrew-mcburney'>
|
114
|
+
<a href='https://github.com/armcburney'>
|
115
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
122
116
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
117
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
124
118
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
119
|
+
<td id='maksym-grebenets'>
|
120
|
+
<a href='https://github.com/mgrebenets'>
|
121
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
128
122
|
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
123
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</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
|
-
<
|
142
|
-
|
143
|
-
<
|
144
|
-
</td>
|
145
|
-
<td id='matthew-ellis'>
|
146
|
-
<a href='https://github.com/matthewellis'>
|
147
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td id='jan-piotrowski'>
|
134
|
+
<a href='https://github.com/janpio'>
|
135
|
+
<img src='https://github.com/janpio.png?size=140'>
|
148
136
|
</a>
|
149
|
-
<h4 align='center'><a href='https://twitter.com/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
150
138
|
</td>
|
151
139
|
<td id='danielle-tomlinson'>
|
152
140
|
<a href='https://github.com/endocrimes'>
|
@@ -154,19 +142,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
154
142
|
</a>
|
155
143
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
156
144
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
145
|
+
<td id='kohki-miki'>
|
146
|
+
<a href='https://github.com/giginet'>
|
147
|
+
<img src='https://github.com/giginet.png?size=140'>
|
160
148
|
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
149
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
162
150
|
</td>
|
163
|
-
|
164
|
-
<
|
165
|
-
<
|
166
|
-
<a href='https://github.com/milch'>
|
167
|
-
<img src='https://github.com/milch.png?size=140'>
|
151
|
+
<td id='helmut-januschka'>
|
152
|
+
<a href='https://github.com/hjanuschka'>
|
153
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
168
154
|
</a>
|
169
|
-
<h4 align='center'><a href='https://twitter.com/
|
155
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
170
156
|
</td>
|
171
157
|
<td id='jérôme-lacoste'>
|
172
158
|
<a href='https://github.com/lacostej'>
|
@@ -174,6 +160,20 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
174
160
|
</a>
|
175
161
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
176
162
|
</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<td id='daniel-jankowski'>
|
166
|
+
<a href='https://github.com/mollyIV'>
|
167
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
168
|
+
</a>
|
169
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
170
|
+
</td>
|
171
|
+
<td id='joshua-liebowitz'>
|
172
|
+
<a href='https://github.com/taquitos'>
|
173
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
174
|
+
</a>
|
175
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
176
|
+
</td>
|
177
177
|
</table>
|
178
178
|
|
179
179
|
Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
|
@@ -4,6 +4,25 @@ module Fastlane
|
|
4
4
|
LANE_NAME = :LANE_NAME
|
5
5
|
PLATFORM_NAME = :PLATFORM_NAME
|
6
6
|
ENVIRONMENT = :ENVIRONMENT
|
7
|
+
|
8
|
+
# A slighly decorated hash that will store and fetch sensitive data
|
9
|
+
# but not display it while iterating keys and values
|
10
|
+
class LaneContextValues < Hash
|
11
|
+
def initialize
|
12
|
+
@sensitive_context = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_sensitive(key, value)
|
16
|
+
@sensitive_context[key] = value
|
17
|
+
end
|
18
|
+
|
19
|
+
def [](key)
|
20
|
+
if @sensitive_context.key?(key)
|
21
|
+
return @sensitive_context[key]
|
22
|
+
end
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
7
26
|
end
|
8
27
|
|
9
28
|
def self.reset_aliases
|
@@ -27,7 +46,7 @@ module Fastlane
|
|
27
46
|
|
28
47
|
# The shared hash can be accessed by any action and contains information like the screenshots path or beta URL
|
29
48
|
def self.lane_context
|
30
|
-
@lane_context ||=
|
49
|
+
@lane_context ||= SharedValues::LaneContextValues.new
|
31
50
|
end
|
32
51
|
|
33
52
|
# Used in tests to get a clear lane before every test
|
@@ -17,6 +17,10 @@ module Fastlane
|
|
17
17
|
UI.user_error!(":key_content or :key_filepath is required")
|
18
18
|
end
|
19
19
|
|
20
|
+
# New lines don't get read properly when coming from an ENV
|
21
|
+
# Replacing them literal version with a new line
|
22
|
+
key_content = key_content.gsub('\n', "\n") if key_content
|
23
|
+
|
20
24
|
# This hash matches the named arguments on
|
21
25
|
# the Spaceship::ConnectAPI::Token.create method
|
22
26
|
key = {
|
@@ -27,7 +31,7 @@ module Fastlane
|
|
27
31
|
in_house: in_house
|
28
32
|
}
|
29
33
|
|
30
|
-
Actions.lane_context
|
34
|
+
Actions.lane_context.set_sensitive(SharedValues::APP_STORE_CONNECT_API_KEY, key)
|
31
35
|
|
32
36
|
return key
|
33
37
|
end
|
@@ -55,6 +59,7 @@ module Fastlane
|
|
55
59
|
FastlaneCore::ConfigItem.new(key: :key_content,
|
56
60
|
env_name: "APP_STORE_CONNECT_API_KEY_KEY",
|
57
61
|
description: "The content of the key p8 file",
|
62
|
+
sensitive: true,
|
58
63
|
optional: true,
|
59
64
|
conflicting_options: [:filepath]),
|
60
65
|
FastlaneCore::ConfigItem.new(key: :duration,
|
@@ -198,7 +198,7 @@ class JUnit4StyleTests {
|
|
198
198
|
|
199
199
|
```
|
200
200
|
|
201
|
-
There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use
|
201
|
+
There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
|
202
202
|
|
203
203
|
Using JUnit 4 is preferable because of its ability to perform actions before and after the entire test class is run. This means you will change the device's locale far fewer times when compared with JUnit 3 running those commands before and after each test method.
|
204
204
|
|
@@ -251,7 +251,7 @@ new CleanStatusBar()
|
|
251
251
|
<details>
|
252
252
|
<summary>Launch Arguments</summary>
|
253
253
|
|
254
|
-
You can provide additional arguments to your
|
254
|
+
You can provide additional arguments to your test cases on launch. These strings will be available in your tests through `InstrumentationRegistry.getArguments()`.
|
255
255
|
|
256
256
|
```ruby
|
257
257
|
screengrab(
|
@@ -251,7 +251,7 @@ to update your `SnapshotHelper.swift` files. In case you modified your `Snapshot
|
|
251
251
|
|
252
252
|
## Launch Arguments
|
253
253
|
|
254
|
-
You can provide additional arguments to your app on launch. These strings will be available in your app (
|
254
|
+
You can provide additional arguments to your app on launch. These strings will be available in your app (e.g. not in the testing target) through `ProcessInfo.processInfo.arguments`. Alternatively, use user-default syntax (`-key value`) and they will be available as key-value pairs in `UserDefaults.standard`.
|
255
255
|
|
256
256
|
```ruby-skip-tests
|
257
257
|
launch_arguments([
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<img src="/img/actions/produce.png" width="250">
|
3
3
|
</p>
|
4
4
|
|
5
|
-
###### Create new iOS apps on App Store Connect and
|
5
|
+
###### Create new iOS apps on App Store Connect and Apple Developer Portal using your command line
|
6
6
|
|
7
7
|
_produce_ creates new iOS apps on both the Apple Developer Portal and App Store Connect with the minimum required information.
|
8
8
|
|
@@ -133,7 +133,7 @@ The general parameters are defined in the `default` key and can be:
|
|
133
133
|
| `stack_title` | Specifies whether _frameit_ should display the keyword above the title when both keyword and title are defined. If it is false, the title and keyword will be displayed side by side when both keyword and title are defined. | `false` |
|
134
134
|
| `title_below_image` | Specifies whether _frameit_ should place the title and optional keyword below the device frame. If it is false, it will be placed above the device frame. | `false` |
|
135
135
|
| `show_complete_frame` | Specifies whether _frameit_ should shrink the device frame so that it is completely shown in the framed screenshot. If it is false, clipping of the device frame might occur at the bottom (when `title_below_image` is `false`) or top (when `title_below_image` is `true`) of the framed screenshot. | `false` |
|
136
|
-
| `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of
|
136
|
+
| `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of specifying the padding: <p> 1. Default: An integer value that defines both horizontal and vertical padding in pixels. <br> 2. A string that defines (different) padding values in pixels for horizontal and vertical padding. The syntax is `"<horizontal>x<vertical>"`, e.g. `"30x60"`. <br> 3. A string that defines (different) padding values in percentage for horizontal and vertical padding. The syntax is `"<horizontal>%x<vertical>%"`, e.g. `"5%x10%"`. <br> **Note:** The percentage is calculated from the smallest image dimension (height or width). <p> A combination of option 2 and 3 is possible, e.g. `"5%x40"`. | `50` |
|
137
137
|
| `interline_spacing` | Specifies whether _frameit_ should add or subtract this many pixels between the individual lines of text. This only applies to a multi-line `title` and/or `keyword` to expand or squash together the individual lines of text. | `0` |
|
138
138
|
| `font_scale_factor` | Specifies whether _frameit_ should increase or decrease the font size of the text. Is ignored for `keyword` or `title`, if `font_size` is specified. | `0.1` |
|
139
139
|
| `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK`, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
|
@@ -161,7 +161,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
|
|
161
161
|
|
162
162
|
| Key | Description | Default value |
|
163
163
|
|-----|-------------|---------------|
|
164
|
-
| `color` | The font color for the text. Specify a
|
164
|
+
| `color` | The font color for the text. Specify a HEX/HTML color code. | `#000000` (black) |
|
165
165
|
| `font` | The font family for the text. Specify the (relative) path to the font file (e.g. an OpenType Font). | The default `imagemagick` font, which is system dependent. |
|
166
166
|
| `font_size` | The font size for the text specified in points. If not specified or `0`, font will be scaled automatically to fit the available space. _frameit_ still shrinks the text, if it would not fit. | NA |
|
167
167
|
| `font_weight` | The [font weight for the text](https://imagemagick.org/script/command-line-options.php#weight). Specify an integer value (e.g. 900). | NA |
|
@@ -81,7 +81,7 @@ _scan_ uses the latest APIs and tools to make running tests plain simple and off
|
|
81
81
|
👱 | Automatically switches to the [travis formatter](https://github.com/kattrali/xcpretty-travis-formatter) when running on Travis
|
82
82
|
📖 | Helps you resolve common test errors like simulator not responding
|
83
83
|
|
84
|
-
_scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with `xcodebuild`. To generate the nice output, _scan_ uses [xcpretty](https://github.com/supermarin/xcpretty). You can
|
84
|
+
_scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with `xcodebuild`. To generate the nice output, _scan_ uses [xcpretty](https://github.com/supermarin/xcpretty). You can always access the raw output in `~/Library/Logs/scan`.
|
85
85
|
|
86
86
|
![img/actions/scanScreenshot.png](/img/actions/scanScreenshot.png)
|
87
87
|
![img/actions/slack.png](/img/actions/slack.png)
|
@@ -100,7 +100,7 @@ That's all you need to run your tests. If you want more control, here are some a
|
|
100
100
|
fastlane scan --workspace "Example.xcworkspace" --scheme "AppName" --device "iPhone 6" --clean
|
101
101
|
```
|
102
102
|
|
103
|
-
If you need to use a different
|
103
|
+
If you need to use a different Xcode install, use `xcode-select` or define `DEVELOPER_DIR`:
|
104
104
|
|
105
105
|
```no-highlight
|
106
106
|
DEVELOPER_DIR="/Applications/Xcode6.2.app" scan
|
@@ -130,9 +130,9 @@ match
|
|
130
130
|
|
131
131
|
You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
|
132
132
|
|
133
|
-
##### Git Storage on Azure
|
133
|
+
##### Git Storage on Azure DevOps
|
134
134
|
|
135
|
-
If you're running a pipeline on Azure
|
135
|
+
If you're running a pipeline on Azure DevOps and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
|
136
136
|
|
137
137
|
Using parameter:
|
138
138
|
|
@@ -533,7 +533,7 @@ Storing your private keys in a Git repo may sound off-putting at first. We did a
|
|
533
533
|
|
534
534
|
### Google Cloud Storage
|
535
535
|
|
536
|
-
All your keys and provisioning profiles are encrypted using Google managed keys.
|
536
|
+
All your keys and provisioning profiles are encrypted using Google managed keys.
|
537
537
|
|
538
538
|
### What could happen if someone stole a private key?
|
539
539
|
|
@@ -49,7 +49,7 @@ The previous p12 configuration is still currently supported.
|
|
49
49
|
|
50
50
|
## Quick Start
|
51
51
|
|
52
|
-
> Before using _supply_ to connect to Google Play Store, you'll need to set up your app manually first by uploading at least one build to Google Play Store. See [
|
52
|
+
> Before using _supply_ to connect to Google Play Store, you'll need to set up your app manually first by uploading at least one build to Google Play Store. See [fastlane/fastlane#14686](https://github.com/fastlane/fastlane/issues/14686) for more info.
|
53
53
|
|
54
54
|
- `cd [your_project_folder]`
|
55
55
|
- `fastlane supply init`
|
@@ -198,6 +198,6 @@ For more information, see the `fastlane action google_play_track_version_codes`
|
|
198
198
|
- `:check_superseded_tracks`
|
199
199
|
- Google Play will automatically remove releases that are superseded now
|
200
200
|
- `:deactivate_on_promote`
|
201
|
-
- Google Play will automatically
|
201
|
+
- Google Play will automatically deactivate a release from its previous track on promote
|
202
202
|
|
203
203
|
:
|
@@ -244,7 +244,7 @@ If you are on multiple App Store Connect teams, iTunes Transporter may need a pr
|
|
244
244
|
|
245
245
|
## Use an Application Specific Password to upload
|
246
246
|
|
247
|
-
_pilot_/`upload_to_testflight` can use an [Application Specific Password via the `FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD`
|
247
|
+
_pilot_/`upload_to_testflight` can use an [Application Specific Password via the `FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD` environment variable](https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords) to upload a binary if both the `skip_waiting_for_build_processing` and `apple_id` options are set. (If any of those are not set, it will use the normal Apple login process that might require 2FA authentication.)
|
248
248
|
|
249
249
|
## Role for App Store Connect User
|
250
250
|
_pilot_/`upload_to_testflight` updates build information and testers after the build has finished processing. App Store Connect requires the "App Manager" or "Admin" role for your Apple account to update this information. The "Developer" role will allow builds to be uploaded but _will not_ allow updating of build information and testers.
|
@@ -7,7 +7,13 @@ module Fastlane
|
|
7
7
|
# Raises an exception and stop the lane execution if the repo is not in a clean state
|
8
8
|
class EnsureGitStatusCleanAction < Action
|
9
9
|
def self.run(params)
|
10
|
-
|
10
|
+
if params[:ignored]
|
11
|
+
ignored_file = params[:ignored]
|
12
|
+
repo_status = Actions.sh("git status --porcelain --ignored #{ignored_file}")
|
13
|
+
else
|
14
|
+
repo_status = Actions.sh("git status --porcelain")
|
15
|
+
end
|
16
|
+
|
11
17
|
repo_clean = repo_status.empty?
|
12
18
|
|
13
19
|
if repo_clean
|
@@ -65,7 +71,12 @@ module Fastlane
|
|
65
71
|
description: "The flag whether to show the git diff if the repo is dirty",
|
66
72
|
optional: true,
|
67
73
|
default_value: false,
|
68
|
-
is_string: false)
|
74
|
+
is_string: false),
|
75
|
+
FastlaneCore::ConfigItem.new(key: :ignored,
|
76
|
+
env_name: "FL_ENSURE_GIT_STATUS_CLEAN_IGNORED_FILE",
|
77
|
+
description: "The flag whether to ignore file the git status if the repo is dirty",
|
78
|
+
optional: true,
|
79
|
+
is_string: true)
|
69
80
|
]
|
70
81
|
end
|
71
82
|
|
@@ -3006,16 +3006,19 @@ public func ensureGitBranch(branch: String = "master") {
|
|
3006
3006
|
- parameters:
|
3007
3007
|
- showUncommittedChanges: The flag whether to show uncommitted changes if the repo is dirty
|
3008
3008
|
- showDiff: The flag whether to show the git diff if the repo is dirty
|
3009
|
+
- ignored: The flag whether to ignore file the git status if the repo is dirty
|
3009
3010
|
|
3010
3011
|
A sanity check to make sure you are working in a repo that is clean.
|
3011
3012
|
Especially useful to put at the beginning of your Fastfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work.
|
3012
3013
|
Also needed as a prerequisite for some other actions like `reset_git_repo`.
|
3013
3014
|
*/
|
3014
3015
|
public func ensureGitStatusClean(showUncommittedChanges: Bool = false,
|
3015
|
-
showDiff: Bool = false
|
3016
|
+
showDiff: Bool = false,
|
3017
|
+
ignored: String? = nil)
|
3016
3018
|
{
|
3017
3019
|
let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges),
|
3018
|
-
RubyCommand.Argument(name: "show_diff", value: showDiff)
|
3020
|
+
RubyCommand.Argument(name: "show_diff", value: showDiff),
|
3021
|
+
RubyCommand.Argument(name: "ignored", value: ignored)])
|
3019
3022
|
_ = runner.executeCommand(command)
|
3020
3023
|
}
|
3021
3024
|
|
@@ -4718,7 +4721,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4718
4721
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
4719
4722
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
4720
4723
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
4721
|
-
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
4724
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
|
4722
4725
|
- gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
|
4723
4726
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
4724
4727
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
@@ -7609,7 +7612,7 @@ public func swiftlint(mode: Any = "lint",
|
|
7609
7612
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
7610
7613
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
7611
7614
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
7612
|
-
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
7615
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
|
7613
7616
|
- gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
|
7614
7617
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
7615
7618
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
@@ -9306,4 +9309,4 @@ public let snapshotfile = Snapshotfile()
|
|
9306
9309
|
|
9307
9310
|
// Please don't remove the lines below
|
9308
9311
|
// They are used to detect outdated files
|
9309
|
-
// FastlaneRunnerAPIVersion [0.9.
|
9312
|
+
// FastlaneRunnerAPIVersion [0.9.97]
|
@@ -21,11 +21,11 @@ public protocol LaneFileProtocol: class {
|
|
21
21
|
}
|
22
22
|
|
23
23
|
public extension LaneFileProtocol {
|
24
|
-
var fastlaneVersion: String { return "" } //
|
25
|
-
func beforeAll() {} //
|
26
|
-
func afterAll(currentLane _: String) {} //
|
27
|
-
func onError(currentLane _: String, errorInfo _: String) {} //
|
28
|
-
func recordLaneDescriptions() {} //
|
24
|
+
var fastlaneVersion: String { return "" } // Defaults to "" because that means any is fine
|
25
|
+
func beforeAll() {} // No-op by default
|
26
|
+
func afterAll(currentLane _: String) {} // No-op by default
|
27
|
+
func onError(currentLane _: String, errorInfo _: String) {} // No-op by default
|
28
|
+
func recordLaneDescriptions() {} // No-op by default
|
29
29
|
}
|
30
30
|
|
31
31
|
@objcMembers
|
@@ -33,7 +33,7 @@ open class LaneFile: NSObject, LaneFileProtocol {
|
|
33
33
|
private(set) static var fastfileInstance: LaneFile?
|
34
34
|
|
35
35
|
// Called before any lane is executed.
|
36
|
-
private func
|
36
|
+
private func setUpAllTheThings() {
|
37
37
|
LaneFile.fastfileInstance!.beforeAll()
|
38
38
|
}
|
39
39
|
|
@@ -51,8 +51,8 @@ open class LaneFile: NSObject, LaneFileProtocol {
|
|
51
51
|
#if !SWIFT_PACKAGE
|
52
52
|
let methodList = class_copyMethodList(self, &methodCount)
|
53
53
|
#else
|
54
|
-
// In SPM we're calling this functions out of the scope of the normal binary that it
|
55
|
-
//
|
54
|
+
// In SPM we're calling this functions out of the scope of the normal binary that it's
|
55
|
+
// being built, so *self* in this scope would be the SPM executable instead of the Fastfile
|
56
56
|
// that we'd normally expect.
|
57
57
|
let methodList = class_copyMethodList(type(of: fastfileInstance!), &methodCount)
|
58
58
|
#endif
|
@@ -98,27 +98,23 @@ open class LaneFile: NSObject, LaneFileProtocol {
|
|
98
98
|
public static func runLane(from fastfile: LaneFile?, named: String, parameters: [String: String]) -> Bool {
|
99
99
|
log(message: "Running lane: \(named)")
|
100
100
|
#if !SWIFT_PACKAGE
|
101
|
-
//
|
102
|
-
// in the executable's scope that loads the library, so in that case `className()` won't be the
|
103
|
-
// expected Fastfile and so, we do not dynamically load it as we do without SPM.
|
101
|
+
// When not in SPM environment, we load the Fastfile from its `className()`.
|
104
102
|
loadFastfile()
|
105
|
-
#endif
|
106
|
-
|
107
|
-
#if !SWIFT_PACKAGE
|
108
103
|
guard let fastfileInstance: LaneFile = self.fastfileInstance else {
|
109
104
|
let message = "Unable to instantiate class named: \(className())"
|
110
105
|
log(message: message)
|
111
106
|
fatalError(message)
|
112
107
|
}
|
113
108
|
#else
|
114
|
-
//
|
115
|
-
//
|
109
|
+
// When in SPM environment, we can't load the Fastfile from its `className()` because the executable is in
|
110
|
+
// another scope, so `className()` won't be the expected Fastfile. Instead, we load the Fastfile as a Lanefile
|
111
|
+
// in a static way, by parameter.
|
116
112
|
guard let fastfileInstance: LaneFile = fastfile else {
|
117
113
|
log(message: "Found nil instance of fastfile")
|
118
114
|
preconditionFailure()
|
119
115
|
}
|
116
|
+
self.fastfileInstance = fastfileInstance
|
120
117
|
#endif
|
121
|
-
self.fastfileInstance = fastfile!
|
122
118
|
let currentLanes = lanes
|
123
119
|
let lowerCasedLaneRequested = named.lowercased()
|
124
120
|
|
@@ -139,13 +135,13 @@ open class LaneFile: NSObject, LaneFileProtocol {
|
|
139
135
|
return false
|
140
136
|
}
|
141
137
|
|
142
|
-
//
|
143
|
-
fastfileInstance.
|
138
|
+
// Call all methods that need to be called before we start calling lanes.
|
139
|
+
fastfileInstance.setUpAllTheThings()
|
144
140
|
|
145
|
-
// We need to catch all possible errors here and display a nice message
|
141
|
+
// We need to catch all possible errors here and display a nice message.
|
146
142
|
_ = fastfileInstance.perform(NSSelectorFromString(laneMethod), with: parameters)
|
147
143
|
|
148
|
-
// only
|
144
|
+
// Call only on success.
|
149
145
|
fastfileInstance.afterAll(currentLane: named)
|
150
146
|
log(message: "Done running lane: \(named) 🚀")
|
151
147
|
return true
|
@@ -53,7 +53,7 @@ public protocol MatchfileProtocol: class {
|
|
53
53
|
/// Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
54
54
|
var gitBasicAuthorization: String? { get }
|
55
55
|
|
56
|
-
/// Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
56
|
+
/// Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
|
57
57
|
var gitBearerAuthorization: String? { get }
|
58
58
|
|
59
59
|
/// Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
|
@@ -168,4 +168,4 @@ public extension MatchfileProtocol {
|
|
168
168
|
|
169
169
|
// Please don't remove the lines below
|
170
170
|
// They are used to detect outdated files
|
171
|
-
// FastlaneRunnerAPIVersion [0.9.
|
171
|
+
// FastlaneRunnerAPIVersion [0.9.41]
|
data/match/lib/match/options.rb
CHANGED
@@ -147,7 +147,7 @@ module Match
|
|
147
147
|
FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
|
148
148
|
env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
|
149
149
|
sensitive: true,
|
150
|
-
description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
150
|
+
description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64",
|
151
151
|
conflicting_options: [:git_basic_authorization, :git_private_key],
|
152
152
|
optional: true,
|
153
153
|
default_value: nil),
|
data/spaceship/README.md
CHANGED
@@ -167,7 +167,7 @@ _spaceship_ uses all those API points to offer this seamless experience.
|
|
167
167
|
_spaceship_ does a lot of magic to get everything working so neatly:
|
168
168
|
|
169
169
|
- **Sensible Defaults**: You only have to provide the mandatory information (e.g. new provisioning profiles contain all devices by default)
|
170
|
-
- **Local Validation**: When pushing changes back to the Apple
|
170
|
+
- **Local Validation**: When pushing changes back to the Apple Developer Portal _spaceship_ will make sure only valid data is sent to Apple (e.g. automatic repairing of provisioning profiles)
|
171
171
|
- **Various request/response types**: When working with the different API endpoints, _spaceship_ has to deal with `JSON`, `XML`, `txt`, `plist` and sometimes even `HTML` responses and requests.
|
172
172
|
- **Automatic Pagination**: Even if you have thousands of apps, profiles or certificates, _spaceship_ **can** handle your scale. It was heavily tested by first using _spaceship_ to create hundreds of profiles and then accessing them using _spaceship_.
|
173
173
|
- **Session, Cookie and CSRF token**: All the security aspects are handled by _spaceship_.
|
@@ -185,9 +185,12 @@ module Spaceship
|
|
185
185
|
type: "apps",
|
186
186
|
id: app_id
|
187
187
|
}
|
188
|
-
data[:attributes] = attributes unless attributes.empty?
|
189
188
|
data[:relationships] = relationships unless relationships.empty?
|
190
189
|
|
190
|
+
if !attributes.nil? && !attributes.empty?
|
191
|
+
data[:attributes] = attributes
|
192
|
+
end
|
193
|
+
|
191
194
|
# Body
|
192
195
|
body = {
|
193
196
|
data: data
|
@@ -5,10 +5,16 @@ require 'net/http'
|
|
5
5
|
# Certain apple endpoints return 415 responses if a Content-Type is supplied.
|
6
6
|
# Net::HTTP will default a content-type if none is provided by faraday
|
7
7
|
# This monkey-patch allows us to leave out the content-type if we do not specify one.
|
8
|
-
module
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
module NetHTTPGenericRequestMonkeypatch
|
9
|
+
def supply_default_content_type
|
10
|
+
# Return no content type if we communicating with an apple.com domain
|
11
|
+
return if !self['host'].nil? && self['host'].end_with?('.apple.com')
|
12
|
+
|
13
|
+
# Otherwise use the default implementation
|
14
|
+
super
|
13
15
|
end
|
14
16
|
end
|
17
|
+
|
18
|
+
# We prepend the monkeypatch so the patch has access to the original implementation
|
19
|
+
# using `super`.
|
20
|
+
Net::HTTPGenericRequest.prepend(NetHTTPGenericRequestMonkeypatch)
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.161.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Helmut Januschka
|
9
|
-
- Felix Krause
|
7
|
+
- Jan Piotrowski
|
10
8
|
- Kohki Miki
|
11
|
-
- Joshua Liebowitz
|
12
9
|
- Manu Wallner
|
13
|
-
-
|
10
|
+
- Josh Holtz
|
14
11
|
- Jérôme Lacoste
|
15
12
|
- Jimmy Dee
|
16
|
-
- Luka Mirosevic
|
17
|
-
- Matthew Ellis
|
18
13
|
- Maksym Grebenets
|
19
|
-
-
|
20
|
-
-
|
21
|
-
-
|
22
|
-
- Daniel Jankowski
|
14
|
+
- Iulian Onofrei
|
15
|
+
- Helmut Januschka
|
16
|
+
- Luka Mirosevic
|
23
17
|
- Olivier Halligon
|
18
|
+
- Jorge Revuelta H
|
19
|
+
- Max Ott
|
20
|
+
- Felix Krause
|
24
21
|
- Danielle Tomlinson
|
22
|
+
- Daniel Jankowski
|
25
23
|
- Fumiya Nakamura
|
24
|
+
- Joshua Liebowitz
|
26
25
|
- Aaron Brager
|
26
|
+
- Matthew Ellis
|
27
27
|
- Andrew McBurney
|
28
|
-
-
|
28
|
+
- Stefan Natchev
|
29
29
|
autorequire:
|
30
30
|
bindir: bin
|
31
31
|
cert_chain: []
|
32
|
-
date: 2020-09-
|
32
|
+
date: 2020-09-28 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: slack-notifier
|