fastlane 2.71.0.beta.20171220010004 → 2.71.0.beta.20171221010003
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/fastlane/lib/fastlane/actions/build_ios_app.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/produce.md +5 -1
- data/fastlane/lib/fastlane/actions/get_info_plist_value.rb +4 -0
- data/fastlane/lib/fastlane/actions/get_ipa_info_plist_value.rb +4 -0
- data/fastlane/lib/fastlane/actions/modify_services.rb +5 -1
- data/fastlane/lib/fastlane/server/socket_server.rb +8 -3
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +11 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +14 -10
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +4 -0
- data/produce/lib/produce/developer_center.rb +5 -1
- data/produce/lib/produce/service.rb +42 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +2 -1
- data/supply/lib/supply/setup.rb +2 -2
- data/supply/lib/supply/uploader.rb +14 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6526f8f23e3c14fee2da16fd52d6edf38a5635fc
|
4
|
+
data.tar.gz: 334a2ccfe0982092cf469b185801cc1791e540c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bf02ecc87f629eedbb71905163bcc4105a9d6d343a2c1e5a8c1cd4fd38cde074eb14c7258f94699c6c2f1810b383eefda40bfdd4c2f5aca249723b389b79759
|
7
|
+
data.tar.gz: d1496726afc4f73ccc1176b6f61d2afbf5e7f463849ea4d1ad6f5b6516f4b6ea01b587402f1ea5fc2da73e285e54afa85a347ae34226cf08493b8c5139c1aba7
|
@@ -121,7 +121,7 @@ module Fastlane
|
|
121
121
|
clean: true,
|
122
122
|
output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
|
123
123
|
output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
|
124
|
-
sdk: "
|
124
|
+
sdk: "iOS 11.1" # use SDK as the name or path of the base SDK when building the project.
|
125
125
|
)',
|
126
126
|
'gym # alias for "build_ios_app"',
|
127
127
|
'build_app # alias for "build_ios_app"'
|
@@ -204,7 +204,11 @@ lane :release do
|
|
204
204
|
passbook: "on", # Valid values: "on", "off"
|
205
205
|
push_notification: "on", # Valid values: "on", "off"
|
206
206
|
siri_kit: "on", # Valid values: "on", "off"
|
207
|
-
vpn_configuration: "on" # Valid values: "on", "off"
|
207
|
+
vpn_configuration: "on", # Valid values: "on", "off"
|
208
|
+
network_extension: "on", # Valid values: "on", "off"
|
209
|
+
hotspot: "on", # Valid values: "on", "off"
|
210
|
+
multipath: "on", # Valid values: "on", "off"
|
211
|
+
nfc_tag_reading: "on", # Valid values: "on", "off"
|
208
212
|
}
|
209
213
|
)
|
210
214
|
|
@@ -58,7 +58,11 @@ module Fastlane
|
|
58
58
|
passbook: 'passbook',
|
59
59
|
push_notification: 'push_notification',
|
60
60
|
siri_kit: 'sirikit',
|
61
|
-
vpn_configuration: 'vpn_conf'
|
61
|
+
vpn_configuration: 'vpn_conf',
|
62
|
+
network_extension: 'network_extension',
|
63
|
+
hotspot: 'hotspot',
|
64
|
+
multipath: 'multipath',
|
65
|
+
nfc_tag_reading: 'nfc_tag_reading'
|
62
66
|
}
|
63
67
|
end
|
64
68
|
|
@@ -174,7 +174,8 @@ module Fastlane
|
|
174
174
|
return_value = ""
|
175
175
|
end
|
176
176
|
|
177
|
-
|
177
|
+
# quirks_mode because sometimes the built-in library is used for some folks and that needs quirks_mode: true
|
178
|
+
return JSON.generate(return_value.to_s, quirks_mode: true)
|
178
179
|
end
|
179
180
|
|
180
181
|
def process_value_as_array_of_strings(return_value: nil)
|
@@ -182,6 +183,7 @@ module Fastlane
|
|
182
183
|
return_value = []
|
183
184
|
end
|
184
185
|
|
186
|
+
# quirks_mode shouldn't be required for real objects
|
185
187
|
return JSON.generate(return_value)
|
186
188
|
end
|
187
189
|
|
@@ -190,6 +192,7 @@ module Fastlane
|
|
190
192
|
return_value = {}
|
191
193
|
end
|
192
194
|
|
195
|
+
# quirks_mode shouldn't be required for real objects
|
193
196
|
return JSON.generate(return_value)
|
194
197
|
end
|
195
198
|
|
@@ -198,7 +201,8 @@ module Fastlane
|
|
198
201
|
return_value = false
|
199
202
|
end
|
200
203
|
|
201
|
-
|
204
|
+
# quirks_mode because sometimes the built-in library is used for some folks and that needs quirks_mode: true
|
205
|
+
return JSON.generate(return_value.to_s, quirks_mode: true)
|
202
206
|
end
|
203
207
|
|
204
208
|
def process_value_as_int(return_value: nil)
|
@@ -206,7 +210,8 @@ module Fastlane
|
|
206
210
|
return_value = 0
|
207
211
|
end
|
208
212
|
|
209
|
-
|
213
|
+
# quirks_mode because sometimes the built-in library is used for some folks and that needs quirks_mode: true
|
214
|
+
return JSON.generate(return_value.to_s, quirks_mode: true)
|
210
215
|
end
|
211
216
|
end
|
212
217
|
end
|
@@ -79,11 +79,13 @@ module Fastlane
|
|
79
79
|
file_content += autogen_version_warning_text_array
|
80
80
|
|
81
81
|
file_content = file_content.join("\n")
|
82
|
-
|
83
|
-
File.write(
|
84
|
-
UI.success(
|
82
|
+
fastlane_swift_api_path = File.join(@target_output_path, "Fastlane.swift")
|
83
|
+
File.write(fastlane_swift_api_path, file_content)
|
84
|
+
UI.success(fastlane_swift_api_path)
|
85
85
|
|
86
|
-
|
86
|
+
files_generated = [fastlane_swift_api_path]
|
87
|
+
files_generated += generate_default_implementations(tool_details: tool_details)
|
88
|
+
return files_generated
|
87
89
|
end
|
88
90
|
|
89
91
|
def write_lanefile(lanefile_implementation_opening: nil, class_name: nil, tool_name: nil)
|
@@ -109,17 +111,20 @@ module Fastlane
|
|
109
111
|
target_path = File.join(@target_output_path, "#{class_name}.swift")
|
110
112
|
File.write(target_path, file_content)
|
111
113
|
UI.success(target_path)
|
114
|
+
return target_path
|
112
115
|
end
|
113
116
|
|
114
|
-
def
|
117
|
+
def generate_default_implementations(tool_details: nil)
|
118
|
+
files_generated = []
|
115
119
|
tool_details.each do |tool_detail|
|
116
120
|
lanefile_implementation_opening = "class #{tool_detail.swift_class}: #{tool_detail.swift_protocol} {"
|
117
|
-
write_lanefile(
|
121
|
+
files_generated << write_lanefile(
|
118
122
|
lanefile_implementation_opening: lanefile_implementation_opening,
|
119
123
|
class_name: tool_detail.swift_class,
|
120
124
|
tool_name: tool_detail.command_line_tool_name
|
121
125
|
)
|
122
126
|
end
|
127
|
+
return files_generated
|
123
128
|
end
|
124
129
|
|
125
130
|
def generate_lanefile_parsing_functions
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.71.0.beta.
|
2
|
+
VERSION = '2.71.0.beta.20171221010003'.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
|
@@ -1123,7 +1123,8 @@ func danger(useBundleExec: Bool = true,
|
|
1123
1123
|
failOnErrors: Bool = false,
|
1124
1124
|
newComment: Bool = false,
|
1125
1125
|
base: String? = nil,
|
1126
|
-
head: String? = nil
|
1126
|
+
head: String? = nil,
|
1127
|
+
pr: String? = nil) {
|
1127
1128
|
let command = RubyCommand(commandID: "", methodName: "danger", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
|
1128
1129
|
RubyCommand.Argument(name: "verbose", value: verbose),
|
1129
1130
|
RubyCommand.Argument(name: "danger_id", value: dangerId),
|
@@ -1132,7 +1133,8 @@ func danger(useBundleExec: Bool = true,
|
|
1132
1133
|
RubyCommand.Argument(name: "fail_on_errors", value: failOnErrors),
|
1133
1134
|
RubyCommand.Argument(name: "new_comment", value: newComment),
|
1134
1135
|
RubyCommand.Argument(name: "base", value: base),
|
1135
|
-
RubyCommand.Argument(name: "head", value: head)
|
1136
|
+
RubyCommand.Argument(name: "head", value: head),
|
1137
|
+
RubyCommand.Argument(name: "pr", value: pr)])
|
1136
1138
|
_ = runner.executeCommand(command)
|
1137
1139
|
}
|
1138
1140
|
func deleteKeychain(name: String? = nil,
|
@@ -1431,17 +1433,17 @@ func getGithubRelease(url: String,
|
|
1431
1433
|
RubyCommand.Argument(name: "api_token", value: apiToken)])
|
1432
1434
|
_ = runner.executeCommand(command)
|
1433
1435
|
}
|
1434
|
-
func getInfoPlistValue(key: String,
|
1435
|
-
|
1436
|
+
@discardableResult func getInfoPlistValue(key: String,
|
1437
|
+
path: String) -> String {
|
1436
1438
|
let command = RubyCommand(commandID: "", methodName: "get_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key),
|
1437
1439
|
RubyCommand.Argument(name: "path", value: path)])
|
1438
|
-
|
1440
|
+
return runner.executeCommand(command)
|
1439
1441
|
}
|
1440
|
-
func getIpaInfoPlistValue(key: String,
|
1441
|
-
|
1442
|
+
@discardableResult func getIpaInfoPlistValue(key: String,
|
1443
|
+
ipa: String) -> String {
|
1442
1444
|
let command = RubyCommand(commandID: "", methodName: "get_ipa_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key),
|
1443
1445
|
RubyCommand.Argument(name: "ipa", value: ipa)])
|
1444
|
-
|
1446
|
+
return runner.executeCommand(command)
|
1445
1447
|
}
|
1446
1448
|
func getProvisioningProfile(adhoc: Bool = false,
|
1447
1449
|
development: Bool = false,
|
@@ -2856,7 +2858,8 @@ func slack(message: String? = nil,
|
|
2856
2858
|
payload: String = "{}",
|
2857
2859
|
defaultPayloads: [String]? = nil,
|
2858
2860
|
attachmentProperties: String = "{}",
|
2859
|
-
success: Bool = true
|
2861
|
+
success: Bool = true,
|
2862
|
+
failOnError: Bool = true) {
|
2860
2863
|
let command = RubyCommand(commandID: "", methodName: "slack", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
|
2861
2864
|
RubyCommand.Argument(name: "channel", value: channel),
|
2862
2865
|
RubyCommand.Argument(name: "use_webhook_configured_username_and_icon", value: useWebhookConfiguredUsernameAndIcon),
|
@@ -2866,7 +2869,8 @@ func slack(message: String? = nil,
|
|
2866
2869
|
RubyCommand.Argument(name: "payload", value: payload),
|
2867
2870
|
RubyCommand.Argument(name: "default_payloads", value: defaultPayloads),
|
2868
2871
|
RubyCommand.Argument(name: "attachment_properties", value: attachmentProperties),
|
2869
|
-
RubyCommand.Argument(name: "success", value: success)
|
2872
|
+
RubyCommand.Argument(name: "success", value: success),
|
2873
|
+
RubyCommand.Argument(name: "fail_on_error", value: failOnError)])
|
2870
2874
|
_ = runner.executeCommand(command)
|
2871
2875
|
}
|
2872
2876
|
func slackTrain() {
|
@@ -23,6 +23,9 @@ module FastlaneCore
|
|
23
23
|
# [Boolean] is false by default. If set to true, also string values will not be asked to the user
|
24
24
|
attr_accessor :optional
|
25
25
|
|
26
|
+
# [Boolean] is false by default. If set to true, type of the parameter will not be validated.
|
27
|
+
attr_accessor :skip_type_validation
|
28
|
+
|
26
29
|
# [Array] array of conflicting option keys(@param key). This allows to resolve conflicts intelligently
|
27
30
|
attr_accessor :conflicting_options
|
28
31
|
|
@@ -53,6 +56,7 @@ module FastlaneCore
|
|
53
56
|
# You have to raise a specific exception if something goes wrong. Append .red after the string
|
54
57
|
# @param is_string *DEPRECATED: Use `type` instead* (Boolean) is that parameter a string? Defaults to true. If it's true, the type string will be verified.
|
55
58
|
# @param type (Class) the data type of this config item. Takes precedence over `is_string`. Use `:shell_string` to allow types `String`, `Hash` and `Array` that will be converted to shell-escaped strings
|
59
|
+
# @param skip_type_validation (Boolean) is false by default. If set to true, type of the parameter will not be validated.
|
56
60
|
# @param optional (Boolean) is false by default. If set to true, also string values will not be asked to the user
|
57
61
|
# @param conflicting_options ([]) array of conflicting option keys(@param key). This allows to resolve conflicts intelligently
|
58
62
|
# @param conflict_block an optional block which is called when options conflict happens
|
@@ -29,7 +29,11 @@ module Produce
|
|
29
29
|
passbook: [SERVICE_ON, SERVICE_OFF],
|
30
30
|
push_notification: [SERVICE_ON, SERVICE_OFF],
|
31
31
|
siri_kit: [SERVICE_ON, SERVICE_OFF],
|
32
|
-
vpn_configuration: [SERVICE_ON, SERVICE_OFF]
|
32
|
+
vpn_configuration: [SERVICE_ON, SERVICE_OFF],
|
33
|
+
network_extension: [SERVICE_ON, SERVICE_OFF],
|
34
|
+
hotspot: [SERVICE_ON, SERVICE_OFF],
|
35
|
+
multipath: [SERVICE_ON, SERVICE_OFF],
|
36
|
+
nfc_tag_reading: [SERVICE_ON, SERVICE_OFF]
|
33
37
|
}
|
34
38
|
|
35
39
|
def run
|
@@ -34,7 +34,8 @@ module Produce
|
|
34
34
|
|
35
35
|
def valid_services_for(options)
|
36
36
|
allowed_keys = [:app_group, :apple_pay, :associated_domains, :data_protection, :game_center, :healthkit, :homekit,
|
37
|
-
:wireless_conf, :icloud, :in_app_purchase, :inter_app_audio, :passbook, :push_notification, :sirikit,
|
37
|
+
:wireless_conf, :icloud, :in_app_purchase, :inter_app_audio, :passbook, :push_notification, :sirikit,
|
38
|
+
:vpn_conf, :network_extension, :hotspot, :multipath, :nfc_tag_reading]
|
38
39
|
options.__hash__.select { |key, value| allowed_keys.include? key }
|
39
40
|
end
|
40
41
|
|
@@ -210,6 +211,46 @@ module Produce
|
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
214
|
+
if options.network_extension
|
215
|
+
UI.message("\tNetwork Extension")
|
216
|
+
|
217
|
+
if on
|
218
|
+
app.update_service(Spaceship.app_service.network_extension.on)
|
219
|
+
else
|
220
|
+
app.update_service(Spaceship.app_service.network_extension.off)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
if options.hotspot
|
225
|
+
UI.message("\tHotspot")
|
226
|
+
|
227
|
+
if on
|
228
|
+
app.update_service(Spaceship.app_service.hotspot.on)
|
229
|
+
else
|
230
|
+
app.update_service(Spaceship.app_service.hotspot.off)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
if options.multipath
|
235
|
+
UI.message("\tMultipath")
|
236
|
+
|
237
|
+
if on
|
238
|
+
app.update_service(Spaceship.app_service.multipath.on)
|
239
|
+
else
|
240
|
+
app.update_service(Spaceship.app_service.multipath.off)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
if options.nfc_tag_reading
|
245
|
+
UI.message("\tNFC Tag Reading")
|
246
|
+
|
247
|
+
if on
|
248
|
+
app.update_service(Spaceship.app_service.nfc_tag_reading.on)
|
249
|
+
else
|
250
|
+
app.update_service(Spaceship.app_service.nfc_tag_reading.off)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
213
254
|
updated
|
214
255
|
end
|
215
256
|
|
@@ -58,6 +58,7 @@ enum SnapshotError: Error, CustomDebugStringConvertible {
|
|
58
58
|
}
|
59
59
|
}
|
60
60
|
|
61
|
+
@objcMembers
|
61
62
|
open class Snapshot: NSObject {
|
62
63
|
static var app: XCUIApplication!
|
63
64
|
static var cacheDirectory: URL!
|
@@ -242,4 +243,4 @@ private extension CGFloat {
|
|
242
243
|
|
243
244
|
// Please don't remove the lines below
|
244
245
|
// They are used to detect outdated configuration files
|
245
|
-
// SnapshotHelperVersion [1.
|
246
|
+
// SnapshotHelperVersion [1.8]
|
data/supply/lib/supply/setup.rb
CHANGED
@@ -44,7 +44,7 @@ module Supply
|
|
44
44
|
IMAGES_TYPES.each do |image_type|
|
45
45
|
if ['featureGraphic'].include?(image_type)
|
46
46
|
# we don't get all files in full resolution :(
|
47
|
-
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing feature
|
47
|
+
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing feature graphic. Please copy your feature graphic to `metadata/android/#{listing.language}/images/featureGraphic.png`")
|
48
48
|
next
|
49
49
|
end
|
50
50
|
|
@@ -71,7 +71,7 @@ module Supply
|
|
71
71
|
FileUtils.mkdir_p(File.join(containing, IMAGES_FOLDER_NAME, screenshot_type))
|
72
72
|
end
|
73
73
|
|
74
|
-
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing screenshots. Please copy your screenshots into `metadata/android/
|
74
|
+
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing screenshots. Please copy your screenshots into `metadata/android/#{listing.language}/images/`")
|
75
75
|
end
|
76
76
|
|
77
77
|
def store_apk_listing(apk_listing)
|
@@ -168,7 +168,7 @@ module Supply
|
|
168
168
|
# - Lesser than the greatest of any later (i.e. production) track
|
169
169
|
# - Or lesser than the currently being uploaded if it's in an earlier (i.e. alpha) track
|
170
170
|
def check_superseded_tracks(apk_version_codes)
|
171
|
-
UI.message("Checking superseded tracks...")
|
171
|
+
UI.message("Checking superseded tracks, uploading '#{apk_version_codes}' to '#{Supply.config[:track]}'...")
|
172
172
|
max_apk_version_code = apk_version_codes.max
|
173
173
|
max_tracks_version_code = nil
|
174
174
|
|
@@ -176,26 +176,27 @@ module Supply
|
|
176
176
|
config_track_index = tracks.index(Supply.config[:track])
|
177
177
|
|
178
178
|
tracks.each_index do |track_index|
|
179
|
-
next if track_index.eql? config_track_index
|
180
179
|
track = tracks[track_index]
|
181
|
-
|
182
180
|
track_version_codes = client.track_version_codes(track).sort
|
181
|
+
UI.verbose("Found '#{track_version_codes}' on track '#{track}'")
|
182
|
+
|
183
|
+
next if track_index.eql? config_track_index
|
183
184
|
next if track_version_codes.empty?
|
184
185
|
|
185
186
|
if max_tracks_version_code.nil?
|
186
187
|
max_tracks_version_code = track_version_codes.max
|
187
|
-
|
188
|
-
removed_version_codes = track_version_codes.take_while do |v|
|
189
|
-
v < max_tracks_version_code || (v < max_apk_version_code && track_index > config_track_index)
|
190
|
-
end
|
188
|
+
end
|
191
189
|
|
192
|
-
|
193
|
-
|
194
|
-
max_tracks_version_code = keep_version_codes[0] unless keep_version_codes.empty?
|
195
|
-
client.update_track(track, 1.0, keep_version_codes)
|
196
|
-
UI.message("Superseded track '#{track}', removed '#{removed_version_codes}'")
|
197
|
-
end
|
190
|
+
removed_version_codes = track_version_codes.take_while do |v|
|
191
|
+
v < max_tracks_version_code || (v < max_apk_version_code && track_index > config_track_index)
|
198
192
|
end
|
193
|
+
|
194
|
+
next if removed_version_codes.empty?
|
195
|
+
|
196
|
+
keep_version_codes = track_version_codes - removed_version_codes
|
197
|
+
max_tracks_version_code = keep_version_codes[0] unless keep_version_codes.empty?
|
198
|
+
client.update_track(track, 1.0, keep_version_codes)
|
199
|
+
UI.message("Superseded track '#{track}', removed '#{removed_version_codes}'")
|
199
200
|
end
|
200
201
|
end
|
201
202
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.71.0.beta.
|
4
|
+
version: 2.71.0.beta.20171221010003
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -15,7 +15,7 @@ authors:
|
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
|
-
date: 2017-12-
|
18
|
+
date: 2017-12-21 00:00:00.000000000 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: slack-notifier
|