fastlane 2.114.0.beta.20190115200110 → 2.114.0.beta.20190116200018
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +26 -5
- data/fastlane/lib/fastlane/actions/increment_version_number.rb +13 -8
- data/fastlane/lib/fastlane/actions/prompt.rb +12 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +24 -18
- data/scan/lib/scan/options.rb +7 -0
- data/scan/lib/scan/runner.rb +5 -1
- data/sigh/lib/sigh/resign.rb +19 -3
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +3 -1
- data/supply/lib/supply/options.rb +11 -1
- data/supply/lib/supply/uploader.rb +2 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8823faa01f6b91b8f1d75874a92e31c24e5baf7b
|
4
|
+
data.tar.gz: 798b9258cdccc86dd157343f01948b7b64329a01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb89b5429909549a65ad93a6f2192de69a1d33834ffb3260d413adde31da4e1b072a72953a4b35938b97c19982d0afdef08e04bcdc98c9bfc2931abf8e341107
|
7
|
+
data.tar.gz: 7f60cd65995378cb001435f2a6202f45ce800b52d4607fe0b738b7be4aa45741d7100edf57537db568c1cccba18953612d0afae6328916840728d915a54cf722
|
@@ -25,6 +25,7 @@ module Fastlane
|
|
25
25
|
build_number = params[:build_number]
|
26
26
|
platform = params[:platform]
|
27
27
|
output_directory = params[:output_directory]
|
28
|
+
min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
|
28
29
|
|
29
30
|
# Set version if it is latest
|
30
31
|
if version == 'latest'
|
@@ -51,21 +52,35 @@ module Fastlane
|
|
51
52
|
UI.message(message.join(" "))
|
52
53
|
|
53
54
|
app.tunes_all_build_trains(platform: platform).each do |train|
|
54
|
-
|
55
|
+
message = []
|
56
|
+
message << "Found train (version): #{train.version_string}"
|
57
|
+
message << ", comparing to supplied version: #{version}" if version
|
58
|
+
UI.verbose(message.join(" "))
|
59
|
+
|
55
60
|
if version && version != train.version_string
|
56
61
|
UI.verbose("Version #{version} doesn't match: #{train.version_string}")
|
57
62
|
next
|
58
63
|
end
|
64
|
+
|
65
|
+
if min_version && min_version > Gem::Version.new(train.version_string)
|
66
|
+
UI.verbose("Min version #{min_version} not reached: #{train.version_string}")
|
67
|
+
next
|
68
|
+
end
|
69
|
+
|
59
70
|
app.tunes_all_builds_for_train(train: train.version_string, platform: platform).each do |build|
|
60
|
-
|
71
|
+
message = []
|
72
|
+
message << "Found build version: #{build.build_version}"
|
73
|
+
message << ", comparing to supplied build_number: #{build_number}" if build_number
|
74
|
+
UI.verbose(message.join(" "))
|
75
|
+
|
61
76
|
if build_number && build.build_version != build_number
|
62
77
|
UI.verbose("build_version: #{build.build_version} doesn't match: #{build_number}")
|
63
78
|
next
|
64
79
|
end
|
65
80
|
|
66
81
|
begin
|
67
|
-
#
|
68
|
-
|
82
|
+
UI.verbose("Build_version: #{build.build_version} matches #{build_number}, grabbing dsym_url") if build_number
|
83
|
+
|
69
84
|
build_details = app.tunes_build_details(train: train.version_string, build_number: build.build_version, platform: platform)
|
70
85
|
download_url = build_details.dsym_url
|
71
86
|
UI.verbose("dsym_url: #{download_url}")
|
@@ -207,6 +222,11 @@ module Fastlane
|
|
207
222
|
env_name: "DOWNLOAD_DSYMS_BUILD_NUMBER",
|
208
223
|
description: "The app build_number for dSYMs you wish to download",
|
209
224
|
optional: true),
|
225
|
+
FastlaneCore::ConfigItem.new(key: :min_version,
|
226
|
+
short_option: "-m",
|
227
|
+
env_name: "DOWNLOAD_DSYMS_MIN_VERSION",
|
228
|
+
description: "The minimum app version for dSYMs you wish to download",
|
229
|
+
optional: true),
|
210
230
|
FastlaneCore::ConfigItem.new(key: :output_directory,
|
211
231
|
short_option: "-s",
|
212
232
|
env_name: "DOWNLOAD_DSYMS_OUTPUT_DIRECTORY",
|
@@ -236,7 +256,8 @@ module Fastlane
|
|
236
256
|
def self.example_code
|
237
257
|
[
|
238
258
|
'download_dsyms',
|
239
|
-
'download_dsyms(version: "1.0.0", build_number: "345")'
|
259
|
+
'download_dsyms(version: "1.0.0", build_number: "345")',
|
260
|
+
'download_dsyms(min_version: "1.2.3")'
|
240
261
|
]
|
241
262
|
end
|
242
263
|
|
@@ -23,20 +23,25 @@ module Fastlane
|
|
23
23
|
'&&'
|
24
24
|
].join(' ')
|
25
25
|
|
26
|
-
|
26
|
+
begin
|
27
|
+
current_version = Actions
|
28
|
+
.sh("#{command_prefix} agvtool what-marketing-version -terse1", log: FastlaneCore::Globals.verbose?)
|
29
|
+
.split("\n")
|
30
|
+
.last
|
31
|
+
.strip
|
32
|
+
rescue
|
33
|
+
current_version = ''
|
34
|
+
end
|
27
35
|
|
36
|
+
version_regex = /^\d+\.\d+\.\d+$/
|
28
37
|
if params[:version_number]
|
29
|
-
UI.verbose("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~
|
38
|
+
UI.verbose("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ version_regex
|
30
39
|
|
31
40
|
# Specific version
|
32
41
|
next_version_number = params[:version_number]
|
33
42
|
else
|
34
|
-
|
35
|
-
|
36
|
-
else
|
37
|
-
UI.user_error!("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ /\d+.\d+.\d+/
|
38
|
-
version_array = current_version.split(".").map(&:to_i)
|
39
|
-
end
|
43
|
+
UI.user_error!("Your current version (#{current_version}) does not respect the format A.B.C") unless current_version =~ version_regex
|
44
|
+
version_array = current_version.split(".").map(&:to_i)
|
40
45
|
|
41
46
|
case params[:bump_type]
|
42
47
|
when "patch"
|
@@ -15,7 +15,18 @@ module Fastlane
|
|
15
15
|
# Multi line
|
16
16
|
end_tag = params[:multi_line_end_keyword]
|
17
17
|
UI.important("Submit inputs using \"#{params[:multi_line_end_keyword]}\"")
|
18
|
-
user_input =
|
18
|
+
user_input = ""
|
19
|
+
loop do
|
20
|
+
line = STDIN.gets
|
21
|
+
end_tag_index = line.index(end_tag)
|
22
|
+
if end_tag_index.nil?
|
23
|
+
user_input << line
|
24
|
+
else
|
25
|
+
user_input << line.slice(0, end_tag_index)
|
26
|
+
user_input = user_input.strip
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
19
30
|
else
|
20
31
|
# Standard one line input
|
21
32
|
if params[:secure_text]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.114.0.beta.
|
2
|
+
VERSION = '2.114.0.beta.20190116200018'.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
|
@@ -10,7 +10,7 @@ module FastlaneCore
|
|
10
10
|
command << " -P #{certificate_password.shellescape}"
|
11
11
|
command << " -T /usr/bin/codesign" # to not be asked for permission when running a tool like `gym` (before Sierra)
|
12
12
|
command << " -T /usr/bin/security"
|
13
|
-
command << "
|
13
|
+
command << " 1> /dev/null" unless output
|
14
14
|
|
15
15
|
Helper.backticks(command, print: output)
|
16
16
|
|
@@ -19,31 +19,37 @@ module FastlaneCore
|
|
19
19
|
if Helper.backticks('security -h | grep set-key-partition-list', print: false).length > 0
|
20
20
|
command = "security set-key-partition-list"
|
21
21
|
command << " -S apple-tool:,apple:"
|
22
|
-
command << " -l 'Imported Private Key'"
|
23
22
|
command << " -k #{keychain_password.to_s.shellescape}"
|
24
23
|
command << " #{keychain_path.shellescape}"
|
25
|
-
command << "
|
24
|
+
command << " 1> /dev/null" # always disable stdout. This can be very verbose, and leak potentially sensitive info
|
25
|
+
|
26
|
+
# Showing loading indicator as this can take some time if a lot of keys installed
|
27
|
+
Helper.show_loading_indicator("Setting key partition list... (this can take a minute if there are a lot of keys installed)")
|
26
28
|
|
27
29
|
UI.command(command) if output
|
28
30
|
Open3.popen3(command) do |stdin, stdout, stderr, thrd|
|
29
|
-
if output
|
30
|
-
Helper.show_loading_indicator("Importing keys...")
|
31
|
-
UI.command(command)
|
32
|
-
UI.command_output(stdout.read)
|
33
|
-
Helper.hide_loading_indicator
|
34
|
-
end
|
35
|
-
|
36
31
|
unless thrd.value.success?
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
32
|
+
err = stderr.read.to_s.strip
|
33
|
+
|
34
|
+
# Inform user when no/wrong password was used as its needed to prevent UI permission popup from Xcode when signing
|
35
|
+
if err.include?("SecKeychainItemSetAccessWithPassword")
|
36
|
+
UI.error("")
|
37
|
+
UI.error("Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing\n" \
|
38
|
+
"Check if you supplied the correct `keychain_password` for keychain: `#{keychain_path}`\n" \
|
39
|
+
"#{err}")
|
40
|
+
UI.error("")
|
41
|
+
UI.error("Please look at the following docs to see how to set a keychain password:")
|
42
|
+
UI.error(" - https://docs.fastlane.tools/actions/sync_code_signing")
|
43
|
+
UI.error(" - https://docs.fastlane.tools/actions/get_certificates")
|
44
|
+
else
|
45
|
+
UI.error(err)
|
46
|
+
end
|
45
47
|
end
|
46
48
|
end
|
49
|
+
|
50
|
+
# Hiding after Open3 finishes
|
51
|
+
Helper.hide_loading_indicator
|
52
|
+
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
data/scan/lib/scan/options.rb
CHANGED
@@ -69,6 +69,13 @@ module Scan
|
|
69
69
|
type: Boolean,
|
70
70
|
optional: true),
|
71
71
|
|
72
|
+
# reset simulator
|
73
|
+
FastlaneCore::ConfigItem.new(key: :reset_simulator,
|
74
|
+
env_name: 'SCAN_RESET_SIMULATOR',
|
75
|
+
description: "Enabling this option will automatically erase the simulator before running the application",
|
76
|
+
default_value: false,
|
77
|
+
type: Boolean),
|
78
|
+
|
72
79
|
# reinstall app
|
73
80
|
FastlaneCore::ConfigItem.new(key: :reinstall_app,
|
74
81
|
env_name: 'SCAN_REINSTALL_APP',
|
data/scan/lib/scan/runner.rb
CHANGED
@@ -40,7 +40,11 @@ module Scan
|
|
40
40
|
]
|
41
41
|
exit_status = 0
|
42
42
|
|
43
|
-
if Scan.config[:
|
43
|
+
if Scan.config[:reset_simulator]
|
44
|
+
Scan.devices.each do |device|
|
45
|
+
FastlaneCore::Simulator.reset(udid: device.udid)
|
46
|
+
end
|
47
|
+
elsif Scan.config[:reinstall_app]
|
44
48
|
app_identifier = Scan.config[:app_identifier]
|
45
49
|
app_identifier ||= UI.input("App Identifier: ")
|
46
50
|
|
data/sigh/lib/sigh/resign.rb
CHANGED
@@ -21,6 +21,19 @@ module Sigh
|
|
21
21
|
|
22
22
|
def resign(ipa, signing_identity, provisioning_profiles, entitlements, version, display_name, short_version, bundle_version, new_bundle_id, use_app_entitlements, keychain_path)
|
23
23
|
resign_path = find_resign_path
|
24
|
+
|
25
|
+
if keychain_path
|
26
|
+
keychain_path_absolute = File.expand_path(keychain_path)
|
27
|
+
|
28
|
+
current_keychains = `security list-keychains`
|
29
|
+
current_keychains.delete!("\n")
|
30
|
+
|
31
|
+
unless current_keychains.include?(keychain_path_absolute)
|
32
|
+
previous_keychains = current_keychains
|
33
|
+
`security list-keychains -s #{current_keychains} '#{keychain_path_absolute}'`
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
24
37
|
signing_identity = find_signing_identity(signing_identity)
|
25
38
|
|
26
39
|
unless provisioning_profiles.kind_of?(Enumerable)
|
@@ -68,6 +81,8 @@ module Sigh
|
|
68
81
|
UI.error("Something went wrong while code signing #{ipa}")
|
69
82
|
false
|
70
83
|
end
|
84
|
+
ensure
|
85
|
+
`security list-keychains -s #{previous_keychains}` if previous_keychains
|
71
86
|
end
|
72
87
|
|
73
88
|
def get_inputs(options, args)
|
@@ -103,9 +118,10 @@ module Sigh
|
|
103
118
|
end
|
104
119
|
|
105
120
|
def find_signing_identity(signing_identity)
|
106
|
-
|
107
|
-
|
108
|
-
|
121
|
+
signing_identity_input = signing_identity
|
122
|
+
until (signing_identity = sha1_for_signing_identity(signing_identity_input))
|
123
|
+
UI.error("Couldn't find signing identity '#{signing_identity_input}'.")
|
124
|
+
signing_identity_input = ask_for_signing_identity
|
109
125
|
end
|
110
126
|
|
111
127
|
signing_identity
|
@@ -42,7 +42,9 @@ module Snapshot
|
|
42
42
|
|
43
43
|
launch_arguments = Array(snapshot_config[:launch_arguments])
|
44
44
|
# if more than 1 set of arguments, use a tuple with an index
|
45
|
-
if launch_arguments.count ==
|
45
|
+
if launch_arguments.count == 0
|
46
|
+
@launch_args_set = [[""]]
|
47
|
+
elsif launch_arguments.count == 1
|
46
48
|
@launch_args_set = [launch_arguments]
|
47
49
|
else
|
48
50
|
@launch_args_set = launch_arguments.map.with_index { |e, i| [i, e] }
|
@@ -228,7 +228,17 @@ module Supply
|
|
228
228
|
optional: true,
|
229
229
|
description: "When promoting to a new track, deactivate the binary in the origin track",
|
230
230
|
is_string: false,
|
231
|
-
default_value: true)
|
231
|
+
default_value: true),
|
232
|
+
FastlaneCore::ConfigItem.new(key: :version_codes_to_retain,
|
233
|
+
optional: true,
|
234
|
+
type: Array,
|
235
|
+
description: "An array of version codes to retain when publishing a new APK",
|
236
|
+
verify_block: proc do |version_codes|
|
237
|
+
UI.user_error!("Could not evaluate array from '#{version_codes}'") unless version_codes.kind_of?(Array)
|
238
|
+
version_codes.each do |version_code|
|
239
|
+
UI.user_error!("Version code '#{version_code}' is not an integer") unless version_code.kind_of?(Integer)
|
240
|
+
end
|
241
|
+
end)
|
232
242
|
]
|
233
243
|
end
|
234
244
|
# rubocop:enable Metrics/PerceivedComplexity
|
@@ -28,6 +28,8 @@ module Supply
|
|
28
28
|
apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
|
29
29
|
upload_mapping(apk_version_codes)
|
30
30
|
|
31
|
+
apk_version_codes.concat(Supply.config[:version_codes_to_retain]) if Supply.config[:version_codes_to_retain]
|
32
|
+
|
31
33
|
# Only update tracks if we have version codes
|
32
34
|
# Updating a track with empty version codes can completely clear out a track
|
33
35
|
update_track(apk_version_codes) unless apk_version_codes.empty?
|
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.114.0.beta.
|
4
|
+
version: 2.114.0.beta.20190116200018
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Natchev
|
@@ -27,7 +27,7 @@ authors:
|
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2019-01-
|
30
|
+
date: 2019-01-16 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -1683,23 +1683,23 @@ post_install_message:
|
|
1683
1683
|
rdoc_options: []
|
1684
1684
|
require_paths:
|
1685
1685
|
- frameit/lib
|
1686
|
-
-
|
1686
|
+
- pilot/lib
|
1687
|
+
- fastlane/lib
|
1688
|
+
- snapshot/lib
|
1687
1689
|
- gym/lib
|
1688
|
-
-
|
1690
|
+
- precheck/lib
|
1691
|
+
- scan/lib
|
1692
|
+
- pem/lib
|
1689
1693
|
- produce/lib
|
1690
|
-
-
|
1691
|
-
- sigh/lib
|
1692
|
-
- screengrab/lib
|
1693
|
-
- pilot/lib
|
1694
|
+
- spaceship/lib
|
1694
1695
|
- fastlane_core/lib
|
1695
1696
|
- supply/lib
|
1697
|
+
- deliver/lib
|
1698
|
+
- credentials_manager/lib
|
1696
1699
|
- match/lib
|
1697
|
-
-
|
1700
|
+
- screengrab/lib
|
1701
|
+
- sigh/lib
|
1698
1702
|
- cert/lib
|
1699
|
-
- scan/lib
|
1700
|
-
- spaceship/lib
|
1701
|
-
- pem/lib
|
1702
|
-
- credentials_manager/lib
|
1703
1703
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1704
1704
|
requirements:
|
1705
1705
|
- - ">="
|