Class: Xcodeproj::XCScheme
- Inherits:
-
Object
- Object
- Xcodeproj::XCScheme
- Defined in:
- lib/xcodeproj/scheme.rb,
lib/xcodeproj/scheme/test_action.rb,
lib/xcodeproj/scheme/build_action.rb,
lib/xcodeproj/scheme/launch_action.rb,
lib/xcodeproj/scheme/analyze_action.rb,
lib/xcodeproj/scheme/archive_action.rb,
lib/xcodeproj/scheme/profile_action.rb,
lib/xcodeproj/scheme/macro_expansion.rb,
lib/xcodeproj/scheme/remote_runnable.rb,
lib/xcodeproj/scheme/execution_action.rb,
lib/xcodeproj/scheme/buildable_reference.rb,
lib/xcodeproj/scheme/xml_element_wrapper.rb,
lib/xcodeproj/scheme/environment_variables.rb,
lib/xcodeproj/scheme/abstract_scheme_action.rb,
lib/xcodeproj/scheme/command_line_arguments.rb,
lib/xcodeproj/scheme/send_email_action_content.rb,
lib/xcodeproj/scheme/buildable_product_runnable.rb,
lib/xcodeproj/scheme/location_scenario_reference.rb,
lib/xcodeproj/scheme/shell_script_action_content.rb
Overview
This class represents a Scheme document represented by a “.xcscheme” file usually stored in a xcuserdata or xcshareddata (for a shared scheme) folder.
Defined Under Namespace
Classes: AbstractSchemeAction, AnalyzeAction, ArchiveAction, BuildAction, BuildableProductRunnable, BuildableReference, CommandLineArgument, CommandLineArguments, EnvironmentVariable, EnvironmentVariables, ExecutionAction, LaunchAction, LocationScenarioReference, MacroExpansion, ProfileAction, RemoteRunnable, SendEmailActionContent, ShellScriptActionContent, TestAction, XMLElementWrapper, XMLFormatter
Constant Summary collapse
- VARIABLES_NODE =
'EnvironmentVariables'
- VARIABLE_NODE =
'EnvironmentVariable'
- COMMAND_LINE_ARGS_NODE =
'CommandLineArguments'.freeze
- COMMAND_LINE_ARG_NODE =
'CommandLineArgument'.freeze
Instance Attribute Summary collapse
-
#doc ⇒ REXML::Document
readonly
The XML object that will be manipulated to save the scheme file after.
Access Action nodes collapse
-
#analyze_action ⇒ XCScheme::AnalyzeAction
The Analyze Action associated with this scheme.
- #analyze_action=(action) ⇒ Object
-
#archive_action ⇒ XCScheme::ArchiveAction
The Archive Action associated with this scheme.
- #archive_action=(action) ⇒ Object
-
#build_action ⇒ XCScheme::BuildAction
The Build Action associated with this scheme.
- #build_action=(action) ⇒ Object
-
#launch_action ⇒ XCScheme::LaunchAction
The Launch Action associated with this scheme.
- #launch_action=(action) ⇒ Object
-
#profile_action ⇒ XCScheme::ProfileAction
The Profile Action associated with this scheme.
- #profile_action=(action) ⇒ Object
-
#test_action ⇒ XCScheme::TestAction
The Test Action associated with this scheme.
- #test_action=(action) ⇒ Object
Target methods collapse
-
#add_build_target(build_target, build_for_running = true) ⇒ Object
Add a target to the list of targets to build in the build action.
-
#add_test_target(test_target) ⇒ Object
Add a target to the list of targets to build in the build action.
-
#set_launch_target(build_target) ⇒ Object
Sets a runnable target to be the target of the launch action of the scheme.
Class methods collapse
-
.share_scheme(project_path, scheme_name, user = nil) ⇒ Object
Share a User Scheme.
- .shared_data_dir(project_path) ⇒ Pathname
- .user_data_dir(project_path, user = nil) ⇒ Pathname
Serialization collapse
-
#save! ⇒ Object
Serializes the current state of the object to the original “.xcscheme” file this XCScheme was created from, overriding the original file.
-
#save_as(project_path, name, shared = true) ⇒ void
Serializes the current state of the object to a “.xcscheme” file.
-
#to_s ⇒ String
Serializes the current state of the object to a String.
Instance Method Summary collapse
-
#configure_with_targets(runnable_target, test_target, launch_target: false) ⇒ Object
Convenience method to quickly add app and test targets to a new scheme.
-
#initialize(file_path = nil) ⇒ XCScheme
constructor
Create a XCScheme either from scratch or using an existing file.
Constructor Details
#initialize(file_path = nil) ⇒ XCScheme
Create a XCScheme either from scratch or using an existing file
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/xcodeproj/scheme.rb', line 35 def initialize(file_path = nil) if file_path @file_path = file_path @doc = File.open(file_path, 'r') do |f| REXML::Document.new(f) end @doc.context[:attribute_quote] = :quote @scheme = @doc.elements['Scheme'] else @doc = REXML::Document.new @doc.context[:attribute_quote] = :quote @doc << REXML::XMLDecl.new(REXML::XMLDecl::DEFAULT_VERSION, 'UTF-8') @scheme = @doc.add_element 'Scheme' @scheme.attributes['LastUpgradeVersion'] = Constants::LAST_UPGRADE_CHECK @scheme.attributes['version'] = Xcodeproj::Constants::XCSCHEME_FORMAT_VERSION self.build_action = BuildAction.new self.test_action = TestAction.new self.launch_action = LaunchAction.new self.profile_action = ProfileAction.new self.analyze_action = AnalyzeAction.new self.archive_action = ArchiveAction.new end end |
Instance Attribute Details
#doc ⇒ REXML::Document (readonly)
Returns the XML object that will be manipulated to save the scheme file after.
28 29 30 |
# File 'lib/xcodeproj/scheme.rb', line 28 def doc @doc end |
Class Method Details
.share_scheme(project_path, scheme_name, user = nil) ⇒ Object
Share a User Scheme. Basically this method move the xcscheme file from the xcuserdata folder to xcshareddata folder.
251 252 253 254 255 256 257 |
# File 'lib/xcodeproj/scheme.rb', line 251 def self.share_scheme(project_path, scheme_name, user = nil) to_folder = shared_data_dir(project_path) to_folder.mkpath to = to_folder + "#{scheme_name}.xcscheme" from = user_data_dir(project_path, user) + "#{scheme_name}.xcscheme" FileUtils.mv(from, to) end |
.shared_data_dir(project_path) ⇒ Pathname
261 262 263 264 |
# File 'lib/xcodeproj/scheme.rb', line 261 def self.shared_data_dir(project_path) project_path = Pathname.new(project_path) project_path + 'xcshareddata/xcschemes' end |
.user_data_dir(project_path, user = nil) ⇒ Pathname
268 269 270 271 272 |
# File 'lib/xcodeproj/scheme.rb', line 268 def self.user_data_dir(project_path, user = nil) project_path = Pathname.new(project_path) user ||= ENV['USER'] project_path + "xcuserdata/#{user}.xcuserdatad/xcschemes" end |
Instance Method Details
#add_build_target(build_target, build_for_running = true) ⇒ Object
Add a target to the list of targets to build in the build action.
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/xcodeproj/scheme.rb', line 197 def add_build_target(build_target, build_for_running = true) entry = BuildAction::Entry.new(build_target) entry.build_for_testing = true entry.build_for_running = build_for_running entry.build_for_profiling = build_for_running entry.build_for_archiving = build_for_running entry.build_for_analyzing = build_for_running build_action.add_entry(entry) end |
#add_test_target(test_target) ⇒ Object
Add a target to the list of targets to build in the build action.
214 215 216 217 |
# File 'lib/xcodeproj/scheme.rb', line 214 def add_test_target(test_target) testable = TestAction::TestableReference.new(test_target) test_action.add_testable(testable) end |
#analyze_action ⇒ XCScheme::AnalyzeAction
Returns The Analyze Action associated with this scheme.
158 159 160 |
# File 'lib/xcodeproj/scheme.rb', line 158 def analyze_action @analyze_action ||= AnalyzeAction.new(@scheme.elements['AnalyzeAction']) end |
#analyze_action=(action) ⇒ Object
165 166 167 168 169 |
# File 'lib/xcodeproj/scheme.rb', line 165 def analyze_action=(action) @scheme.delete_element('AnalyzeAction') @scheme.add_element(action.xml_element) @analyze_action = action end |
#archive_action ⇒ XCScheme::ArchiveAction
Returns The Archive Action associated with this scheme.
174 175 176 |
# File 'lib/xcodeproj/scheme.rb', line 174 def archive_action @archive_action ||= ArchiveAction.new(@scheme.elements['ArchiveAction']) end |
#archive_action=(action) ⇒ Object
181 182 183 184 185 |
# File 'lib/xcodeproj/scheme.rb', line 181 def archive_action=(action) @scheme.delete_element('ArchiveAction') @scheme.add_element(action.xml_element) @archive_action = action end |
#build_action ⇒ XCScheme::BuildAction
Returns The Build Action associated with this scheme.
94 95 96 |
# File 'lib/xcodeproj/scheme.rb', line 94 def build_action @build_action ||= BuildAction.new(@scheme.elements['BuildAction']) end |
#build_action=(action) ⇒ Object
101 102 103 104 105 |
# File 'lib/xcodeproj/scheme.rb', line 101 def build_action=(action) @scheme.delete_element('BuildAction') @scheme.add_element(action.xml_element) @build_action = action end |
#configure_with_targets(runnable_target, test_target, launch_target: false) ⇒ Object
Convenience method to quickly add app and test targets to a new scheme.
It will add the runnable_target to the Build, Launch and Profile actions and the test_target to the Build and Test actions
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/xcodeproj/scheme.rb', line 76 def configure_with_targets(runnable_target, test_target, launch_target: false) if runnable_target add_build_target(runnable_target) set_launch_target(runnable_target) if launch_target end if test_target add_build_target(test_target, false) if test_target != runnable_target add_test_target(test_target) end end |
#launch_action ⇒ XCScheme::LaunchAction
Returns The Launch Action associated with this scheme.
126 127 128 |
# File 'lib/xcodeproj/scheme.rb', line 126 def launch_action @launch_action ||= LaunchAction.new(@scheme.elements['LaunchAction']) end |
#launch_action=(action) ⇒ Object
133 134 135 136 137 |
# File 'lib/xcodeproj/scheme.rb', line 133 def launch_action=(action) @scheme.delete_element('LaunchAction') @scheme.add_element(action.xml_element) @launch_action = action end |
#profile_action ⇒ XCScheme::ProfileAction
Returns The Profile Action associated with this scheme.
142 143 144 |
# File 'lib/xcodeproj/scheme.rb', line 142 def profile_action @profile_action ||= ProfileAction.new(@scheme.elements['ProfileAction']) end |
#profile_action=(action) ⇒ Object
149 150 151 152 153 |
# File 'lib/xcodeproj/scheme.rb', line 149 def profile_action=(action) @scheme.delete_element('ProfileAction') @scheme.add_element(action.xml_element) @profile_action = action end |
#save! ⇒ Object
Serializes the current state of the object to the original “.xcscheme” file this XCScheme was created from, overriding the original file.
Requires that the XCScheme object was initialized using a file path.
333 334 335 336 337 338 339 |
# File 'lib/xcodeproj/scheme.rb', line 333 def save! raise Informative, 'This XCScheme object was not initialized ' \ 'using a file path. Use save_as instead.' unless @file_path File.open(@file_path, 'w') do |f| f.write(to_s) end end |
#save_as(project_path, name, shared = true) ⇒ void
This method returns an undefined value.
Serializes the current state of the object to a “.xcscheme” file.
314 315 316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/xcodeproj/scheme.rb', line 314 def save_as(project_path, name, shared = true) scheme_folder_path = if shared self.class.shared_data_dir(project_path) else self.class.user_data_dir(project_path) end scheme_folder_path.mkpath scheme_path = scheme_folder_path + "#{name}.xcscheme" @file_path = scheme_path File.open(scheme_path, 'w') do |f| f.write(to_s) end end |
#set_launch_target(build_target) ⇒ Object
Sets a runnable target to be the target of the launch action of the scheme.
224 225 226 227 228 229 230 231 232 233 |
# File 'lib/xcodeproj/scheme.rb', line 224 def set_launch_target(build_target) launch_runnable = BuildableProductRunnable.new(build_target, 0) launch_action.buildable_product_runnable = launch_runnable profile_runnable = BuildableProductRunnable.new(build_target, 0) profile_action.buildable_product_runnable = profile_runnable macro_exp = MacroExpansion.new(build_target) test_action.add_macro_expansion(macro_exp) end |
#test_action ⇒ XCScheme::TestAction
Returns The Test Action associated with this scheme.
110 111 112 |
# File 'lib/xcodeproj/scheme.rb', line 110 def test_action @test_action ||= TestAction.new(@scheme.elements['TestAction']) end |
#test_action=(action) ⇒ Object
117 118 119 120 121 |
# File 'lib/xcodeproj/scheme.rb', line 117 def test_action=(action) @scheme.delete_element('TestAction') @scheme.add_element(action.xml_element) @test_action = action end |
#to_s ⇒ String
The goal of the string representation is to match Xcode output as close as possible to aide comparison.
Serializes the current state of the object to a String.
287 288 289 290 291 292 293 294 295 |
# File 'lib/xcodeproj/scheme.rb', line 287 def to_s formatter = XMLFormatter.new(2) formatter.compact = false out = '' formatter.write(@doc, out) out.gsub!("<?xml version='1.0' encoding='UTF-8'?>", '<?xml version="1.0" encoding="UTF-8"?>') out << "\n" out end |