fastlane/lib/fastlane/actions/ensure_xcode_version.rb in fastlane-2.96.0.beta.20180511050050 vs fastlane/lib/fastlane/actions/ensure_xcode_version.rb in fastlane-2.96.0.beta.20180512050121
- old
+ new
@@ -6,44 +6,69 @@
class EnsureXcodeVersionAction < Action
def self.run(params)
Actions.verify_gem!('xcode-install')
required_version = params[:version]
+
+ if required_version.to_s.length == 0
+ # The user didn't provide an Xcode version, let's see
+ # if the current project has a `.xcode-version` file
+ #
+ # The code below can be improved to also consider
+ # the directory of the Xcode project
+ xcode_version_paths = Dir.glob(".xcode-version")
+
+ if xcode_version_paths.first
+ UI.verbose("Loading required version from #{xcode_version_paths.first}")
+ required_version = File.read(xcode_version_paths.first).strip
+ else
+ UI.user_error!("No version: provided when calling the `ensure_xcode_version` action")
+ end
+ end
+
selected_version = sh("xcversion selected").match(/^Xcode (.*)$/)[1]
+ begin
+ selected_version = Gem::Version.new(selected_version)
+ required_version = Gem::Version.new(required_version)
+ rescue ArgumentError => ex
+ UI.user_error!("Invalid version number provided, make sure it's valid: #{ex}")
+ end
+
if selected_version == required_version
UI.success("Selected Xcode version is correct: #{selected_version}")
else
UI.message("Selected Xcode version is not correct: #{selected_version}. You expected #{required_version}.")
UI.message("To correct this, use: `xcode_select(version: #{required_version})`.")
- UI.user_error!("Selected Xcode version doesn't match your requirement.\nExpected: Xcode #{required_version}\nActual: #{selected_version}\n")
+ UI.user_error!("Selected Xcode version doesn't match your requirement.\nExpected: Xcode #{required_version}\nActual: Xcode #{selected_version}\n")
end
end
#####################################################
# @!group Documentation
#####################################################
def self.description
- "Ensure the selected Xcode version with xcode-select matches a value"
+ "Ensure the right version of Xcode is used"
end
def self.details
[
"If building your app requires a specific version of Xcode, you can invoke this command before using gym.",
- "For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail."
+ "For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail.",
+ "You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file."
].join("\n")
end
def self.available_options
[
FastlaneCore::ConfigItem.new(key: :version,
env_name: "FL_ENSURE_XCODE_VERSION",
description: "Xcode version to verify that is selected",
is_string: true,
- optional: false)
+ optional: true)
]
end
def self.output
[
@@ -53,10 +78,10 @@
def self.return_value
end
def self.authors
- ["JaviSoto"]
+ ["JaviSoto", "KrauseFx"]
end
def self.example_code
['ensure_xcode_version(version: "7.2")']
end