fastlane 2.28.9 → 2.29.0.beta.20170421010107

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/deliver/lib/assets/summary.html.erb +0 -3
  4. data/deliver/lib/deliver/options.rb +2 -2
  5. data/deliver/lib/deliver/upload_metadata.rb +1 -2
  6. data/fastlane/README.md +2 -6
  7. data/fastlane/lib/fastlane/actions/artifactory.rb +1 -17
  8. data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +3 -17
  11. data/fastlane/lib/fastlane/actions/hockey.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +3 -3
  13. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +10 -16
  14. data/fastlane/lib/fastlane/version.rb +1 -1
  15. data/fastlane_core/lib/fastlane_core/build_watcher.rb +21 -39
  16. data/fastlane_core/lib/fastlane_core/helper.rb +5 -7
  17. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +1 -4
  18. data/fastlane_core/lib/fastlane_core/print_table.rb +9 -4
  19. data/fastlane_core/lib/fastlane_core/project.rb +4 -16
  20. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +7 -11
  21. data/fastlane_core/lib/fastlane_core/ui/github_issue_inspector_reporter.rb +2 -2
  22. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +0 -2
  23. data/fastlane_core/lib/fastlane_core/ui/ui.rb +2 -0
  24. data/gym/lib/gym/generators/build_command_generator.rb +0 -2
  25. data/gym/lib/gym/options.rb +0 -10
  26. data/gym/lib/gym/runner.rb +0 -2
  27. data/gym/lib/gym/xcode.rb +3 -1
  28. data/pilot/lib/pilot/build_manager.rb +17 -44
  29. data/pilot/lib/pilot/commands_generator.rb +1 -2
  30. data/pilot/lib/pilot/options.rb +2 -3
  31. data/pilot/lib/pilot/tester_manager.rb +44 -58
  32. data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
  33. data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
  34. data/spaceship/lib/spaceship/test_flight.rb +0 -2
  35. data/spaceship/lib/spaceship/test_flight/base.rb +0 -12
  36. data/spaceship/lib/spaceship/test_flight/build.rb +8 -22
  37. data/spaceship/lib/spaceship/test_flight/client.rb +40 -121
  38. data/spaceship/lib/spaceship/test_flight/group.rb +7 -49
  39. data/spaceship/lib/spaceship/test_flight/test_info.rb +0 -4
  40. data/spaceship/lib/spaceship/tunes/app_ratings.rb +2 -74
  41. data/spaceship/lib/spaceship/tunes/app_status.rb +2 -4
  42. data/spaceship/lib/spaceship/tunes/application.rb +1 -1
  43. data/spaceship/lib/spaceship/tunes/iap_detail.rb +11 -48
  44. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +5 -24
  45. data/spaceship/lib/spaceship/tunes/tunes_client.rb +3 -14
  46. data/supply/lib/supply/setup.rb +2 -2
  47. metadata +16 -33
  48. data/spaceship/lib/spaceship/test_flight/app_test_info.rb +0 -27
  49. data/spaceship/lib/spaceship/test_flight/tester.rb +0 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3186c50a7d29fce28650a28f133b5612b848ec1f
4
- data.tar.gz: 71c9ec36764d97635a28d1b8a1dfa4a668810e57
3
+ metadata.gz: 85014dfb38ec08df2e882b67dab2873104d1f82c
4
+ data.tar.gz: 64afaa9217e93f86628361b8725f164e8dffcf69
5
5
  SHA512:
6
- metadata.gz: 2c9bfb2132277f93c86859aafd2f1121c8a8348b719262450f66a7d3e0856e01b793adb2c937b4c2aa43906e3e1341077fb229813630190a6365f1c37fe421d9
7
- data.tar.gz: 447f4bb6b4fe48a593e83b1c2008fa55aa23bd94f9808387ebe3d7147589be38701f0d366786708d093e59bf28b4225586f52bd2241d1665f97249105c1a8d90
6
+ metadata.gz: 7d03cc1e1d52bb69d4ed64e05a28bd5917c888c419825e382e72d90df0ccb19ede70fe3e9bc43f416bdcbabe196ebfac64290a5be9c4236da0dfe8cf854868a8
7
+ data.tar.gz: e625dec851c79be6c9821c4a7c799b73daf3d7cdd7f9687298ca84c31cac38d25691dc817da05cc3a1fd3f9eadc242586b761fd64a4cc24c3d7807a263798d7f
data/README.md CHANGED
@@ -48,7 +48,7 @@ Then to deploy a new 'beta' version of your app just run
48
48
  :ghost: | [Jenkins Integration](https://docs.fastlane.tools/best-practices/continuous-integration/#jenkins-integration): Show output directly in test results
49
49
  :book: | Automatically generate Markdown documentation of your lane configurations
50
50
  :hatching_chick: | Over 170 built-in integrations available
51
- :computer: | Support for iOS and Android apps
51
+ :computer: | Support for iOS, macOS, and Android apps
52
52
  :octocat: | Full Git and Mercurial support
53
53
 
54
54
  <hr />
@@ -107,9 +107,6 @@
107
107
  margin-left: 10px;
108
108
  margin-right: 10px;
109
109
  }
110
- .app-icons {
111
- overflow: hidden;
112
- }
113
110
  .app-icons img {
114
111
  width: 150px;
115
112
  }
@@ -37,7 +37,7 @@ module Deliver
37
37
  optional: true,
38
38
  env_name: "DELIVER_IPA_PATH",
39
39
  description: "Path to your ipa file",
40
- default_value: Dir["*.ipa"].sort_by { |x| File.mtime(x) }.last,
40
+ default_value: Dir["*.ipa"].first,
41
41
  verify_block: proc do |value|
42
42
  UI.user_error!("Could not find ipa file at path '#{File.expand_path(value)}'") unless File.exist?(value)
43
43
  UI.user_error!("'#{value}' doesn't seem to be an ipa file") unless value.end_with?(".ipa")
@@ -51,7 +51,7 @@ module Deliver
51
51
  optional: true,
52
52
  env_name: "DELIVER_PKG_PATH",
53
53
  description: "Path to your pkg file",
54
- default_value: Dir["*.pkg"].sort_by { |x| File.mtime(x) }.last,
54
+ default_value: Dir["*.pkg"].first,
55
55
  verify_block: proc do |value|
56
56
  UI.user_error!("Could not find pkg file at path '#{File.expand_path(value)}'") unless File.exist?(value)
57
57
  UI.user_error!("'#{value}' doesn't seem to be a pkg file") unless value.end_with?(".pkg")
@@ -116,7 +116,7 @@ module Deliver
116
116
  end
117
117
 
118
118
  # Check folder list (an empty folder signifies a language is required)
119
- Loader.language_folders(options[:metadata_path]).each do |lng_folder|
119
+ Dir.glob(File.join(options[:metadata_path], "*")).each do |lng_folder|
120
120
  next unless File.directory?(lng_folder) # We don't want to read txt as they are non localised
121
121
 
122
122
  language = File.basename(lng_folder)
@@ -233,7 +233,6 @@ module Deliver
233
233
  UI.error(ex.to_s)
234
234
  UI.user_error!("Error parsing JSON file at path '#{options[:app_rating_config_path]}'")
235
235
  end
236
- UI.message("Setting the app's age rating...")
237
236
  v.update_rating(json)
238
237
  end
239
238
  end
data/fastlane/README.md CHANGED
@@ -91,7 +91,7 @@ fastlane release
91
91
  :ghost: | [Jenkins Integration](https://docs.fastlane.tools/best-practices/continuous-integration/#jenkins-integration): Show the output directly in the Jenkins test results
92
92
  :book: | Automatically generate a markdown documentation of your lane config
93
93
  :hatching_chick: | Over 170 built-in integrations available
94
- :computer: | Support for iOS and Android apps
94
+ :computer: | Support for iOS, macOS and Android apps
95
95
  :octocat: | Full git and mercurial support
96
96
 
97
97
 
@@ -138,11 +138,7 @@ The setup assistant will create all the necessary files for you, using the exist
138
138
  - Follow the setup assistant, which will set up ```fastlane``` for you
139
139
  - Further customise the ```Fastfile``` with [actions](https://docs.fastlane.tools/actions).
140
140
 
141
- For more details, follow our new Getting Started guides:
142
-
143
- - [Getting Started fastlane guide for iOS](https://docs.fastlane.tools/getting-started/ios/setup/)
144
- - [Getting Started fastlane guide for Android](https://docs.fastlane.tools/getting-started/android/setup/)
145
-
141
+ For more details, please follow the [fastlane guide](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Guide.md) or [documentation](https://github.com/fastlane/fastlane/tree/master/fastlane/docs).
146
142
 
147
143
  There are also 2 Japanese fastlane guides available: [qiita](http://qiita.com/gin0606/items/a8573b582752de0c15e1) and [mercari](http://tech.mercari.com/entry/2015/07/13/143000)
148
144
 
@@ -1,10 +1,5 @@
1
1
  module Fastlane
2
2
  module Actions
3
- module SharedValues
4
- ARTIFACTORY_DOWNLOAD_URL = :ARTIFACTORY_DOWNLOAD_URL
5
- ARTIFACTORY_DOWNLOAD_SIZE = :ARTIFACTORY_DOWNLOAD_SIZE
6
- end
7
-
8
3
  class ArtifactoryAction < Action
9
4
  def self.run(params)
10
5
  Actions.verify_gem!('artifactory')
@@ -22,10 +17,6 @@ module Fastlane
22
17
  }
23
18
  UI.message("Uploading file: #{artifact.local_path} ...")
24
19
  upload = artifact.upload(params[:repo], params[:repo_path], params[:properties])
25
-
26
- Actions.lane_context[SharedValues::ARTIFACTORY_DOWNLOAD_URL] = upload.uri
27
- Actions.lane_context[SharedValues::ARTIFACTORY_DOWNLOAD_SIZE] = upload.size
28
-
29
20
  UI.message("Uploaded Artifact:")
30
21
  UI.message("Repo: #{upload.repo}")
31
22
  UI.message("URI: #{upload.uri}")
@@ -53,14 +44,7 @@ module Fastlane
53
44
  end
54
45
 
55
46
  def self.author
56
- ["koglinjg", "tommeier"]
57
- end
58
-
59
- def self.output
60
- [
61
- ['ARTIFACTORY_DOWNLOAD_URL', 'The download url for file uploaded'],
62
- ['ARTIFACTORY_DOWNLOAD_SIZE', 'The reported file size for file uploaded']
63
- ]
47
+ ["koglinjg"]
64
48
  end
65
49
 
66
50
  def self.example_code
@@ -65,7 +65,7 @@ module Fastlane
65
65
  platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
66
66
 
67
67
  if platform == :ios or platform.nil?
68
- ipa_path_default = Dir["*.ipa"].sort_by { |x| File.mtime(x) }.last
68
+ ipa_path_default = Dir["*.ipa"].last
69
69
  end
70
70
 
71
71
  if platform == :android
@@ -166,7 +166,7 @@ module Fastlane
166
166
  end
167
167
 
168
168
  def self.is_supported?(platform)
169
- [:ios, :appletvos].include?(platform)
169
+ platform == :ios
170
170
  end
171
171
 
172
172
  def self.example_code
@@ -7,16 +7,13 @@ module Fastlane
7
7
  # Raises an exception and stop the lane execution if the repo is not in a clean state
8
8
  class EnsureGitStatusCleanAction < Action
9
9
  def self.run(params)
10
- repo_status = Actions.sh("git status --porcelain")
11
- repo_clean = repo_status.empty?
10
+ repo_clean = `git status --porcelain`.empty?
12
11
 
13
12
  if repo_clean
14
13
  UI.success('Git status is clean, all good! 💪')
15
14
  Actions.lane_context[SharedValues::GIT_REPO_WAS_CLEAN_ON_START] = true
16
15
  else
17
- error_message = "Git repository is dirty! Please ensure the repo is in a clean state by committing/stashing/discarding all changes first."
18
- error_message += "\nUncommitted changes:\n#{repo_status}" if params[:show_uncommitted_changes]
19
- UI.user_error!(error_message)
16
+ UI.user_error!("Git repository is dirty! Please ensure the repo is in a clean state by committing/stashing/discarding all changes first.")
20
17
  end
21
18
  end
22
19
 
@@ -41,24 +38,13 @@ module Fastlane
41
38
  end
42
39
 
43
40
  def self.author
44
- ["lmirosevic", "antondomashnev"]
41
+ "lmirosevic"
45
42
  end
46
43
 
47
44
  def self.example_code
48
45
  ['ensure_git_status_clean']
49
46
  end
50
47
 
51
- def self.available_options
52
- [
53
- FastlaneCore::ConfigItem.new(key: :show_uncommitted_changes,
54
- env_name: "FL_ENSURE_GIT_STATUS_CLEAN_SHOW_UNCOMMITTED_CHANGES",
55
- description: "The flag whether to show uncommitted changes if the repo is dirty",
56
- optional: true,
57
- default_value: false,
58
- is_string: false)
59
- ]
60
- end
61
-
62
48
  def self.category
63
49
  :source_control
64
50
  end
@@ -250,7 +250,7 @@ module Fastlane
250
250
  default_value: "1"),
251
251
  FastlaneCore::ConfigItem.new(key: :status,
252
252
  env_name: "FL_HOCKEY_STATUS",
253
- description: "Download status: \"1\" = No user can download; \"2\" = Available for download (only possible with full-access token)",
253
+ description: "Download status: \"1\" = No user can download; \"2\" = Available for download",
254
254
  default_value: "2"),
255
255
  FastlaneCore::ConfigItem.new(key: :notes_type,
256
256
  env_name: "FL_HOCKEY_NOTES_TYPE",
@@ -128,10 +128,10 @@ module Fastlane
128
128
  end),
129
129
  FastlaneCore::ConfigItem.new(key: :platform,
130
130
  env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_PLATFORM",
131
- description: "The platform of the app (ios, appletvos, mac)",
131
+ description: "The platform of the app (ios, tvos, mac)",
132
132
  default_value: "ios",
133
133
  verify_block: proc do |value|
134
- available = ['ios', 'appletvos', 'mac']
134
+ available = ['ios', 'tvos', 'mac']
135
135
  UI.user_error!("Invalid platform '#{value}', must be #{available.join(', ')}") unless available.include?(value)
136
136
  end)
137
137
  ]
@@ -150,7 +150,7 @@ module Fastlane
150
150
  end
151
151
 
152
152
  def self.is_supported?(platform)
153
- [:ios, :appletvos].include?(platform)
153
+ platform == :ios
154
154
  end
155
155
 
156
156
  def self.example_code
@@ -1,6 +1,6 @@
1
1
  Style/PercentLiteralDelimiters:
2
2
  Enabled: false
3
-
3
+
4
4
  # kind_of? is a good way to check a type
5
5
  Style/ClassCheck:
6
6
  EnforcedStyle: kind_of?
@@ -16,12 +16,6 @@ Style/SafeNavigation:
16
16
  Performance/RegexpMatch:
17
17
  Enabled: false
18
18
 
19
- # This suggests use of `tr` instead of `gsub`. While this might be more performant,
20
- # these methods are not at all interchangable, and behave very differently. This can
21
- # lead to people making the substitution without considering the differences.
22
- Performance/StringReplacement:
23
- Enabled: false
24
-
25
19
  # .length == 0 is also good, we don't always want .zero?
26
20
  Style/NumericPredicate:
27
21
  Enabled: false
@@ -29,7 +23,7 @@ Style/NumericPredicate:
29
23
  # this would cause errors with long lanes
30
24
  Metrics/BlockLength:
31
25
  Enabled: false
32
-
26
+
33
27
  # this is a bit buggy
34
28
  Metrics/ModuleLength:
35
29
  Enabled: false
@@ -42,23 +36,23 @@ Style/VariableNumber:
42
36
  Style/MethodMissing:
43
37
  Enabled: false
44
38
 
45
- #
39
+ #
46
40
  # File.chmod(0777, f)
47
- #
41
+ #
48
42
  # is easier to read than
49
- #
43
+ #
50
44
  # File.chmod(0o777, f)
51
- #
45
+ #
52
46
  Style/NumericLiteralPrefix:
53
47
  Enabled: false
54
48
 
55
- #
49
+ #
56
50
  # command = (!clean_expired.nil? || !clean_pattern.nil?) ? CLEANUP : LIST
57
- #
51
+ #
58
52
  # is easier to read than
59
- #
53
+ #
60
54
  # command = !clean_expired.nil? || !clean_pattern.nil? ? CLEANUP : LIST
61
- #
55
+ #
62
56
  Style/TernaryParentheses:
63
57
  Enabled: false
64
58
 
@@ -1,4 +1,4 @@
1
1
  module Fastlane
2
- VERSION = '2.28.9'.freeze
2
+ VERSION = '2.29.0.beta.20170421010107'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  end
@@ -1,54 +1,36 @@
1
1
  module FastlaneCore
2
2
  class BuildWatcher
3
- class << self
4
- # @return The build we waited for. This method will always return a build
5
- def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil)
6
- # First, find the train and build version we want to watch for
7
- watched_build = watching_build(app_id: app_id, platform: platform)
8
- UI.crash!("Could not find a build for app: #{app_id} on platform: #{platform}") if watched_build.nil?
3
+ # @return The build we waited for. This method will always return a build
4
+ def self.wait_for_build_processing_to_be_complete(app_id: nil, platform: nil)
5
+ # First, find the train and build version we want to watch for
6
+ processing_builds = Spaceship::TestFlight::Build.all_processing_builds(app_id: app_id, platform: platform)
9
7
 
10
- loop do
11
- matched_build = matching_build(watched_build: watched_build, app_id: app_id, platform: platform)
8
+ watching_build = processing_builds.sort_by(&:upload_date).last # either it's still processing
9
+ watching_build ||= Spaceship::TestFlight::Build.latest(app_id: app_id, platform: platform) # or we fallback to the most recent uplaod
12
10
 
13
- report_status(build: matched_build)
11
+ loop do
12
+ UI.message("Waiting for iTunes Connect to finish processing the new build (#{watching_build.train_version} - #{watching_build.build_version})")
14
13
 
15
- if matched_build && matched_build.processed?
16
- return matched_build
17
- end
18
-
19
- sleep 10
20
- end
21
- end
22
-
23
- private
24
-
25
- def watching_build(app_id: nil, platform: nil)
26
- processing_builds = Spaceship::TestFlight::Build.all_processing_builds(app_id: app_id, platform: platform)
27
-
28
- watched_build = processing_builds.sort_by(&:upload_date).last
29
- watched_build || Spaceship::TestFlight::Build.latest(app_id: app_id, platform: platform)
30
- end
31
-
32
- def matching_build(watched_build: nil, app_id: nil, platform: nil)
33
- matched_builds = Spaceship::TestFlight::Build.builds_for_train(app_id: app_id, platform: platform, train_version: watched_build.train_version)
34
- matched_builds.find { |build| build.build_version == watched_build.build_version }
35
- end
36
-
37
- def report_status(build: nil)
38
14
  # Due to iTunes Connect, builds disappear from the build list alltogether
39
15
  # after they finished processing. Before returning this build, we have to
40
16
  # wait for the build to appear in the build list again
41
17
  # As this method is very often used to wait for a build, and then do something
42
18
  # with it, we have to be sure that the build actually is ready
43
- if build.nil?
19
+
20
+ matching_builds = Spaceship::TestFlight::Build.builds_for_train(app_id: app_id, platform: platform, train_version: watching_build.train_version)
21
+ matching_build = matching_builds.find { |build| build.build_version == watching_build.build_version }
22
+
23
+ if matching_build.nil?
44
24
  UI.message("Build doesn't show up in the build list any more, waiting for it to appear again")
45
- elsif build.active?
46
- UI.success("Build #{build.train_version} - #{build.build_version} is already being tested")
47
- elsif build.ready_to_submit? || build.export_compliance_missing?
48
- UI.success("Successfully finished processing the build #{build.train_version} - #{build.build_version}")
49
- else
50
- UI.message("Waiting for iTunes Connect to finish processing the new build (#{build.train_version} - #{build.build_version})")
25
+ elsif matching_build.active?
26
+ UI.success("Build #{matching_build.train_version} - #{matching_build.build_version} is already being tested")
27
+ return matching_build
28
+ elsif matching_build.ready_to_submit?
29
+ UI.success("Successfully finished processing the build #{matching_build.train_version} - #{matching_build.build_version}")
30
+ return matching_build
51
31
  end
32
+
33
+ sleep 10
52
34
  end
53
35
  end
54
36
  end
@@ -118,6 +118,11 @@ module FastlaneCore
118
118
  FastlaneCore::Env.truthy?("TERM_PROGRAM_VERSION")
119
119
  end
120
120
 
121
+ # Does the user use iTerm?
122
+ def self.iterm?
123
+ FastlaneCore::Env.truthy?("ITERM_SESSION_ID")
124
+ end
125
+
121
126
  # Logs base directory
122
127
  def self.buildlog_path
123
128
  return ENV["FL_BUILDLOG_PATH"] || "~/Library/Logs"
@@ -208,13 +213,6 @@ module FastlaneCore
208
213
  keychain_path
209
214
  end
210
215
 
211
- # @return true if XCode version is higher than 8.3
212
- def self.xcode_at_least?(version)
213
- FastlaneCore::UI.user_error!("Unable to locate Xcode. Please make sure to have Xcode installed on your machine") if xcode_version.nil?
214
- v = xcode_version
215
- Gem::Version.new(v) >= Gem::Version.new(version)
216
- end
217
-
218
216
  # @return the full path to the iTMSTransporter executable
219
217
  def self.itms_path
220
218
  return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
@@ -376,10 +376,7 @@ module FastlaneCore
376
376
  def load_password_for_transporter
377
377
  # 3 different sources for the password
378
378
  # 1) ENV variable for application specific password
379
- if ENV[TWO_FACTOR_ENV_VARIABLE].to_s.length > 0
380
- UI.message("Fetching password for transporter from environment variable named `#{TWO_FACTOR_ENV_VARIABLE}`")
381
- return ENV[TWO_FACTOR_ENV_VARIABLE]
382
- end
379
+ return ENV[TWO_FACTOR_ENV_VARIABLE] if ENV[TWO_FACTOR_ENV_VARIABLE].to_s.length > 0
383
380
  # 2) TWO_STEP_HOST_PREFIX from keychain
384
381
  account_manager = CredentialsManager::AccountManager.new(user: @user,
385
382
  prefix: TWO_STEP_HOST_PREFIX,
@@ -44,7 +44,7 @@ module FastlaneCore
44
44
  value = ""
45
45
  array.each do |l|
46
46
  colored_line = l
47
- colored_line = "#{colors.first}#{l}#{colors.last}" if colors.length > 0
47
+ colored_line = "#{colors.first[0]}#{l}#{colors.last[0]}" if colors.length > 0
48
48
  value << colored_line
49
49
  value << "\n"
50
50
  end
@@ -68,10 +68,15 @@ module FastlaneCore
68
68
  return value.middle_truncate(max_value_length)
69
69
  elsif transform == :newline
70
70
  # remove all fixed newlines as it may mess up the output
71
- value.gsub!("\n", " ") if value.kind_of?(String)
71
+ value.tr!("\n", " ") if value.kind_of?(String)
72
72
  if value.length >= max_value_length
73
- colors = value.scan(/\e\[.*?m/)
74
- colors.each { |color| value.gsub!(color, '') }
73
+ colors = value.scan(/(\e\[.*?m)/)
74
+ if colors && colors.length > 0
75
+ colors.each do |color|
76
+ value.delete!(color.first)
77
+ value.delete!(color.last)
78
+ end
79
+ end
75
80
  lines = value.wordwrap(max_value_length)
76
81
  return colorize_array(lines, colors)
77
82
  end
@@ -279,14 +279,9 @@ module FastlaneCore
279
279
  def build_xcodebuild_showbuildsettings_command
280
280
  # We also need to pass the workspace and scheme to this command.
281
281
  #
282
- # The 'clean' portion of this command was a workaround for an xcodebuild bug with Core Data projects.
283
- # This xcodebuild bug is fixed in Xcode 8.3 so 'clean' it's not necessary anymore
282
+ # The 'clean' portion of this command is a workaround for an xcodebuild bug with Core Data projects.
284
283
  # See: https://github.com/fastlane/fastlane/pull/5626
285
- if FastlaneCore::Helper.xcode_at_least?('8.3')
286
- command = "xcodebuild -showBuildSettings #{xcodebuild_parameters.join(' ')}"
287
- else
288
- command = "xcodebuild clean -showBuildSettings #{xcodebuild_parameters.join(' ')}"
289
- end
284
+ command = "xcodebuild clean -showBuildSettings #{xcodebuild_parameters.join(' ')}"
290
285
  command += " 2> /dev/null" if xcodebuild_suppress_stderr
291
286
  command
292
287
  end
@@ -296,16 +291,9 @@ module FastlaneCore
296
291
  # @param [String] The key of which we want the value for (e.g. "PRODUCT_NAME")
297
292
  def build_settings(key: nil, optional: true)
298
293
  unless @build_settings
299
- if is_workspace
300
- if schemes.count == 0
301
- UI.user_error!("Could not find any schemes for Xcode workspace at path '#{self.path}'. Please make sure that the schemes you want to use are marked as `Shared` from Xcode.")
302
- end
303
- options[:scheme] ||= schemes.first
304
- end
305
-
306
294
  command = build_xcodebuild_showbuildsettings_command
307
295
 
308
- # Xcode might hang here and retrying fixes the problem, see fastlane#4059
296
+ # xcode might hang here and retrying fixes the problem, see fastlane#4059
309
297
  begin
310
298
  timeout = FastlaneCore::Project.xcode_build_settings_timeout
311
299
  retries = FastlaneCore::Project.xcode_build_settings_retries
@@ -339,7 +327,7 @@ module FastlaneCore
339
327
 
340
328
  # Returns the build settings and sets the default scheme to the options hash
341
329
  def default_build_settings(key: nil, optional: true)
342
- options[:scheme] ||= schemes.first if is_workspace
330
+ options[:scheme] = schemes.first if is_workspace
343
331
  build_settings(key: key, optional: optional)
344
332
  end
345
333