fastlane 2.70.1 → 2.70.2
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/.DS_Store +0 -0
- data/fastlane/lib/fastlane/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +1 -1
- data/fastlane/lib/fastlane/actions/danger.rb +7 -0
- data/fastlane/lib/fastlane/actions/docs/produce.md +5 -1
- data/fastlane/lib/fastlane/actions/get_build_number.rb +4 -0
- 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/git_branch.rb +4 -0
- data/fastlane/lib/fastlane/actions/modify_services.rb +5 -1
- data/fastlane/lib/fastlane/actions/slack.rb +24 -9
- data/fastlane/lib/{assets → fastlane/helper}/.DS_Store +0 -0
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +12 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +18 -14
- 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/lib/fastlane/actions/docs → fastlane_core/lib}/.DS_Store +0 -0
- data/fastlane_core/lib/fastlane_core/.DS_Store +0 -0
- data/fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb +1 -1
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +12 -7
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ios_app_identifier_guesser.rb +44 -3
- 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 +1 -1
- data/supply/lib/supply/uploader.rb +14 -13
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 83ac3d5b30435c890c6c68faeb4a41bfe3acb424
|
|
4
|
+
data.tar.gz: 39c65833f75f48ef0131faf206683adcacd9127c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 12b67636cf96d5debabd98bf4b2d53fce327af50830c504b80fda8aeb798c88fd6f69c242eabc200db9176eddeeb67cc789bcf062a65a0e95f74fd92b330753a
|
|
7
|
+
data.tar.gz: aadae44146f183fd6913c07b3b65f748768fee1e11756df9727c0681eb8f9e3e089261e23c58b20ed0a0e6f743fd5fab446b678fc51e0d3ebc071b84c2fb4f98
|
data/fastlane/lib/.DS_Store
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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"'
|
|
@@ -13,12 +13,14 @@ module Fastlane
|
|
|
13
13
|
dangerfile = params[:dangerfile]
|
|
14
14
|
base = params[:base]
|
|
15
15
|
head = params[:head]
|
|
16
|
+
pr = params[:pr]
|
|
16
17
|
cmd << "--danger_id=#{danger_id}" if danger_id
|
|
17
18
|
cmd << "--dangerfile=#{dangerfile}" if dangerfile
|
|
18
19
|
cmd << "--fail-on-errors=true" if params[:fail_on_errors]
|
|
19
20
|
cmd << "--new-comment" if params[:new_comment]
|
|
20
21
|
cmd << "--base=#{base}" if base
|
|
21
22
|
cmd << "--head=#{head}" if head
|
|
23
|
+
cmd << "pr #{pr}" if pr
|
|
22
24
|
|
|
23
25
|
ENV['DANGER_GITHUB_API_TOKEN'] = params[:github_api_token] if params[:github_api_token]
|
|
24
26
|
|
|
@@ -85,6 +87,11 @@ module Fastlane
|
|
|
85
87
|
env_name: "FL_DANGER_HEAD",
|
|
86
88
|
description: "A branch/tag/commit to use as the head. [master|dev|stable]",
|
|
87
89
|
is_string: true,
|
|
90
|
+
optional: true),
|
|
91
|
+
FastlaneCore::ConfigItem.new(key: :pr,
|
|
92
|
+
env_name: "FL_DANGER_PR",
|
|
93
|
+
description: "Run danger on a specific pull request. e.g. \"https://github.com/danger/danger/pull/518\"",
|
|
94
|
+
is_string: true,
|
|
88
95
|
optional: true)
|
|
89
96
|
]
|
|
90
97
|
end
|
|
@@ -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
|
|
|
@@ -38,15 +38,24 @@ module Fastlane
|
|
|
38
38
|
|
|
39
39
|
return [notifier, slack_attachment] if Helper.is_test? # tests will verify the slack attachments and other properties
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
UI.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
begin
|
|
42
|
+
result = notifier.ping '',
|
|
43
|
+
icon_url: icon_url,
|
|
44
|
+
attachments: [slack_attachment]
|
|
45
|
+
rescue => exception
|
|
46
|
+
UI.error("Exception: #{exception}")
|
|
47
|
+
ensure
|
|
48
|
+
if !result.nil? && result.code.to_i == 200
|
|
49
|
+
UI.success('Successfully sent Slack notification')
|
|
50
|
+
else
|
|
51
|
+
UI.verbose(result) unless result.nil?
|
|
52
|
+
message = "Error pushing Slack message, maybe the integration has no permission to post on this channel? Try removing the channel parameter in your Fastfile, this is usually caused by a misspelled or changed group/channel name or an expired SLACK_URL"
|
|
53
|
+
if options[:fail_on_error]
|
|
54
|
+
UI.user_error!(message)
|
|
55
|
+
else
|
|
56
|
+
UI.error(message)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
50
59
|
end
|
|
51
60
|
end
|
|
52
61
|
|
|
@@ -109,6 +118,12 @@ module Fastlane
|
|
|
109
118
|
description: "Was this build successful? (true/false)",
|
|
110
119
|
optional: true,
|
|
111
120
|
default_value: true,
|
|
121
|
+
is_string: false),
|
|
122
|
+
FastlaneCore::ConfigItem.new(key: :fail_on_error,
|
|
123
|
+
env_name: "FL_SLACK_FAIL_ON_ERROR",
|
|
124
|
+
description: "Should an error sending the slack notification cause a failure? (true/false)",
|
|
125
|
+
optional: true,
|
|
126
|
+
default_value: true,
|
|
112
127
|
is_string: false)
|
|
113
128
|
]
|
|
114
129
|
end
|
|
Binary file
|
|
@@ -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)
|
|
@@ -102,23 +104,27 @@ module Fastlane
|
|
|
102
104
|
disclaimer << ""
|
|
103
105
|
disclaimer << ""
|
|
104
106
|
disclaimer << "// Generated with fastlane #{Fastlane::VERSION}"
|
|
107
|
+
disclaimer << ""
|
|
105
108
|
|
|
106
109
|
file_content = disclaimer.join("\n")
|
|
107
110
|
|
|
108
111
|
target_path = File.join(@target_output_path, "#{class_name}.swift")
|
|
109
112
|
File.write(target_path, file_content)
|
|
110
113
|
UI.success(target_path)
|
|
114
|
+
return target_path
|
|
111
115
|
end
|
|
112
116
|
|
|
113
|
-
def
|
|
117
|
+
def generate_default_implementations(tool_details: nil)
|
|
118
|
+
files_generated = []
|
|
114
119
|
tool_details.each do |tool_detail|
|
|
115
120
|
lanefile_implementation_opening = "class #{tool_detail.swift_class}: #{tool_detail.swift_protocol} {"
|
|
116
|
-
write_lanefile(
|
|
121
|
+
files_generated << write_lanefile(
|
|
117
122
|
lanefile_implementation_opening: lanefile_implementation_opening,
|
|
118
123
|
class_name: tool_detail.swift_class,
|
|
119
124
|
tool_name: tool_detail.command_line_tool_name
|
|
120
125
|
)
|
|
121
126
|
end
|
|
127
|
+
return files_generated
|
|
122
128
|
end
|
|
123
129
|
|
|
124
130
|
def generate_lanefile_parsing_functions
|
|
@@ -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,
|
|
@@ -1393,9 +1395,9 @@ func gcovr() {
|
|
|
1393
1395
|
let command = RubyCommand(commandID: "", methodName: "gcovr", className: nil, args: [])
|
|
1394
1396
|
_ = runner.executeCommand(command)
|
|
1395
1397
|
}
|
|
1396
|
-
func getBuildNumber(xcodeproj: String? = nil) {
|
|
1398
|
+
@discardableResult func getBuildNumber(xcodeproj: String? = nil) -> String {
|
|
1397
1399
|
let command = RubyCommand(commandID: "", methodName: "get_build_number", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
|
|
1398
|
-
|
|
1400
|
+
return runner.executeCommand(command)
|
|
1399
1401
|
}
|
|
1400
1402
|
func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
|
|
1401
1403
|
let command = RubyCommand(commandID: "", methodName: "get_build_number_repository", className: nil, args: [RubyCommand.Argument(name: "use_hg_revision_number", value: useHgRevisionNumber)])
|
|
@@ -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,
|
|
@@ -1525,9 +1527,9 @@ func gitAdd(path: String? = nil,
|
|
|
1525
1527
|
RubyCommand.Argument(name: "pathspec", value: pathspec)])
|
|
1526
1528
|
_ = runner.executeCommand(command)
|
|
1527
1529
|
}
|
|
1528
|
-
func gitBranch() {
|
|
1530
|
+
@discardableResult func gitBranch() -> String {
|
|
1529
1531
|
let command = RubyCommand(commandID: "", methodName: "git_branch", className: nil, args: [])
|
|
1530
|
-
|
|
1532
|
+
return runner.executeCommand(command)
|
|
1531
1533
|
}
|
|
1532
1534
|
func gitCommit(path: String,
|
|
1533
1535
|
message: String) {
|
|
@@ -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() {
|
|
Binary file
|
|
Binary file
|
|
@@ -20,7 +20,7 @@ module FastlaneCore
|
|
|
20
20
|
app_id_guesser = FastlaneCore::AppIdentifierGuesser.new(args: args)
|
|
21
21
|
return self.new(
|
|
22
22
|
action_name: action_name,
|
|
23
|
-
p_hash: app_id_guesser.p_hash,
|
|
23
|
+
p_hash: app_id_guesser.p_hash || UNKNOWN_P_HASH,
|
|
24
24
|
platform: app_id_guesser.platform,
|
|
25
25
|
configuration_language: configuration_language
|
|
26
26
|
)
|
|
@@ -163,14 +163,9 @@ module FastlaneCore
|
|
|
163
163
|
|
|
164
164
|
self.config_file_name = config_file_name
|
|
165
165
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
paths += Dir["./.fastlane/#{self.config_file_name}"]
|
|
169
|
-
paths += Dir["./#{self.config_file_name}"]
|
|
170
|
-
paths += Dir["./fastlane_core/spec/fixtures/#{self.config_file_name}"] if Helper.is_test?
|
|
171
|
-
return if paths.count == 0
|
|
166
|
+
path = FastlaneCore::Configuration.find_configuration_file_path(config_file_name: config_file_name)
|
|
167
|
+
return if path.nil?
|
|
172
168
|
|
|
173
|
-
path = paths.first
|
|
174
169
|
begin
|
|
175
170
|
configuration_file = ConfigurationFile.new(self, path, block_for_missing, skip_printing_values)
|
|
176
171
|
options = configuration_file.options
|
|
@@ -196,6 +191,16 @@ module FastlaneCore
|
|
|
196
191
|
configuration_file
|
|
197
192
|
end
|
|
198
193
|
|
|
194
|
+
def self.find_configuration_file_path(config_file_name: nil)
|
|
195
|
+
paths = []
|
|
196
|
+
paths += Dir["./fastlane/#{config_file_name}"]
|
|
197
|
+
paths += Dir["./.fastlane/#{config_file_name}"]
|
|
198
|
+
paths += Dir["./#{config_file_name}"]
|
|
199
|
+
paths += Dir["./fastlane_core/spec/fixtures/#{config_file_name}"] if Helper.is_test?
|
|
200
|
+
return nil if paths.count == 0
|
|
201
|
+
return paths.first
|
|
202
|
+
end
|
|
203
|
+
|
|
199
204
|
#####################################################
|
|
200
205
|
# @!group Actually using the class
|
|
201
206
|
#####################################################
|
|
@@ -141,7 +141,7 @@ module FastlaneCore
|
|
|
141
141
|
# @return the full path to the Xcode developer tools of the currently
|
|
142
142
|
# running system
|
|
143
143
|
def self.xcode_path
|
|
144
|
-
return ""
|
|
144
|
+
return "" unless self.is_mac?
|
|
145
145
|
`xcode-select -p`.delete("\n") + "/"
|
|
146
146
|
end
|
|
147
147
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module FastlaneCore
|
|
2
2
|
class IOSAppIdentifierGuesser
|
|
3
|
+
APP_ID_REGEX = /var\s*appIdentifier:\s*String\?{0,1}\s*\[?\]?\s*{\s*return\s*\[?\s*"(\s*[a-zA-Z.-]+\s*)"\s*\]?\s*}/
|
|
3
4
|
class << self
|
|
4
5
|
def guess_app_identifier_from_args(args)
|
|
5
6
|
# args example: ["-a", "com.krausefx.app", "--team_id", "5AA97AAHK2"]
|
|
@@ -24,7 +25,7 @@ module FastlaneCore
|
|
|
24
25
|
CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
|
|
25
26
|
end
|
|
26
27
|
|
|
27
|
-
def
|
|
28
|
+
def fetch_app_identifier_from_ruby_file(file_name)
|
|
28
29
|
# we only care about the app_identifier item in the configuration file, so
|
|
29
30
|
# build an options array & Configuration with just that one key and it will
|
|
30
31
|
# be fetched if it is present in the config file
|
|
@@ -41,12 +42,52 @@ module FastlaneCore
|
|
|
41
42
|
nil
|
|
42
43
|
end
|
|
43
44
|
|
|
45
|
+
def fetch_app_identifier_from_swift_file(file_name)
|
|
46
|
+
swift_config_file_path = FastlaneCore::Configuration.find_configuration_file_path(config_file_name: file_name)
|
|
47
|
+
return nil if swift_config_file_path.nil?
|
|
48
|
+
|
|
49
|
+
# Deliverfile.swift, Snapfile.swift, Appfile.swift all look like:
|
|
50
|
+
# var appIdentifier: String? { return nil }
|
|
51
|
+
# var appIdentifier: String { return "" }
|
|
52
|
+
|
|
53
|
+
# Matchfile.swift is the odd one out
|
|
54
|
+
# var appIdentifier: [String] { return [] }
|
|
55
|
+
#
|
|
56
|
+
|
|
57
|
+
swift_config_file_path = File.expand_path(swift_config_file_path)
|
|
58
|
+
swift_config_content = File.read(swift_config_file_path)
|
|
59
|
+
|
|
60
|
+
swift_config_content.split("\n").reject(&:empty?).each do |line|
|
|
61
|
+
application_id = match_swift_application_id(text_line: line)
|
|
62
|
+
return application_id if application_id
|
|
63
|
+
end
|
|
64
|
+
return nil
|
|
65
|
+
rescue
|
|
66
|
+
# any option/file error here should just be treated as identifier not found
|
|
67
|
+
return nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def match_swift_application_id(text_line: nil)
|
|
71
|
+
text_line.strip!
|
|
72
|
+
application_id_match = APP_ID_REGEX.match(text_line)
|
|
73
|
+
return application_id_match[1].strip if application_id_match
|
|
74
|
+
|
|
75
|
+
return nil
|
|
76
|
+
end
|
|
77
|
+
|
|
44
78
|
def guess_app_identifier_from_config_files
|
|
45
79
|
["Deliverfile", "Gymfile", "Snapfile", "Matchfile"].each do |current|
|
|
46
|
-
app_identifier = self.
|
|
80
|
+
app_identifier = self.fetch_app_identifier_from_ruby_file(current)
|
|
47
81
|
return app_identifier if app_identifier
|
|
48
82
|
end
|
|
49
|
-
|
|
83
|
+
|
|
84
|
+
# if we're swifty, let's look there
|
|
85
|
+
# this isn't the same list as above
|
|
86
|
+
["Deliverfile.swift", "Snapfile.swift", "Appfile.swift", "Matchfile.swift"].each do |current|
|
|
87
|
+
app_identifier = self.fetch_app_identifier_from_swift_file(current)
|
|
88
|
+
return app_identifier if app_identifier
|
|
89
|
+
end
|
|
90
|
+
return nil
|
|
50
91
|
end
|
|
51
92
|
|
|
52
93
|
# make a best-guess for the app_identifier for this project, using most-reliable signals
|
|
@@ -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/en-US/images/featureGraphic.png`")
|
|
48
48
|
next
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -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.70.
|
|
4
|
+
version: 2.70.2
|
|
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-20 00:00:00.000000000 Z
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: slack-notifier
|
|
@@ -830,7 +830,6 @@ files:
|
|
|
830
830
|
- deliver/lib/deliver/upload_screenshots.rb
|
|
831
831
|
- fastlane/README.md
|
|
832
832
|
- fastlane/lib/.DS_Store
|
|
833
|
-
- fastlane/lib/assets/.DS_Store
|
|
834
833
|
- fastlane/lib/assets/ActionDetails.md.erb
|
|
835
834
|
- fastlane/lib/assets/Actions.md.erb
|
|
836
835
|
- fastlane/lib/assets/AppfileTemplate
|
|
@@ -906,7 +905,6 @@ files:
|
|
|
906
905
|
- fastlane/lib/fastlane/actions/deliver.rb
|
|
907
906
|
- fastlane/lib/fastlane/actions/deploygate.rb
|
|
908
907
|
- fastlane/lib/fastlane/actions/device_grid/README.md
|
|
909
|
-
- fastlane/lib/fastlane/actions/docs/.DS_Store
|
|
910
908
|
- fastlane/lib/fastlane/actions/docs/cert.md
|
|
911
909
|
- fastlane/lib/fastlane/actions/docs/deliver.md
|
|
912
910
|
- fastlane/lib/fastlane/actions/docs/frameit.md
|
|
@@ -1090,6 +1088,7 @@ files:
|
|
|
1090
1088
|
- fastlane/lib/fastlane/fast_file.rb
|
|
1091
1089
|
- fastlane/lib/fastlane/fastlane_require.rb
|
|
1092
1090
|
- fastlane/lib/fastlane/features.rb
|
|
1091
|
+
- fastlane/lib/fastlane/helper/.DS_Store
|
|
1093
1092
|
- fastlane/lib/fastlane/helper/README.md
|
|
1094
1093
|
- fastlane/lib/fastlane/helper/adb_helper.rb
|
|
1095
1094
|
- fastlane/lib/fastlane/helper/cocoapod_helper.rb
|
|
@@ -1188,8 +1187,10 @@ files:
|
|
|
1188
1187
|
- fastlane/swift/SocketResponse.swift
|
|
1189
1188
|
- fastlane/swift/main.swift
|
|
1190
1189
|
- fastlane_core/README.md
|
|
1190
|
+
- fastlane_core/lib/.DS_Store
|
|
1191
1191
|
- fastlane_core/lib/assets/XMLTemplate.xml.erb
|
|
1192
1192
|
- fastlane_core/lib/fastlane_core.rb
|
|
1193
|
+
- fastlane_core/lib/fastlane_core/.DS_Store
|
|
1193
1194
|
- fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb
|
|
1194
1195
|
- fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb
|
|
1195
1196
|
- fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb
|
|
@@ -1561,7 +1562,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
1561
1562
|
version: '0'
|
|
1562
1563
|
requirements: []
|
|
1563
1564
|
rubyforge_project:
|
|
1564
|
-
rubygems_version: 2.6.
|
|
1565
|
+
rubygems_version: 2.6.8
|
|
1565
1566
|
signing_key:
|
|
1566
1567
|
specification_version: 4
|
|
1567
1568
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|