fastlane 2.114.0.beta.20190116200018 → 2.114.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 +62 -62
- data/deliver/lib/deliver/app_screenshot.rb +16 -4
- data/deliver/lib/deliver/upload_screenshots.rb +16 -0
- data/fastlane/lib/fastlane/actions/spm.rb +14 -3
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +21 -5
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +3 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/frameit/lib/frameit/device_types.rb +5 -0
- data/frameit/lib/frameit/options.rb +5 -0
- data/frameit/lib/frameit/screenshot.rb +8 -2
- data/produce/lib/produce/commands_generator.rb +2 -0
- data/produce/lib/produce/service.rb +10 -1
- data/scan/lib/scan/slack_poster.rb +27 -36
- data/spaceship/lib/spaceship/client.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/errors.rb +3 -0
- data/spaceship/lib/spaceship/portal/app_service.rb +1 -1
- data/spaceship/lib/spaceship/portal/portal_client.rb +17 -2
- data/spaceship/lib/spaceship/test_flight/client.rb +3 -1
- metadata +41 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f02e6ce6045dbef96eda80e54104adc2e1c50b03
|
4
|
+
data.tar.gz: 8f8fc958abb338341a7e9cbb8092da71cda11535
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc3e67789da1b3bc756232bc3930ca9c499a2c34ab2810cd00e6405974dbbacb4e681eb8948c61076cc88f24581c069a4f16966d793f16a14d532c839babefbf
|
7
|
+
data.tar.gz: 06e6af45c8e8b91a4ad64250c23b9ae1b179926e79b0218adceb3099ec0f006966da6d5155cbe7852f33989b37c77e03e6ec30bc9051c364f39a208e22c074eb
|
data/README.md
CHANGED
@@ -39,23 +39,55 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
39
39
|
</a>
|
40
40
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
41
41
|
</td>
|
42
|
-
<td id='stefan-natchev'>
|
43
|
-
<a href='https://github.com/snatchev'>
|
44
|
-
<img src='https://github.com/snatchev.png?size=140'>
|
45
|
-
</a>
|
46
|
-
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
47
|
-
</td>
|
48
42
|
<td id='luka-mirosevic'>
|
49
43
|
<a href='https://github.com/lmirosevic'>
|
50
44
|
<img src='https://github.com/lmirosevic.png?size=140'>
|
51
45
|
</a>
|
52
46
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
53
47
|
</td>
|
54
|
-
<td id='
|
55
|
-
<a href='https://github.com/
|
56
|
-
<img src='https://github.com/
|
48
|
+
<td id='jimmy-dee'>
|
49
|
+
<a href='https://github.com/jdee'>
|
50
|
+
<img src='https://github.com/jdee.png?size=140'>
|
57
51
|
</a>
|
58
|
-
<h4 align='center'
|
52
|
+
<h4 align='center'>Jimmy Dee</h4>
|
53
|
+
</td>
|
54
|
+
<td id='danielle-tomlinson'>
|
55
|
+
<a href='https://github.com/DanToml'>
|
56
|
+
<img src='https://github.com/DanToml.png?size=140'>
|
57
|
+
</a>
|
58
|
+
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
59
|
+
</td>
|
60
|
+
<td id='josh-holtz'>
|
61
|
+
<a href='https://github.com/joshdholtz'>
|
62
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
63
|
+
</a>
|
64
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
65
|
+
</td>
|
66
|
+
</tr>
|
67
|
+
<tr>
|
68
|
+
<td id='helmut-januschka'>
|
69
|
+
<a href='https://github.com/hjanuschka'>
|
70
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
71
|
+
</a>
|
72
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
73
|
+
</td>
|
74
|
+
<td id='maksym-grebenets'>
|
75
|
+
<a href='https://github.com/mgrebenets'>
|
76
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
77
|
+
</a>
|
78
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
79
|
+
</td>
|
80
|
+
<td id='manu-wallner'>
|
81
|
+
<a href='https://github.com/milch'>
|
82
|
+
<img src='https://github.com/milch.png?size=140'>
|
83
|
+
</a>
|
84
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
85
|
+
</td>
|
86
|
+
<td id='jan-piotrowski'>
|
87
|
+
<a href='https://github.com/janpio'>
|
88
|
+
<img src='https://github.com/janpio.png?size=140'>
|
89
|
+
</a>
|
90
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
59
91
|
</td>
|
60
92
|
<td id='iulian-onofrei'>
|
61
93
|
<a href='https://github.com/revolter'>
|
@@ -65,11 +97,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
65
97
|
</td>
|
66
98
|
</tr>
|
67
99
|
<tr>
|
68
|
-
<td id='
|
69
|
-
<a href='https://github.com/
|
70
|
-
<img src='https://github.com/
|
100
|
+
<td id='aaron-brager'>
|
101
|
+
<a href='https://github.com/getaaron'>
|
102
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
71
103
|
</a>
|
72
|
-
<h4 align='center'><a href='https://twitter.com/
|
104
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
73
105
|
</td>
|
74
106
|
<td id='fumiya-nakamura'>
|
75
107
|
<a href='https://github.com/nafu'>
|
@@ -77,11 +109,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
77
109
|
</a>
|
78
110
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
79
111
|
</td>
|
80
|
-
<td id='
|
81
|
-
<a href='https://github.com/
|
82
|
-
<img src='https://github.com/
|
112
|
+
<td id='stefan-natchev'>
|
113
|
+
<a href='https://github.com/snatchev'>
|
114
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
83
115
|
</a>
|
84
|
-
<h4 align='center'><a href='https://twitter.com/
|
116
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
85
117
|
</td>
|
86
118
|
<td id='jérôme-lacoste'>
|
87
119
|
<a href='https://github.com/lacostej'>
|
@@ -89,31 +121,19 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
89
121
|
</a>
|
90
122
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
91
123
|
</td>
|
92
|
-
<td id='
|
93
|
-
<a href='https://github.com/
|
94
|
-
<img src='https://github.com/
|
124
|
+
<td id='joshua-liebowitz'>
|
125
|
+
<a href='https://github.com/taquitos'>
|
126
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
95
127
|
</a>
|
96
|
-
<h4 align='center'>
|
128
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
97
129
|
</td>
|
98
130
|
</tr>
|
99
131
|
<tr>
|
100
|
-
<td id='
|
101
|
-
<a href='https://github.com/
|
102
|
-
<img src='https://github.com/
|
103
|
-
</a>
|
104
|
-
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
105
|
-
</td>
|
106
|
-
<td id='maksym-grebenets'>
|
107
|
-
<a href='https://github.com/mgrebenets'>
|
108
|
-
<img src='https://github.com/mgrebenets.png?size=140'>
|
109
|
-
</a>
|
110
|
-
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
111
|
-
</td>
|
112
|
-
<td id='aaron-brager'>
|
113
|
-
<a href='https://github.com/getaaron'>
|
114
|
-
<img src='https://github.com/getaaron.png?size=140'>
|
132
|
+
<td id='olivier-halligon'>
|
133
|
+
<a href='https://github.com/AliSoftware'>
|
134
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
115
135
|
</a>
|
116
|
-
<h4 align='center'><a href='https://twitter.com/
|
136
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
117
137
|
</td>
|
118
138
|
<td id='felix-krause'>
|
119
139
|
<a href='https://github.com/KrauseFx'>
|
@@ -121,37 +141,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
121
141
|
</a>
|
122
142
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
123
143
|
</td>
|
124
|
-
<td id='olivier-halligon'>
|
125
|
-
<a href='https://github.com/AliSoftware'>
|
126
|
-
<img src='https://github.com/AliSoftware.png?size=140'>
|
127
|
-
</a>
|
128
|
-
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
129
|
-
</td>
|
130
|
-
</tr>
|
131
|
-
<tr>
|
132
144
|
<td id='kohki-miki'>
|
133
145
|
<a href='https://github.com/giginet'>
|
134
146
|
<img src='https://github.com/giginet.png?size=140'>
|
135
147
|
</a>
|
136
148
|
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
137
149
|
</td>
|
138
|
-
<td id='
|
139
|
-
<a href='https://github.com/
|
140
|
-
<img src='https://github.com/
|
141
|
-
</a>
|
142
|
-
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
143
|
-
</td>
|
144
|
-
<td id='jan-piotrowski'>
|
145
|
-
<a href='https://github.com/janpio'>
|
146
|
-
<img src='https://github.com/janpio.png?size=140'>
|
147
|
-
</a>
|
148
|
-
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
149
|
-
</td>
|
150
|
-
<td id='helmut-januschka'>
|
151
|
-
<a href='https://github.com/hjanuschka'>
|
152
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
150
|
+
<td id='jorge-revuelta-h'>
|
151
|
+
<a href='https://github.com/minuscorp'>
|
152
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
153
153
|
</a>
|
154
|
-
<h4 align='center'><a href='https://twitter.com/
|
154
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
155
155
|
</td>
|
156
156
|
<td id='andrew-mcburney'>
|
157
157
|
<a href='https://github.com/armcburney'>
|
@@ -15,8 +15,10 @@ module Deliver
|
|
15
15
|
IOS_47 = "iOS-4.7-in"
|
16
16
|
# iPhone 6 Plus
|
17
17
|
IOS_55 = "iOS-5.5-in"
|
18
|
-
# iPhone
|
18
|
+
# iPhone XS
|
19
19
|
IOS_58 = "iOS-5.8-in"
|
20
|
+
# iPhone XR
|
21
|
+
IOS_61 = "iOS-6.1-in"
|
20
22
|
# iPhone XS Max
|
21
23
|
IOS_65 = "iOS-6.5-in"
|
22
24
|
# iPad
|
@@ -33,8 +35,10 @@ module Deliver
|
|
33
35
|
IOS_47_MESSAGES = "iOS-4.7-in-messages"
|
34
36
|
# iPhone 6 Plus iMessage
|
35
37
|
IOS_55_MESSAGES = "iOS-5.5-in-messages"
|
36
|
-
# iPhone
|
38
|
+
# iPhone XS iMessage
|
37
39
|
IOS_58_MESSAGES = "iOS-5.8-in-messages"
|
40
|
+
# iPhone XR iMessage
|
41
|
+
IOS_61_MESSAGES = "iOS-6.1-in-messages"
|
38
42
|
# iPhone XS Max iMessage
|
39
43
|
IOS_65_MESSAGES = "iOS-6.5-in-messages"
|
40
44
|
# iPad iMessage
|
@@ -118,7 +122,8 @@ module Deliver
|
|
118
122
|
ScreenSize::IOS_40 => "iPhone 5",
|
119
123
|
ScreenSize::IOS_47 => "iPhone 6",
|
120
124
|
ScreenSize::IOS_55 => "iPhone 6 Plus",
|
121
|
-
ScreenSize::IOS_58 => "iPhone
|
125
|
+
ScreenSize::IOS_58 => "iPhone XS",
|
126
|
+
ScreenSize::IOS_61 => "iPhone XR",
|
122
127
|
ScreenSize::IOS_65 => "iPhone XS Max",
|
123
128
|
ScreenSize::IOS_IPAD => "iPad",
|
124
129
|
ScreenSize::IOS_IPAD_10_5 => "iPad 10.5",
|
@@ -127,7 +132,8 @@ module Deliver
|
|
127
132
|
ScreenSize::IOS_40_MESSAGES => "iPhone 5 (iMessage)",
|
128
133
|
ScreenSize::IOS_47_MESSAGES => "iPhone 6 (iMessage)",
|
129
134
|
ScreenSize::IOS_55_MESSAGES => "iPhone 6 Plus (iMessage)",
|
130
|
-
ScreenSize::IOS_58_MESSAGES => "iPhone
|
135
|
+
ScreenSize::IOS_58_MESSAGES => "iPhone XS (iMessage)",
|
136
|
+
ScreenSize::IOS_61_MESSAGES => "iPhone XR (iMessage)",
|
131
137
|
ScreenSize::IOS_65_MESSAGES => "iPhone XS Max (iMessage)",
|
132
138
|
ScreenSize::IOS_IPAD_MESSAGES => "iPad (iMessage)",
|
133
139
|
ScreenSize::IOS_IPAD_PRO_MESSAGES => "iPad Pro (iMessage)",
|
@@ -167,6 +173,9 @@ module Deliver
|
|
167
173
|
ScreenSize::IOS_65_MESSAGES => [
|
168
174
|
[1242, 2688]
|
169
175
|
],
|
176
|
+
ScreenSize::IOS_61_MESSAGES => [
|
177
|
+
[828, 1792]
|
178
|
+
],
|
170
179
|
ScreenSize::IOS_58_MESSAGES => [
|
171
180
|
[1125, 2436]
|
172
181
|
],
|
@@ -212,6 +221,9 @@ module Deliver
|
|
212
221
|
ScreenSize::IOS_65 => [
|
213
222
|
[1242, 2688]
|
214
223
|
],
|
224
|
+
ScreenSize::IOS_61 => [
|
225
|
+
[828, 1792]
|
226
|
+
],
|
215
227
|
ScreenSize::IOS_58 => [
|
216
228
|
[1125, 2436]
|
217
229
|
],
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spaceship/tunes/tunes'
|
2
|
+
require 'spaceship/tunes/device_type'
|
2
3
|
|
3
4
|
require_relative 'app_screenshot'
|
4
5
|
require_relative 'module'
|
@@ -128,6 +129,21 @@ module Deliver
|
|
128
129
|
end
|
129
130
|
end
|
130
131
|
|
132
|
+
# Checking if the device type exists in spaceship
|
133
|
+
# Ex: iPhone 6.1 inch isn't supported in App Store Connect but need
|
134
|
+
# to have it in there for frameit support
|
135
|
+
unaccepted_device_shown = false
|
136
|
+
screenshots.select! do |screenshot|
|
137
|
+
exists = Spaceship::Tunes::DeviceType.exists?(screenshot.device_type)
|
138
|
+
unless exists
|
139
|
+
UI.important("Unaccepted device screenshots are detected! 🚫 Screenshot file will be skipped. 🏃") unless unaccepted_device_shown
|
140
|
+
unaccepted_device_shown = true
|
141
|
+
|
142
|
+
UI.important("🏃 Skipping screenshot file: #{screenshot.path} - Not an accepted App Store Connect device...")
|
143
|
+
end
|
144
|
+
exists
|
145
|
+
end
|
146
|
+
|
131
147
|
return screenshots
|
132
148
|
end
|
133
149
|
end
|
@@ -9,11 +9,14 @@ module Fastlane
|
|
9
9
|
cmd << "--package-path #{params[:package_path]}" if params[:package_path]
|
10
10
|
cmd << "--configuration #{params[:configuration]}" if params[:configuration]
|
11
11
|
cmd << "--verbose" if params[:verbose]
|
12
|
+
cmd << params[:command] if package_commands.include?(params[:command])
|
13
|
+
if params[:xcconfig]
|
14
|
+
cmd << "--xcconfig-overrides #{params[:xcconfig]}"
|
15
|
+
end
|
12
16
|
if params[:xcpretty_output]
|
13
17
|
cmd += ["2>&1", "|", "xcpretty", "--#{params[:xcpretty_output]}"]
|
14
18
|
cmd = %w(set -o pipefail &&) + cmd
|
15
19
|
end
|
16
|
-
cmd << params[:command] if package_commands.include?(params[:command])
|
17
20
|
|
18
21
|
FastlaneCore::CommandExecutor.execute(command: cmd.join(" "),
|
19
22
|
print_all: true,
|
@@ -45,6 +48,10 @@ module Fastlane
|
|
45
48
|
env_name: "FL_SPM_PACKAGE_PATH",
|
46
49
|
description: "Change working directory before any other operation",
|
47
50
|
optional: true),
|
51
|
+
FastlaneCore::ConfigItem.new(key: :xcconfig,
|
52
|
+
env_name: "FL_SPM_XCCONFIG",
|
53
|
+
description: "Use xcconfig file to override swift package generate-xcodeproj defaults",
|
54
|
+
optional: true),
|
48
55
|
FastlaneCore::ConfigItem.new(key: :configuration,
|
49
56
|
short_option: "-c",
|
50
57
|
env_name: "FL_SPM_CONFIGURATION",
|
@@ -70,7 +77,7 @@ module Fastlane
|
|
70
77
|
end
|
71
78
|
|
72
79
|
def self.authors
|
73
|
-
["
|
80
|
+
["fjcaetano", "nxtstep"]
|
74
81
|
end
|
75
82
|
|
76
83
|
def self.is_supported?(platform)
|
@@ -84,6 +91,10 @@ module Fastlane
|
|
84
91
|
command: "build",
|
85
92
|
build_path: "./build",
|
86
93
|
configuration: "release"
|
94
|
+
)',
|
95
|
+
'spm(
|
96
|
+
command: "generate-xcodeproj",
|
97
|
+
xcconfig: "Package.xcconfig"
|
87
98
|
)'
|
88
99
|
]
|
89
100
|
end
|
@@ -97,7 +108,7 @@ module Fastlane
|
|
97
108
|
end
|
98
109
|
|
99
110
|
def self.package_commands
|
100
|
-
%w(clean reset update)
|
111
|
+
%w(clean reset update resolve generate-xcodeproj init)
|
101
112
|
end
|
102
113
|
|
103
114
|
def self.valid_configurations
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.114.0
|
2
|
+
VERSION = '2.114.0'.freeze
|
3
3
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
4
4
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
5
5
|
RUBOCOP_REQUIREMENT = '0.49.1'.freeze
|
@@ -1360,6 +1360,7 @@ func downloadDsyms(username: String,
|
|
1360
1360
|
platform: String = "ios",
|
1361
1361
|
version: String? = nil,
|
1362
1362
|
buildNumber: String? = nil,
|
1363
|
+
minVersion: String? = nil,
|
1363
1364
|
outputDirectory: String? = nil) {
|
1364
1365
|
let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
|
1365
1366
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
@@ -1368,6 +1369,7 @@ func downloadDsyms(username: String,
|
|
1368
1369
|
RubyCommand.Argument(name: "platform", value: platform),
|
1369
1370
|
RubyCommand.Argument(name: "version", value: version),
|
1370
1371
|
RubyCommand.Argument(name: "build_number", value: buildNumber),
|
1372
|
+
RubyCommand.Argument(name: "min_version", value: minVersion),
|
1371
1373
|
RubyCommand.Argument(name: "output_directory", value: outputDirectory)])
|
1372
1374
|
_ = runner.executeCommand(command)
|
1373
1375
|
}
|
@@ -1468,6 +1470,7 @@ func frameScreenshots(white: Bool? = nil,
|
|
1468
1470
|
forceDeviceType: String? = nil,
|
1469
1471
|
useLegacyIphone5s: Bool = false,
|
1470
1472
|
useLegacyIphone6s: Bool = false,
|
1473
|
+
useLegacyIphonex: Bool = false,
|
1471
1474
|
forceOrientationBlock: String? = nil,
|
1472
1475
|
path: String = "./") {
|
1473
1476
|
let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
|
@@ -1477,6 +1480,7 @@ func frameScreenshots(white: Bool? = nil,
|
|
1477
1480
|
RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
|
1478
1481
|
RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
|
1479
1482
|
RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
|
1483
|
+
RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
|
1480
1484
|
RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
|
1481
1485
|
RubyCommand.Argument(name: "path", value: path)])
|
1482
1486
|
_ = runner.executeCommand(command)
|
@@ -1488,6 +1492,7 @@ func frameit(white: Bool? = nil,
|
|
1488
1492
|
forceDeviceType: String? = nil,
|
1489
1493
|
useLegacyIphone5s: Bool = false,
|
1490
1494
|
useLegacyIphone6s: Bool = false,
|
1495
|
+
useLegacyIphonex: Bool = false,
|
1491
1496
|
forceOrientationBlock: String? = nil,
|
1492
1497
|
path: String = "./") {
|
1493
1498
|
let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
|
@@ -1497,6 +1502,7 @@ func frameit(white: Bool? = nil,
|
|
1497
1502
|
RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
|
1498
1503
|
RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
|
1499
1504
|
RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
|
1505
|
+
RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
|
1500
1506
|
RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock),
|
1501
1507
|
RubyCommand.Argument(name: "path", value: path)])
|
1502
1508
|
_ = runner.executeCommand(command)
|
@@ -2665,6 +2671,7 @@ func runTests(workspace: String? = nil,
|
|
2665
2671
|
device: String? = nil,
|
2666
2672
|
devices: [String]? = nil,
|
2667
2673
|
skipDetectDevices: Bool = false,
|
2674
|
+
resetSimulator: Bool = false,
|
2668
2675
|
reinstallApp: Bool = false,
|
2669
2676
|
appIdentifier: String? = nil,
|
2670
2677
|
onlyTesting: String? = nil,
|
@@ -2712,6 +2719,7 @@ func runTests(workspace: String? = nil,
|
|
2712
2719
|
RubyCommand.Argument(name: "device", value: device),
|
2713
2720
|
RubyCommand.Argument(name: "devices", value: devices),
|
2714
2721
|
RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
|
2722
|
+
RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
|
2715
2723
|
RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
|
2716
2724
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
2717
2725
|
RubyCommand.Argument(name: "only_testing", value: onlyTesting),
|
@@ -2801,6 +2809,7 @@ func scan(workspace: String? = scanfile.workspace,
|
|
2801
2809
|
device: String? = scanfile.device,
|
2802
2810
|
devices: [String]? = scanfile.devices,
|
2803
2811
|
skipDetectDevices: Bool = scanfile.skipDetectDevices,
|
2812
|
+
resetSimulator: Bool = scanfile.resetSimulator,
|
2804
2813
|
reinstallApp: Bool = scanfile.reinstallApp,
|
2805
2814
|
appIdentifier: String? = scanfile.appIdentifier,
|
2806
2815
|
onlyTesting: String? = scanfile.onlyTesting,
|
@@ -2848,6 +2857,7 @@ func scan(workspace: String? = scanfile.workspace,
|
|
2848
2857
|
RubyCommand.Argument(name: "device", value: device),
|
2849
2858
|
RubyCommand.Argument(name: "devices", value: devices),
|
2850
2859
|
RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
|
2860
|
+
RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
|
2851
2861
|
RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
|
2852
2862
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
2853
2863
|
RubyCommand.Argument(name: "only_testing", value: onlyTesting),
|
@@ -3316,12 +3326,14 @@ func splunkmint(dsym: String? = nil,
|
|
3316
3326
|
func spm(command: String = "build",
|
3317
3327
|
buildPath: String? = nil,
|
3318
3328
|
packagePath: String? = nil,
|
3329
|
+
xcconfig: String? = nil,
|
3319
3330
|
configuration: String? = nil,
|
3320
3331
|
xcprettyOutput: String? = nil,
|
3321
3332
|
verbose: Bool = false) {
|
3322
3333
|
let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
|
3323
3334
|
RubyCommand.Argument(name: "build_path", value: buildPath),
|
3324
3335
|
RubyCommand.Argument(name: "package_path", value: packagePath),
|
3336
|
+
RubyCommand.Argument(name: "xcconfig", value: xcconfig),
|
3325
3337
|
RubyCommand.Argument(name: "configuration", value: configuration),
|
3326
3338
|
RubyCommand.Argument(name: "xcpretty_output", value: xcprettyOutput),
|
3327
3339
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
@@ -3365,7 +3377,8 @@ func supply(packageName: String,
|
|
3365
3377
|
rootUrl: String? = nil,
|
3366
3378
|
checkSupersededTracks: Bool = false,
|
3367
3379
|
timeout: Int = 300,
|
3368
|
-
deactivateOnPromote: Bool = true
|
3380
|
+
deactivateOnPromote: Bool = true,
|
3381
|
+
versionCodesToRetain: [String]? = nil) {
|
3369
3382
|
let command = RubyCommand(commandID: "", methodName: "supply", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
|
3370
3383
|
RubyCommand.Argument(name: "track", value: track),
|
3371
3384
|
RubyCommand.Argument(name: "rollout", value: rollout),
|
@@ -3390,7 +3403,8 @@ func supply(packageName: String,
|
|
3390
3403
|
RubyCommand.Argument(name: "root_url", value: rootUrl),
|
3391
3404
|
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
|
3392
3405
|
RubyCommand.Argument(name: "timeout", value: timeout),
|
3393
|
-
RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote)
|
3406
|
+
RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote),
|
3407
|
+
RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain)])
|
3394
3408
|
_ = runner.executeCommand(command)
|
3395
3409
|
}
|
3396
3410
|
func swiftlint(mode: String = "lint",
|
@@ -3865,7 +3879,8 @@ func uploadToPlayStore(packageName: String,
|
|
3865
3879
|
rootUrl: String? = nil,
|
3866
3880
|
checkSupersededTracks: Bool = false,
|
3867
3881
|
timeout: Int = 300,
|
3868
|
-
deactivateOnPromote: Bool = true
|
3882
|
+
deactivateOnPromote: Bool = true,
|
3883
|
+
versionCodesToRetain: [String]? = nil) {
|
3869
3884
|
let command = RubyCommand(commandID: "", methodName: "upload_to_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
|
3870
3885
|
RubyCommand.Argument(name: "track", value: track),
|
3871
3886
|
RubyCommand.Argument(name: "rollout", value: rollout),
|
@@ -3890,7 +3905,8 @@ func uploadToPlayStore(packageName: String,
|
|
3890
3905
|
RubyCommand.Argument(name: "root_url", value: rootUrl),
|
3891
3906
|
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
|
3892
3907
|
RubyCommand.Argument(name: "timeout", value: timeout),
|
3893
|
-
RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote)
|
3908
|
+
RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote),
|
3909
|
+
RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain)])
|
3894
3910
|
_ = runner.executeCommand(command)
|
3895
3911
|
}
|
3896
3912
|
func uploadToTestflight(username: String,
|
@@ -4177,4 +4193,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
|
|
4177
4193
|
let snapshotfile: Snapshotfile = Snapshotfile()
|
4178
4194
|
// Please don't remove the lines below
|
4179
4195
|
// They are used to detect outdated files
|
4180
|
-
// FastlaneRunnerAPIVersion [0.9.
|
4196
|
+
// FastlaneRunnerAPIVersion [0.9.39]
|
Binary file
|
@@ -5,6 +5,7 @@ protocol ScanfileProtocol: class {
|
|
5
5
|
var device: String? { get }
|
6
6
|
var devices: [String]? { get }
|
7
7
|
var skipDetectDevices: Bool { get }
|
8
|
+
var resetSimulator: Bool { get }
|
8
9
|
var reinstallApp: Bool { get }
|
9
10
|
var appIdentifier: String? { get }
|
10
11
|
var onlyTesting: String? { get }
|
@@ -55,6 +56,7 @@ extension ScanfileProtocol {
|
|
55
56
|
var device: String? { return nil }
|
56
57
|
var devices: [String]? { return nil }
|
57
58
|
var skipDetectDevices: Bool { return false }
|
59
|
+
var resetSimulator: Bool { return false }
|
58
60
|
var reinstallApp: Bool { return false }
|
59
61
|
var appIdentifier: String? { return nil }
|
60
62
|
var onlyTesting: String? { return nil }
|
@@ -100,4 +102,4 @@ extension ScanfileProtocol {
|
|
100
102
|
|
101
103
|
// Please don't remove the lines below
|
102
104
|
// They are used to detect outdated files
|
103
|
-
// FastlaneRunnerAPIVersion [0.9.
|
105
|
+
// FastlaneRunnerAPIVersion [0.9.8]
|
@@ -47,6 +47,11 @@ module Frameit
|
|
47
47
|
description: "Use iPhone 6s frames instead of iPhone 7 frames",
|
48
48
|
default_value: false,
|
49
49
|
type: Boolean),
|
50
|
+
FastlaneCore::ConfigItem.new(key: :use_legacy_iphonex,
|
51
|
+
env_name: "FRAMEIT_USE_LEGACY_IPHONE_X",
|
52
|
+
description: "Use iPhone X instead of iPhone XS frames",
|
53
|
+
default_value: false,
|
54
|
+
type: Boolean),
|
50
55
|
FastlaneCore::ConfigItem.new(key: :force_orientation_block,
|
51
56
|
type: :string_callback,
|
52
57
|
description: "[Advanced] A block to customize your screenshots' device orientation",
|
@@ -29,8 +29,12 @@ module Frameit
|
|
29
29
|
# rubocop:disable Require/MissingRequireStatement
|
30
30
|
sizes = Deliver::AppScreenshot::ScreenSize
|
31
31
|
case @screen_size
|
32
|
+
when sizes::IOS_65
|
33
|
+
return 'iPhone XS Max'
|
34
|
+
when sizes::IOS_61
|
35
|
+
return 'iPhone XR'
|
32
36
|
when sizes::IOS_58
|
33
|
-
return 'iPhone X'
|
37
|
+
return Frameit.config[:use_legacy_iphonex] ? 'iPhone X' : 'iPhone XS'
|
34
38
|
when sizes::IOS_55
|
35
39
|
return Frameit.config[:use_legacy_iphone6s] ? 'iPhone 6s Plus' : 'iPhone 7 Plus'
|
36
40
|
when sizes::IOS_47
|
@@ -55,6 +59,8 @@ module Frameit
|
|
55
59
|
if !Frameit.config[:use_legacy_iphone6s] && @color == Frameit::Color::BLACK
|
56
60
|
if @screen_size == Deliver::AppScreenshot::ScreenSize::IOS_55 || @screen_size == Deliver::AppScreenshot::ScreenSize::IOS_47
|
57
61
|
return "Matte Black" # RIP space gray
|
62
|
+
elsif @screen_size == Deliver::AppScreenshot::ScreenSize::IOS_61
|
63
|
+
return "Black"
|
58
64
|
end
|
59
65
|
end
|
60
66
|
return @color
|
@@ -62,7 +68,7 @@ module Frameit
|
|
62
68
|
|
63
69
|
# Is the device a 3x device? (e.g. iPhone 6 Plus, iPhone X)
|
64
70
|
def triple_density?
|
65
|
-
(screen_size == Deliver::AppScreenshot::ScreenSize::IOS_55 || screen_size == Deliver::AppScreenshot::ScreenSize::IOS_58)
|
71
|
+
(screen_size == Deliver::AppScreenshot::ScreenSize::IOS_55 || screen_size == Deliver::AppScreenshot::ScreenSize::IOS_58 || screen_size == Deliver::AppScreenshot::ScreenSize::IOS_65)
|
66
72
|
end
|
67
73
|
|
68
74
|
# Super old devices (iPhone 4)
|
@@ -45,6 +45,7 @@ module Produce
|
|
45
45
|
c.description = 'Enable specific Application Services for a specific app on the Apple Developer Portal'
|
46
46
|
c.example('Enable HealthKit, HomeKit and Passbook', 'fastlane produce enable_services -a com.example.app --healthkit --homekit --passbook')
|
47
47
|
|
48
|
+
c.option('--access-wifi', 'Enable Access WiFi')
|
48
49
|
c.option('--app-group', 'Enable App Groups')
|
49
50
|
c.option('--apple-pay', 'Enable Apple Pay')
|
50
51
|
c.option('--auto-fill-credential', 'Enable AutoFill Credential')
|
@@ -85,6 +86,7 @@ module Produce
|
|
85
86
|
c.description = 'Disable specific Application Services for a specific app on the Apple Developer Portal'
|
86
87
|
c.example('Disable HealthKit', 'fastlane produce disable_services -a com.example.app --healthkit')
|
87
88
|
|
89
|
+
c.option('--access-wifi', 'Disable Access WiFi')
|
88
90
|
c.option('--app-group', 'Disable App Groups')
|
89
91
|
c.option('--apple-pay', 'Disable Apple Pay')
|
90
92
|
c.option('--auto-fill-credential', 'Disable AutoFill Credential')
|
@@ -36,7 +36,7 @@ module Produce
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def valid_services_for(options)
|
39
|
-
allowed_keys = [:app_group, :apple_pay, :associated_domains, :auto_fill_credential, :data_protection, :game_center, :healthkit, :homekit,
|
39
|
+
allowed_keys = [:access_wifi, :app_group, :apple_pay, :associated_domains, :auto_fill_credential, :data_protection, :game_center, :healthkit, :homekit,
|
40
40
|
:hotspot, :icloud, :in_app_purchase, :inter_app_audio, :multipath, :network_extension,
|
41
41
|
:nfc_tag_reading, :personal_vpn, :passbook, :push_notification, :sirikit, :vpn_conf,
|
42
42
|
:wallet, :wireless_conf]
|
@@ -47,6 +47,15 @@ module Produce
|
|
47
47
|
def update(on, app, options)
|
48
48
|
updated = valid_services_for(options).count
|
49
49
|
|
50
|
+
if options.access_wifi
|
51
|
+
UI.message("\tAccess WiFi")
|
52
|
+
if on
|
53
|
+
app.update_service(Spaceship.app_service.access_wifi.on)
|
54
|
+
else
|
55
|
+
app.update_service(Spaceship.app_service.access_wifi.off)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
50
59
|
if options.app_group
|
51
60
|
UI.message("\tApp Groups")
|
52
61
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require 'fastlane/actions/slack'
|
3
|
+
|
1
4
|
require_relative 'module'
|
2
5
|
|
3
6
|
module Scan
|
@@ -12,56 +15,44 @@ module Scan
|
|
12
15
|
channel = ('#' + channel) unless ['#', '@'].include?(channel[0]) # send message to channel by default
|
13
16
|
end
|
14
17
|
|
15
|
-
|
16
|
-
notifier = Slack::Notifier.new(Scan.config[:slack_url]) do
|
17
|
-
defaults(channel: channel,
|
18
|
-
username: 'fastlane')
|
19
|
-
end
|
20
|
-
|
21
|
-
attachments = []
|
18
|
+
fields = []
|
22
19
|
|
23
|
-
if
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
if results[:build_errors]
|
21
|
+
fields << {
|
22
|
+
title: 'Build Errors',
|
23
|
+
value: results[:build_errors].to_s,
|
24
|
+
short: true
|
27
25
|
}
|
28
26
|
end
|
29
27
|
|
30
|
-
attachments << {
|
31
|
-
text: "Build Errors: #{results[:build_errors] || 0}",
|
32
|
-
color: results[:build_errors].to_i > 0 ? "danger" : "good",
|
33
|
-
short: true
|
34
|
-
}
|
35
|
-
|
36
28
|
if results[:failures]
|
37
|
-
|
38
|
-
|
39
|
-
|
29
|
+
fields << {
|
30
|
+
title: 'Test Failures',
|
31
|
+
value: results[:failures].to_s,
|
40
32
|
short: true
|
41
33
|
}
|
42
34
|
end
|
43
35
|
|
44
36
|
if results[:tests] && results[:failures]
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
fields << {
|
38
|
+
title: 'Successful Tests',
|
39
|
+
value: (results[:tests] - results[:failures]).to_s,
|
48
40
|
short: true
|
49
41
|
}
|
50
42
|
end
|
51
43
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
44
|
+
Fastlane::Actions::SlackAction.run({
|
45
|
+
message: "#{Scan.project.app_name} Tests:\n#{Scan.config[:slack_message]}",
|
46
|
+
channel: channel,
|
47
|
+
slack_url: Scan.config[:slack_url].to_s,
|
48
|
+
success: results[:build_errors].to_i == 0 && results[:failures].to_i == 0,
|
49
|
+
username: 'fastlane',
|
50
|
+
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
|
51
|
+
payload: {},
|
52
|
+
attachment_properties: {
|
53
|
+
fields: fields
|
54
|
+
}
|
55
|
+
})
|
65
56
|
end
|
66
57
|
end
|
67
58
|
end
|
@@ -53,6 +53,7 @@ module Spaceship
|
|
53
53
|
UnauthorizedAccessError = Spaceship::UnauthorizedAccessError
|
54
54
|
GatewayTimeoutError = Spaceship::GatewayTimeoutError
|
55
55
|
InternalServerError = Spaceship::InternalServerError
|
56
|
+
BadGatewayError = Spaceship::BadGatewayError
|
56
57
|
|
57
58
|
def self.hostname
|
58
59
|
raise "You must implement self.hostname"
|
@@ -603,6 +604,7 @@ module Spaceship
|
|
603
604
|
rescue \
|
604
605
|
Faraday::Error::ConnectionFailed,
|
605
606
|
Faraday::Error::TimeoutError, # New Faraday version: Faraday::TimeoutError => ex
|
607
|
+
BadGatewayError,
|
606
608
|
AppleTimeoutError,
|
607
609
|
GatewayTimeoutError => ex
|
608
610
|
tries -= 1
|
@@ -829,6 +831,10 @@ module Spaceship
|
|
829
831
|
raise AppleTimeoutError.new, "Apple 302 detected - this might be temporary server error, check https://developer.apple.com/system-status/ to see if there is a known downtime"
|
830
832
|
end
|
831
833
|
|
834
|
+
if response.body.to_s.include?("<h3>Bad Gateway</h3>")
|
835
|
+
raise BadGatewayError.new, "Apple 502 detected - this might be temporary server error, try again later"
|
836
|
+
end
|
837
|
+
|
832
838
|
return response
|
833
839
|
end
|
834
840
|
end
|
Binary file
|
@@ -71,6 +71,9 @@ module Spaceship
|
|
71
71
|
# Raised when 500 is received from App Store Connect
|
72
72
|
class InternalServerError < BasicPreferredInfoError; end
|
73
73
|
|
74
|
+
# Raised when 502 is received from App Store Connect
|
75
|
+
class BadGatewayError < BasicPreferredInfoError; end
|
76
|
+
|
74
77
|
# Raised when 504 is received from App Store Connect
|
75
78
|
class GatewayTimeoutError < BasicPreferredInfoError; end
|
76
79
|
end
|
@@ -40,7 +40,7 @@ module Spaceship
|
|
40
40
|
return m
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
AccessWifi = AppService.new_service("AWEQ28MY3E")
|
44
44
|
AppGroup = AppService.new_service("APG3427HIY")
|
45
45
|
ApplePay = AppService.new_service("OM633U5T5G")
|
46
46
|
AssociatedDomains = AppService.new_service("SKC3T5S89Y")
|
@@ -763,6 +763,8 @@ module Spaceship
|
|
763
763
|
end
|
764
764
|
|
765
765
|
def create_key!(name: nil, service_configs: nil)
|
766
|
+
fetch_csrf_token_for_keys
|
767
|
+
|
766
768
|
params = {
|
767
769
|
name: name,
|
768
770
|
serviceConfigurations: service_configs,
|
@@ -779,6 +781,7 @@ module Spaceship
|
|
779
781
|
end
|
780
782
|
|
781
783
|
def revoke_key!(id: nil)
|
784
|
+
fetch_csrf_token_for_keys
|
782
785
|
response = request(:post, 'account/auth/key/revoke', { teamId: team_id, keyId: id })
|
783
786
|
parse_response(response)
|
784
787
|
end
|
@@ -817,14 +820,26 @@ module Spaceship
|
|
817
820
|
# profiles.
|
818
821
|
# Source https://github.com/fastlane/fastlane/issues/5903
|
819
822
|
def fetch_csrf_token_for_provisioning(mac: false)
|
820
|
-
|
823
|
+
response = request(:post, "account/#{platform_slug(mac)}/profile/listProvisioningProfiles.action", {
|
824
|
+
teamId: team_id,
|
825
|
+
pageNumber: 1,
|
826
|
+
pageSize: 1,
|
827
|
+
sort: 'name=asc'
|
828
|
+
})
|
829
|
+
|
830
|
+
parse_response(response, 'provisioningProfiles')
|
831
|
+
return nil
|
832
|
+
end
|
833
|
+
|
834
|
+
def fetch_csrf_token_for_keys
|
835
|
+
response = request(:post, 'account/auth/key/list', {
|
821
836
|
teamId: team_id,
|
822
837
|
pageNumber: 1,
|
823
838
|
pageSize: 1,
|
824
839
|
sort: 'name=asc'
|
825
840
|
})
|
826
841
|
|
827
|
-
parse_response(
|
842
|
+
parse_response(response, 'keys')
|
828
843
|
return nil
|
829
844
|
end
|
830
845
|
end
|
@@ -176,7 +176,9 @@ module Spaceship
|
|
176
176
|
assert_required_params(__method__, binding)
|
177
177
|
page_size = 40 # that's enforced by the iTC servers
|
178
178
|
resulting_array = []
|
179
|
-
|
179
|
+
# Sort order is set to `default` instead of `email`, because any other sort order breaks pagination
|
180
|
+
# when dealing with lots of anonymous (public link) testers: https://github.com/fastlane/fastlane/pull/13778
|
181
|
+
initial_url = "providers/#{team_id}/apps/#{app_id}/testers?limit=#{page_size}&sort=default&order=asc"
|
180
182
|
response = request(:get, initial_url)
|
181
183
|
link_from_response = proc do |r|
|
182
184
|
# I weep for Swift nil chaining
|
metadata
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.114.0
|
4
|
+
version: 2.114.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Jan Piotrowski
|
9
|
-
- Andrew McBurney
|
7
|
+
- Danielle Tomlinson
|
10
8
|
- Helmut Januschka
|
11
|
-
- Joshua Liebowitz
|
12
|
-
- Jorge Revuelta H
|
13
|
-
- Felix Krause
|
14
|
-
- Olivier Halligon
|
15
9
|
- Manu Wallner
|
16
|
-
-
|
10
|
+
- Andrew McBurney
|
11
|
+
- Luka Mirosevic
|
12
|
+
- Matthew Ellis
|
13
|
+
- Iulian Onofrei
|
14
|
+
- Stefan Natchev
|
15
|
+
- Jimmy Dee
|
16
|
+
- Jorge Revuelta H
|
17
17
|
- Kohki Miki
|
18
|
-
-
|
18
|
+
- Jan Piotrowski
|
19
19
|
- Jérôme Lacoste
|
20
|
+
- Olivier Halligon
|
21
|
+
- Joshua Liebowitz
|
22
|
+
- Aaron Brager
|
20
23
|
- Josh Holtz
|
24
|
+
- Felix Krause
|
21
25
|
- Fumiya Nakamura
|
22
|
-
-
|
23
|
-
- Aaron Brager
|
24
|
-
- Luka Mirosevic
|
25
|
-
- Iulian Onofrei
|
26
|
-
- Jimmy Dee
|
26
|
+
- Maksym Grebenets
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2019-01-
|
30
|
+
date: 2019-01-17 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -643,16 +643,22 @@ dependencies:
|
|
643
643
|
name: emoji_regex
|
644
644
|
requirement: !ruby/object:Gem::Requirement
|
645
645
|
requirements:
|
646
|
-
- - "
|
646
|
+
- - ">="
|
647
647
|
- !ruby/object:Gem::Version
|
648
648
|
version: '0.1'
|
649
|
+
- - "<"
|
650
|
+
- !ruby/object:Gem::Version
|
651
|
+
version: '2.0'
|
649
652
|
type: :runtime
|
650
653
|
prerelease: false
|
651
654
|
version_requirements: !ruby/object:Gem::Requirement
|
652
655
|
requirements:
|
653
|
-
- - "
|
656
|
+
- - ">="
|
654
657
|
- !ruby/object:Gem::Version
|
655
658
|
version: '0.1'
|
659
|
+
- - "<"
|
660
|
+
- !ruby/object:Gem::Version
|
661
|
+
version: '2.0'
|
656
662
|
- !ruby/object:Gem::Dependency
|
657
663
|
name: rake
|
658
664
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1280,6 +1286,7 @@ files:
|
|
1280
1286
|
- fastlane/swift/Fastlane.swift
|
1281
1287
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj
|
1282
1288
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
1289
|
+
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate
|
1283
1290
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme
|
1284
1291
|
- fastlane/swift/FastlaneSwiftRunner/README.txt
|
1285
1292
|
- fastlane/swift/Gymfile.swift
|
@@ -1562,6 +1569,7 @@ files:
|
|
1562
1569
|
- spaceship/lib/spaceship/client.rb
|
1563
1570
|
- spaceship/lib/spaceship/commands_generator.rb
|
1564
1571
|
- spaceship/lib/spaceship/connect_api.rb
|
1572
|
+
- spaceship/lib/spaceship/connect_api/.DS_Store
|
1565
1573
|
- spaceship/lib/spaceship/connect_api/base.rb
|
1566
1574
|
- spaceship/lib/spaceship/connect_api/client.rb
|
1567
1575
|
- spaceship/lib/spaceship/du/du_client.rb
|
@@ -1682,24 +1690,24 @@ metadata:
|
|
1682
1690
|
post_install_message:
|
1683
1691
|
rdoc_options: []
|
1684
1692
|
require_paths:
|
1693
|
+
- credentials_manager/lib
|
1694
|
+
- pem/lib
|
1695
|
+
- snapshot/lib
|
1685
1696
|
- frameit/lib
|
1686
|
-
-
|
1697
|
+
- match/lib
|
1698
|
+
- fastlane_core/lib
|
1699
|
+
- deliver/lib
|
1700
|
+
- scan/lib
|
1701
|
+
- supply/lib
|
1702
|
+
- cert/lib
|
1687
1703
|
- fastlane/lib
|
1688
|
-
-
|
1704
|
+
- spaceship/lib
|
1705
|
+
- pilot/lib
|
1689
1706
|
- gym/lib
|
1690
1707
|
- precheck/lib
|
1691
|
-
- scan/lib
|
1692
|
-
- pem/lib
|
1693
|
-
- produce/lib
|
1694
|
-
- spaceship/lib
|
1695
|
-
- fastlane_core/lib
|
1696
|
-
- supply/lib
|
1697
|
-
- deliver/lib
|
1698
|
-
- credentials_manager/lib
|
1699
|
-
- match/lib
|
1700
1708
|
- screengrab/lib
|
1701
1709
|
- sigh/lib
|
1702
|
-
-
|
1710
|
+
- produce/lib
|
1703
1711
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1704
1712
|
requirements:
|
1705
1713
|
- - ">="
|
@@ -1707,12 +1715,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1707
1715
|
version: 2.0.0
|
1708
1716
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1709
1717
|
requirements:
|
1710
|
-
- - "
|
1718
|
+
- - ">="
|
1711
1719
|
- !ruby/object:Gem::Version
|
1712
|
-
version:
|
1720
|
+
version: '0'
|
1713
1721
|
requirements: []
|
1714
1722
|
rubyforge_project:
|
1715
|
-
rubygems_version: 2.
|
1723
|
+
rubygems_version: 2.5.2.3
|
1716
1724
|
signing_key:
|
1717
1725
|
specification_version: 4
|
1718
1726
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|