fastlane 2.86.0.beta.20180316050051 → 2.86.0.beta.20180317050040

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/credentials_manager/lib/credentials_manager/appfile_config.rb +1 -1
  3. data/deliver/lib/deliver/app_screenshot.rb +4 -4
  4. data/deliver/lib/deliver/commands_generator.rb +1 -1
  5. data/deliver/lib/deliver/options.rb +5 -0
  6. data/deliver/lib/deliver/runner.rb +9 -1
  7. data/deliver/lib/deliver/submit_for_review.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +8 -2
  9. data/fastlane/lib/fastlane/actions/badge.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/download_dsyms.rb +18 -15
  12. data/fastlane/lib/fastlane/actions/get_build_number.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
  14. data/fastlane/lib/fastlane/actions/get_version_number.rb +68 -84
  15. data/fastlane/lib/fastlane/actions/hockey.rb +4 -4
  16. data/fastlane/lib/fastlane/actions/increment_build_number.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/installr.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/oclint.rb +1 -1
  19. data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/slather.rb +1 -1
  21. data/fastlane/lib/fastlane/actions/sonar.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/swiftlint.rb +1 -1
  23. data/fastlane/lib/fastlane/actions/testfairy.rb +1 -1
  24. data/fastlane/lib/fastlane/actions/tryouts.rb +2 -2
  25. data/fastlane/lib/fastlane/actions/typetalk.rb +1 -1
  26. data/fastlane/lib/fastlane/actions/update_app_group_identifiers.rb +1 -1
  27. data/fastlane/lib/fastlane/actions/update_icloud_container_identifiers.rb +1 -1
  28. data/fastlane/lib/fastlane/actions/update_info_plist.rb +2 -2
  29. data/fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb +2 -2
  30. data/fastlane/lib/fastlane/actions/verify_xcode.rb +1 -1
  31. data/fastlane/lib/fastlane/actions/xcode_server_get_assets.rb +1 -1
  32. data/fastlane/lib/fastlane/configuration_helper.rb +1 -1
  33. data/fastlane/lib/fastlane/lane_manager.rb +4 -4
  34. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -1
  35. data/fastlane/lib/fastlane/runner.rb +2 -2
  36. data/fastlane/lib/fastlane/server/socket_server.rb +17 -3
  37. data/fastlane/lib/fastlane/setup/setup.rb +1 -1
  38. data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +1 -4
  39. data/fastlane/lib/fastlane/swift_lane_manager.rb +2 -2
  40. data/fastlane/lib/fastlane/version.rb +1 -1
  41. data/fastlane_core/lib/fastlane_core/command_executor.rb +1 -1
  42. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -5
  43. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  44. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -1
  45. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +2 -2
  46. data/fastlane_core/lib/fastlane_core/project.rb +6 -5
  47. data/fastlane_core/lib/fastlane_core/tool_collector.rb +1 -1
  48. data/frameit/lib/frameit/editor.rb +2 -2
  49. data/gym/lib/gym/generators/build_command_generator.rb +0 -1
  50. data/match/lib/match/git_helper.rb +1 -1
  51. data/match/lib/match/options.rb +1 -1
  52. data/match/lib/match/runner.rb +3 -3
  53. data/pilot/lib/pilot/build_manager.rb +3 -3
  54. data/scan/lib/scan/slack_poster.rb +1 -1
  55. data/scan/lib/scan/test_command_generator.rb +0 -1
  56. data/scan/lib/scan/test_result_parser.rb +1 -1
  57. data/sigh/lib/sigh/runner.rb +1 -1
  58. data/snapshot/lib/snapshot/options.rb +8 -0
  59. data/snapshot/lib/snapshot/runner.rb +1 -1
  60. data/snapshot/lib/snapshot/test_command_generator.rb +28 -1
  61. data/spaceship/lib/spaceship/client.rb +4 -4
  62. data/spaceship/lib/spaceship/du/du_client.rb +1 -1
  63. data/spaceship/lib/spaceship/launcher.rb +1 -1
  64. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +4 -4
  65. data/spaceship/lib/spaceship/tunes/application.rb +34 -0
  66. data/spaceship/lib/spaceship/tunes/build_train.rb +1 -0
  67. data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -4
  68. metadata +27 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7995dfeda91951931b550ea21d89b8b3180477f5
4
- data.tar.gz: 1ed638a12b3a8995e62b43731e98c7c7e1b80420
3
+ metadata.gz: da2c95e01cab5bb5882134041dd36ddc2032ec65
4
+ data.tar.gz: 4fda933db2786f9093f4706793e5ae11e817a8e2
5
5
  SHA512:
6
- metadata.gz: 6cc45e497269218d8f291a0f0e7f59ff4b2d545558943298d1ae130f2a81de61205bb98252ac16df1c1c52c4e6d18ad776da359fb744f617fd7185f8d32ebdf8
7
- data.tar.gz: 0b02429495aec40e156955c7221466c2e2be252f7d3bb0adad6bf7b0c9b7e917605cc36d314862f5a0140854dd13efbc5cf7e13dc0c50c62207f4f4c92e0d73d
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 and File.exist?(path) # it might not exist, we still want to use the default values
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? or size.count == 0
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] and size[1] == resolution[1] # portrait
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] and size[1] == resolution[1]) or # portrait
254
- (size[1] == resolution[0] and size[0] == resolution[1]) # landscape
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") or File.exist?("fastlane/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
- precheck_success = precheck_app
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] and options[:build_number] != "latest"
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
- testflight_version = app.all_build_train_numbers(platform: platform).sort_by { |v| Gem::Version.new(v) }.last
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
- build_nr = app.all_builds_for_train(train: version_number, platform: platform).map(&:build_version).map(&:to_i).sort.last
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 and File.exist?(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 or platform.nil?
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
- # Loop through all app versions and download their dSYM
55
- app.all_build_train_numbers(platform: platform).each do |train_number|
56
- UI.verbose("Found train: #{train_number}, comparing to supplied version: #{version}")
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.all_builds_for_train(train: train_number, platform: platform).each do |build|
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.reload
72
- download_url = build.dsym_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
- result = self.download(download_url)
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} (#{build.train_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.download(url)
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) and !Helper.test?
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",
@@ -16,7 +16,7 @@ module Fastlane
16
16
  profile_path = PEM::Manager.start
17
17
  end
18
18
 
19
- if success_block and profile_path
19
+ if success_block && profile_path
20
20
  success_block.call(File.expand_path(profile_path)) if success_block
21
21
  end
22
22
  end
@@ -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
- command_prefix = [
13
- 'cd',
14
- File.expand_path(folder).shellescape,
15
- '&&'
16
- ].join(' ')
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
- command = [
19
- command_prefix,
20
- 'agvtool',
21
- 'what-marketing-version',
22
- '-terse'
23
- ].join(' ')
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
- line = ""
26
- scheme = params[:scheme] || ""
27
- target = params[:target] || ""
28
- results = []
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
- results = Actions.sh(command).split("\n")
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
- if target.empty? && scheme.empty?
46
- # Sometimes the results array contains nonsense as the first element
47
- # This iteration finds the first 'real' result and returns that
48
- # emulating the actual behavior or the -terse1 flag correctly
49
- project_string = ".xcodeproj"
50
- results.any? do |result|
51
- if result.include?(project_string)
52
- line = result
53
- break
54
- end
55
- end
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
- # This iteration finds the first folder structure or info plist
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
- version_number = line.partition('=').last
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
- # Store the number in the shared hash
83
- Actions.lane_context[SharedValues::VERSION_NUMBER] = version_number
72
+ plist_file
73
+ end
84
74
 
85
- # Return the version number because Swift might need this return value
86
- return version_number
87
- rescue => ex
88
- UI.error('Before being able to increment and read the version number from your Xcode project, you first need to setup your project properly. Please follow the guide at https://developer.apple.com/library/content/qa/qa1827/_index.html')
89
- raise ex
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) and !Helper.test?
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 and File.exist?(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 and File.exist?(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 and File.exist?(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 and !value.empty?
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",