fastlane 2.86.0.beta.20180316050051 → 2.86.0.beta.20180317050040
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/credentials_manager/lib/credentials_manager/appfile_config.rb +1 -1
- data/deliver/lib/deliver/app_screenshot.rb +4 -4
- data/deliver/lib/deliver/commands_generator.rb +1 -1
- data/deliver/lib/deliver/options.rb +5 -0
- data/deliver/lib/deliver/runner.rb +9 -1
- data/deliver/lib/deliver/submit_for_review.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +8 -2
- data/fastlane/lib/fastlane/actions/badge.rb +1 -1
- data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +18 -15
- data/fastlane/lib/fastlane/actions/get_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +68 -84
- data/fastlane/lib/fastlane/actions/hockey.rb +4 -4
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/installr.rb +1 -1
- data/fastlane/lib/fastlane/actions/oclint.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +1 -1
- data/fastlane/lib/fastlane/actions/sonar.rb +1 -1
- data/fastlane/lib/fastlane/actions/swiftlint.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +1 -1
- data/fastlane/lib/fastlane/actions/tryouts.rb +2 -2
- data/fastlane/lib/fastlane/actions/typetalk.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_info_plist.rb +2 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +2 -2
- data/fastlane/lib/fastlane/actions/verify_xcode.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +1 -1
- data/fastlane/lib/fastlane/configuration_helper.rb +1 -1
- data/fastlane/lib/fastlane/lane_manager.rb +4 -4
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -1
- data/fastlane/lib/fastlane/runner.rb +2 -2
- data/fastlane/lib/fastlane/server/socket_server.rb +17 -3
- data/fastlane/lib/fastlane/setup/setup.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -4
- data/fastlane/lib/fastlane/swift_lane_manager.rb +2 -2
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/command_executor.rb +1 -1
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -5
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -1
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +2 -2
- data/fastlane_core/lib/fastlane_core/project.rb +6 -5
- data/fastlane_core/lib/fastlane_core/tool_collector.rb +1 -1
- data/frameit/lib/frameit/editor.rb +2 -2
- data/gym/lib/gym/generators/build_command_generator.rb +0 -1
- data/match/lib/match/git_helper.rb +1 -1
- data/match/lib/match/options.rb +1 -1
- data/match/lib/match/runner.rb +3 -3
- data/pilot/lib/pilot/build_manager.rb +3 -3
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +0 -1
- data/scan/lib/scan/test_result_parser.rb +1 -1
- data/sigh/lib/sigh/runner.rb +1 -1
- data/snapshot/lib/snapshot/options.rb +8 -0
- data/snapshot/lib/snapshot/runner.rb +1 -1
- data/snapshot/lib/snapshot/test_command_generator.rb +28 -1
- data/spaceship/lib/spaceship/client.rb +4 -4
- data/spaceship/lib/spaceship/du/du_client.rb +1 -1
- data/spaceship/lib/spaceship/launcher.rb +1 -1
- data/spaceship/lib/spaceship/portal/provisioning_profile.rb +4 -4
- data/spaceship/lib/spaceship/tunes/application.rb +34 -0
- data/spaceship/lib/spaceship/tunes/build_train.rb +1 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -4
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da2c95e01cab5bb5882134041dd36ddc2032ec65
|
4
|
+
data.tar.gz: 4fda933db2786f9093f4706793e5ae11e817a8e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04611c3cebac2bed102627c2c3cdf6623193ec4bc944903076236a349b589e62b706d0947cd5b200b070b2e686e6297ebfd5734e75a7e947ffcf5cc724d89571
|
7
|
+
data.tar.gz: ff99f8a53d0ad99e2d41f77f1f93ba3ae399b69c5c02a8a243252dd573e7a041ca93d0974d8ef9e59f28f6de2265319e70237192ac29fcf57b220fbf68ccac20
|
@@ -29,7 +29,7 @@ module CredentialsManager
|
|
29
29
|
|
30
30
|
path ||= self.class.default_path
|
31
31
|
|
32
|
-
if path
|
32
|
+
if path && File.exist?(path) # it might not exist, we still want to use the default values
|
33
33
|
full_path = File.expand_path(path)
|
34
34
|
Dir.chdir(File.expand_path('..', path)) do
|
35
35
|
content = File.read(full_path, encoding: "utf-8")
|
@@ -232,7 +232,7 @@ module Deliver
|
|
232
232
|
def self.calculate_screen_size(path)
|
233
233
|
size = FastImage.size(path)
|
234
234
|
|
235
|
-
UI.user_error!("Could not find or parse file at path '#{path}'") if size.nil?
|
235
|
+
UI.user_error!("Could not find or parse file at path '#{path}'") if size.nil? || size.count == 0
|
236
236
|
|
237
237
|
# Walk up two directories and test if we need to handle a platform that doesn't support landscape
|
238
238
|
path_component = Pathname.new(path).each_filename.to_a[-3]
|
@@ -246,12 +246,12 @@ module Deliver
|
|
246
246
|
devices.each do |device_type, array|
|
247
247
|
array.each do |resolution|
|
248
248
|
if skip_landscape
|
249
|
-
if size[0] == resolution[0]
|
249
|
+
if size[0] == (resolution[0]) && size[1] == (resolution[1]) # portrait
|
250
250
|
return device_type
|
251
251
|
end
|
252
252
|
else
|
253
|
-
if (size[0] == resolution[0]
|
254
|
-
(size[1] == resolution[0]
|
253
|
+
if (size[0] == (resolution[0]) && size[1] == (resolution[1])) || # portrait
|
254
|
+
(size[1] == (resolution[0]) && size[0] == (resolution[1])) # landscape
|
255
255
|
return device_type
|
256
256
|
end
|
257
257
|
end
|
@@ -102,7 +102,7 @@ module Deliver
|
|
102
102
|
FastlaneCore::CommanderGenerator.new.generate(deliverfile_options, command: c)
|
103
103
|
|
104
104
|
c.action do |args, options|
|
105
|
-
if File.exist?("Deliverfile")
|
105
|
+
if File.exist?("Deliverfile") || File.exist?("fastlane/Deliverfile")
|
106
106
|
UI.important("You already have a running deliver setup in this directory")
|
107
107
|
return 0
|
108
108
|
end
|
@@ -122,6 +122,11 @@ module Deliver
|
|
122
122
|
description: "Submit the new version for Review after uploading everything",
|
123
123
|
is_string: false,
|
124
124
|
default_value: false),
|
125
|
+
FastlaneCore::ConfigItem.new(key: :reject_if_possible,
|
126
|
+
env_name: "DELIVER_REJECT_IF_POSSIBLE",
|
127
|
+
description: "Rejects the previously submitted build if it's in a state where it's possible",
|
128
|
+
is_string: false,
|
129
|
+
default_value: false),
|
125
130
|
FastlaneCore::ConfigItem.new(key: :automatic_release,
|
126
131
|
description: "Should the app be automatically released once it's approved?",
|
127
132
|
is_string: false,
|
@@ -44,8 +44,9 @@ module Deliver
|
|
44
44
|
|
45
45
|
UI.success("Finished the upload to iTunes Connect") unless options[:skip_binary_upload]
|
46
46
|
|
47
|
-
|
47
|
+
reject_version_if_possible if options[:reject_if_possible]
|
48
48
|
|
49
|
+
precheck_success = precheck_app
|
49
50
|
submit_for_review if options[:submit_for_review] && precheck_success
|
50
51
|
end
|
51
52
|
|
@@ -160,6 +161,13 @@ module Deliver
|
|
160
161
|
UI.user_error!("Could not upload binary to iTunes Connect. Check out the error above", show_github_issues: true) unless result
|
161
162
|
end
|
162
163
|
|
164
|
+
def reject_version_if_possible
|
165
|
+
app = options[:app]
|
166
|
+
if app.reject_version_if_possible!
|
167
|
+
UI.success("Successfully rejected previous version!")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
163
171
|
def submit_for_review
|
164
172
|
SubmitForReview.new.submit!(options)
|
165
173
|
end
|
@@ -33,7 +33,7 @@ module Deliver
|
|
33
33
|
app = options[:app]
|
34
34
|
v = app.edit_version
|
35
35
|
|
36
|
-
if options[:build_number]
|
36
|
+
if options[:build_number] && options[:build_number] != "latest"
|
37
37
|
UI.message("Selecting existing build-number: #{options[:build_number]}")
|
38
38
|
build = v.candidate_builds.detect { |a| a.build_version == options[:build_number] }
|
39
39
|
unless build
|
@@ -24,7 +24,8 @@ module Fastlane
|
|
24
24
|
unless version_number
|
25
25
|
# Automatically fetch the latest version in testflight
|
26
26
|
begin
|
27
|
-
|
27
|
+
train_numbers = app.all_build_train_numbers(platform: platform)
|
28
|
+
testflight_version = self.order_versions(train_numbers).last
|
28
29
|
rescue
|
29
30
|
testflight_version = params[:version]
|
30
31
|
end
|
@@ -40,7 +41,8 @@ module Fastlane
|
|
40
41
|
UI.message("Fetching the latest build number for version #{version_number}")
|
41
42
|
|
42
43
|
begin
|
43
|
-
|
44
|
+
build_numbers = app.all_builds_for_train(train: version_number, platform: platform).map(&:build_version)
|
45
|
+
build_nr = self.order_versions(build_numbers).last
|
44
46
|
if build_nr.nil? && params[:initial_build_number]
|
45
47
|
UI.message("Could not find a build on iTC. Using supplied 'initial_build_number' option")
|
46
48
|
build_nr = params[:initial_build_number]
|
@@ -54,6 +56,10 @@ module Fastlane
|
|
54
56
|
Actions.lane_context[SharedValues::LATEST_BUILD_NUMBER] = build_nr
|
55
57
|
end
|
56
58
|
|
59
|
+
def self.order_versions(versions)
|
60
|
+
versions.map(&:to_s).sort_by { |v| Gem::Version.new(v) }
|
61
|
+
end
|
62
|
+
|
57
63
|
#####################################################
|
58
64
|
# @!group Documentation
|
59
65
|
#####################################################
|
@@ -74,7 +74,7 @@ module Fastlane
|
|
74
74
|
description: "Add your custom overlay/badge image",
|
75
75
|
optional: true,
|
76
76
|
verify_block: proc do |value|
|
77
|
-
UI.user_error!("custom should be a valid file path") unless value
|
77
|
+
UI.user_error!("custom should be a valid file path") unless value && File.exist?(value)
|
78
78
|
end),
|
79
79
|
FastlaneCore::ConfigItem.new(key: :no_badge,
|
80
80
|
env_name: "FL_BADGE_NO_BADGE",
|
@@ -64,7 +64,7 @@ module Fastlane
|
|
64
64
|
def self.available_options
|
65
65
|
platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
|
66
66
|
|
67
|
-
if platform == :ios
|
67
|
+
if platform == :ios || platform.nil?
|
68
68
|
ipa_path_default = Dir["*.ipa"].sort_by { |x| File.mtime(x) }.last
|
69
69
|
end
|
70
70
|
|
@@ -51,14 +51,13 @@ module Fastlane
|
|
51
51
|
message << "(#{build_number})" if build_number
|
52
52
|
UI.message(message.join(" "))
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
if version && version != train_number
|
54
|
+
app.tunes_all_build_trains(platform: platform).each do |train|
|
55
|
+
UI.verbose("Found train: #{train}, comparing to supplied version: #{version}")
|
56
|
+
if version && version != train.version_string
|
58
57
|
UI.verbose("Version #{version} doesn't match: #{train_number}")
|
59
58
|
next
|
60
59
|
end
|
61
|
-
app.
|
60
|
+
app.tunes_all_builds_for_train(train: train.version_string, platform: platform).each do |build|
|
62
61
|
UI.verbose("Found build version: #{build.build_version}, comparing to supplied build_number: #{build_number}")
|
63
62
|
if build_number && build.build_version != build_number
|
64
63
|
UI.verbose("build_version: #{build.build_version} doesn't match: #{build_number}")
|
@@ -68,23 +67,18 @@ module Fastlane
|
|
68
67
|
begin
|
69
68
|
# need to call reload here or dsym_url is nil
|
70
69
|
UI.verbose("Build_version: #{build.build_version} matches #{build_number}, grabbing dsym_url")
|
71
|
-
build.
|
72
|
-
download_url =
|
70
|
+
build_details = app.tunes_build_details(train: train.version_string, build_number: build.build_version, platform: platform)
|
71
|
+
download_url = build_details.dsym_url
|
73
72
|
UI.verbose("dsym_url: #{download_url}")
|
74
73
|
rescue Spaceship::TunesClient::ITunesConnectError => ex
|
75
74
|
UI.error("Error accessing dSYM file for build\n\n#{build}\n\nException: #{ex}")
|
76
75
|
end
|
77
76
|
|
78
77
|
if download_url
|
79
|
-
|
80
|
-
path = write_dsym(result, app.bundle_id, train_number, build.build_version, output_directory)
|
81
|
-
UI.success("🔑 Successfully downloaded dSYM file for #{train_number} - #{build.build_version} to '#{path}'")
|
82
|
-
|
83
|
-
Actions.lane_context[SharedValues::DSYM_PATHS] ||= []
|
84
|
-
Actions.lane_context[SharedValues::DSYM_PATHS] << File.expand_path(path)
|
78
|
+
self.download(download_url, app.bundle_id, train.version_string, build.build_version, output_directory)
|
85
79
|
break if build_number
|
86
80
|
else
|
87
|
-
UI.message("No dSYM URL for #{build.build_version} (#{
|
81
|
+
UI.message("No dSYM URL for #{build.build_version} (#{train.version_string})")
|
88
82
|
end
|
89
83
|
end
|
90
84
|
end
|
@@ -95,6 +89,15 @@ module Fastlane
|
|
95
89
|
end
|
96
90
|
# rubocop:enable Metrics/PerceivedComplexity
|
97
91
|
|
92
|
+
def self.download(download_url, bundle_id, train_number, build_version, output_directory)
|
93
|
+
result = self.download_file(download_url)
|
94
|
+
path = write_dsym(result, bundle_id, train_number, build_version, output_directory)
|
95
|
+
UI.success("🔑 Successfully downloaded dSYM file for #{train_number} - #{build_version} to '#{path}'")
|
96
|
+
|
97
|
+
Actions.lane_context[SharedValues::DSYM_PATHS] ||= []
|
98
|
+
Actions.lane_context[SharedValues::DSYM_PATHS] << File.expand_path(path)
|
99
|
+
end
|
100
|
+
|
98
101
|
def self.write_dsym(data, bundle_id, train_number, build_number, output_directory)
|
99
102
|
file_name = "#{bundle_id}-#{train_number}-#{build_number}.dSYM.zip"
|
100
103
|
if output_directory
|
@@ -104,7 +107,7 @@ module Fastlane
|
|
104
107
|
file_name
|
105
108
|
end
|
106
109
|
|
107
|
-
def self.
|
110
|
+
def self.download_file(url)
|
108
111
|
uri = URI.parse(url)
|
109
112
|
http = Net::HTTP.new(uri.host, uri.port)
|
110
113
|
http.use_ssl = (uri.scheme == "https")
|
@@ -61,7 +61,7 @@ module Fastlane
|
|
61
61
|
optional: true,
|
62
62
|
verify_block: proc do |value|
|
63
63
|
UI.user_error!("Please pass the path to the project, not the workspace") if value.end_with?(".xcworkspace")
|
64
|
-
UI.user_error!("Could not find Xcode project") if !File.exist?(value)
|
64
|
+
UI.user_error!("Could not find Xcode project") if !File.exist?(value) && !Helper.test?
|
65
65
|
end),
|
66
66
|
FastlaneCore::ConfigItem.new(key: :hide_error_when_versioning_disabled,
|
67
67
|
env_name: "FL_BUILD_NUMBER_HIDE_ERROR_WHEN_VERSIONING_DISABLED",
|
@@ -4,89 +4,79 @@ module Fastlane
|
|
4
4
|
require 'shellwords'
|
5
5
|
|
6
6
|
def self.run(params)
|
7
|
-
# More information about how to set up your project and how it works:
|
8
|
-
# https://developer.apple.com/library/ios/qa/qa1827/_index.html
|
9
|
-
|
10
7
|
folder = params[:xcodeproj] ? File.join(params[:xcodeproj], '..') : '.'
|
8
|
+
target_name = params[:target]
|
9
|
+
configuration = params[:configuration]
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
# Get version_number
|
12
|
+
project = get_project!(folder)
|
13
|
+
target = get_target!(project, target_name)
|
14
|
+
plist_file = get_plist!(folder, target, configuration)
|
15
|
+
version_number = get_version_number!(plist_file)
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
# Store the number in the shared hash
|
18
|
+
Actions.lane_context[SharedValues::VERSION_NUMBER] = version_number
|
19
|
+
|
20
|
+
# Return the version number because Swift might need this return value
|
21
|
+
return version_number
|
22
|
+
end
|
24
23
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
if Helper.test?
|
31
|
-
results = [
|
32
|
-
'$(date +%s)n /usr/libexec/Plistbuddy -c "Set CFBundleVersion $buildnum" "${plist}"n',
|
33
|
-
'"SampleProject.xcodeproj/../TargetA/TargetA-Info.plist"=4.3.2',
|
34
|
-
'"SampleProject.xcodeproj/../TargetATests/Info.plist"=4.3.2',
|
35
|
-
'"SampleProject.xcodeproj/../TargetB/TargetB-Info.plist"=5.4.3',
|
36
|
-
'"SampleProject.xcodeproj/../TargetBTests/Info.plist"=5.4.3',
|
37
|
-
'"SampleProject.xcodeproj/../SampleProject/supporting_files/TargetC_internal-Info.plist"=7.5.2',
|
38
|
-
'"SampleProject.xcodeproj/../SampleProject/supporting_files/TargetC_production-Info.plist"=6.4.9',
|
39
|
-
'"SampleProject.xcodeproj/../SampleProject_tests/Info.plist"=1.0'
|
40
|
-
]
|
24
|
+
def self.get_project!(folder)
|
25
|
+
require 'xcodeproj'
|
26
|
+
project_path = Dir.glob("#{folder}/*.xcodeproj").first
|
27
|
+
if project_path
|
28
|
+
return Xcodeproj::Project.open(project_path)
|
41
29
|
else
|
42
|
-
|
30
|
+
UI.user_error!("Unable to find Xcode project in folder: #{folder}")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.get_target!(project, target_name)
|
35
|
+
targets = project.targets
|
36
|
+
|
37
|
+
# Prompt targets if no name
|
38
|
+
unless target_name
|
39
|
+
options = targets.map(&:name)
|
40
|
+
target_name = UI.select("What target would you like to use?", options)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Find target
|
44
|
+
target = targets.find do |t|
|
45
|
+
t.name == target_name
|
43
46
|
end
|
47
|
+
UI.user_error!("Cannot find target named '#{target_name}'") unless target
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
49
|
+
target
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.get_plist!(folder, target, configuration = nil)
|
53
|
+
plist_files = target.resolved_build_setting("INFOPLIST_FILE")
|
54
|
+
plist_files_count = plist_files.values.compact.uniq.count
|
55
|
+
|
56
|
+
# Get plist file for specified configuration
|
57
|
+
# Or: Prompt for configuration if plist has different files in each configurations
|
58
|
+
# Else: Get first(only) plist value
|
59
|
+
if configuration
|
60
|
+
plist_file = plist_files[configuration]
|
61
|
+
elsif plist_files_count > 1
|
62
|
+
options = plist_files.keys
|
63
|
+
selected = UI.select("What build configuration would you like to use?", options)
|
64
|
+
plist_file = plist_files[selected]
|
56
65
|
else
|
57
|
-
|
58
|
-
# matching the specified target
|
59
|
-
scheme_string = "/#{scheme}"
|
60
|
-
target_string = "/#{target}/"
|
61
|
-
plist_target_string = "/#{target}-"
|
62
|
-
results.any? do |result|
|
63
|
-
if !target.empty?
|
64
|
-
if result.include?(target_string)
|
65
|
-
line = result
|
66
|
-
break
|
67
|
-
elsif result.include?(plist_target_string)
|
68
|
-
line = result
|
69
|
-
break
|
70
|
-
end
|
71
|
-
else
|
72
|
-
if result.include?(scheme_string)
|
73
|
-
line = result
|
74
|
-
break
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
66
|
+
plist_file = plist_files.values.first
|
78
67
|
end
|
79
68
|
|
80
|
-
|
69
|
+
plist_file = File.absolute_path(File.join(folder, plist_file))
|
70
|
+
UI.user_error!("Cannot find plist file: #{plist_file}") unless File.exist?(plist_file)
|
81
71
|
|
82
|
-
|
83
|
-
|
72
|
+
plist_file
|
73
|
+
end
|
84
74
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
75
|
+
def self.get_version_number!(plist_file)
|
76
|
+
plist = Xcodeproj::Plist.read_from_path(plist_file)
|
77
|
+
UI.user_error!("Unable to read plist: #{plist_file}") unless plist
|
78
|
+
|
79
|
+
plist["CFBundleShortVersionString"]
|
90
80
|
end
|
91
81
|
|
92
82
|
#####################################################
|
@@ -99,9 +89,7 @@ module Fastlane
|
|
99
89
|
|
100
90
|
def self.details
|
101
91
|
[
|
102
|
-
"This action will return the current version number set on your project."
|
103
|
-
"You first have to set up your Xcode project, if you haven't done it already:",
|
104
|
-
"https://developer.apple.com/library/ios/qa/qa1827/_index.html"
|
92
|
+
"This action will return the current version number set on your project."
|
105
93
|
].join(' ')
|
106
94
|
end
|
107
95
|
|
@@ -113,19 +101,15 @@ module Fastlane
|
|
113
101
|
optional: true,
|
114
102
|
verify_block: proc do |value|
|
115
103
|
UI.user_error!("Please pass the path to the project, not the workspace") if value.end_with?(".xcworkspace")
|
116
|
-
UI.user_error!("Could not find Xcode project at path '#{File.expand_path(value)}'") if !File.exist?(value)
|
104
|
+
UI.user_error!("Could not find Xcode project at path '#{File.expand_path(value)}'") if !File.exist?(value) && !Helper.test?
|
117
105
|
end),
|
118
|
-
FastlaneCore::ConfigItem.new(key: :scheme,
|
119
|
-
env_name: "FL_VERSION_NUMBER_SCHEME",
|
120
|
-
description: "Specify a specific scheme if you have multiple per project, optional. " \
|
121
|
-
"This parameter is deprecated and will be removed in a future release. " \
|
122
|
-
"Please use the 'target' parameter instead. The behavior of this parameter " \
|
123
|
-
"is currently undefined if your scheme name doesn't match your target name",
|
124
|
-
optional: true,
|
125
|
-
deprecated: true),
|
126
106
|
FastlaneCore::ConfigItem.new(key: :target,
|
127
107
|
env_name: "FL_VERSION_NUMBER_TARGET",
|
128
108
|
description: "Specify a specific target if you have multiple per project, optional",
|
109
|
+
optional: true),
|
110
|
+
FastlaneCore::ConfigItem.new(key: :configuration,
|
111
|
+
env_name: "FL_VERSION_NUMBER_CONFIGURATION",
|
112
|
+
description: "Specify a specific configuration if you have multiple per target, optional",
|
129
113
|
optional: true)
|
130
114
|
]
|
131
115
|
end
|
@@ -137,7 +121,7 @@ module Fastlane
|
|
137
121
|
end
|
138
122
|
|
139
123
|
def self.authors
|
140
|
-
["Liquidsoul"]
|
124
|
+
["Liquidsoul", "joshdholtz"]
|
141
125
|
end
|
142
126
|
|
143
127
|
def self.is_supported?(platform)
|
@@ -39,7 +39,7 @@ module Fastlane
|
|
39
39
|
def self.upload_build(api_token, ipa, options)
|
40
40
|
connection = self.connection(options)
|
41
41
|
|
42
|
-
options[:ipa] = Faraday::UploadIO.new(ipa, 'application/octet-stream') if ipa
|
42
|
+
options[:ipa] = Faraday::UploadIO.new(ipa, 'application/octet-stream') if ipa && File.exist?(ipa)
|
43
43
|
|
44
44
|
dsym_filename = options.delete(:dsym_filename)
|
45
45
|
if dsym_filename
|
@@ -74,11 +74,11 @@ module Fastlane
|
|
74
74
|
options.delete(:apk)
|
75
75
|
app_id = options.delete(:public_identifier)
|
76
76
|
|
77
|
-
ipaio = Faraday::UploadIO.new(ipa, 'application/octet-stream') if ipa
|
77
|
+
ipaio = Faraday::UploadIO.new(ipa, 'application/octet-stream') if ipa && File.exist?(ipa)
|
78
78
|
dsym = options.delete(:dsym)
|
79
79
|
|
80
80
|
if dsym
|
81
|
-
dsym_io = Faraday::UploadIO.new(dsym, 'application/octet-stream') if dsym
|
81
|
+
dsym_io = Faraday::UploadIO.new(dsym, 'application/octet-stream') if dsym && File.exist?(dsym)
|
82
82
|
end
|
83
83
|
|
84
84
|
# https://support.hockeyapp.net/discussions/problems/83559
|
@@ -206,7 +206,7 @@ module Fastlane
|
|
206
206
|
sensitive: true,
|
207
207
|
description: "API Token for Hockey Access",
|
208
208
|
verify_block: proc do |value|
|
209
|
-
UI.user_error!("No API token for Hockey given, pass using `api_token: 'token'`") unless value
|
209
|
+
UI.user_error!("No API token for Hockey given, pass using `api_token: 'token'`") unless value && !value.empty?
|
210
210
|
end),
|
211
211
|
FastlaneCore::ConfigItem.new(key: :ipa,
|
212
212
|
env_name: "FL_HOCKEY_IPA",
|