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.
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",