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/buildable_reference.rb,
lib/xcodeproj/scheme/xml_element_wrapper.rb,
lib/xcodeproj/scheme/abstract_scheme_action.rb,
lib/xcodeproj/scheme/buildable_product_runnable.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, LaunchAction, MacroExpansion, ProfileAction, TestAction, XMLElementWrapper, XMLFormatter
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) ⇒ 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
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/xcodeproj/scheme.rb', line 30 def initialize(file_path = nil) if file_path @file_path = file_path @doc = REXML::Document.new(File.new(file_path)) @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.
23 24 25 |
# File 'lib/xcodeproj/scheme.rb', line 23 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.
239 240 241 242 243 244 245 |
# File 'lib/xcodeproj/scheme.rb', line 239 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
249 250 251 252 |
# File 'lib/xcodeproj/scheme.rb', line 249 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
256 257 258 259 260 |
# File 'lib/xcodeproj/scheme.rb', line 256 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.
185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/xcodeproj/scheme.rb', line 185 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 = true entry.build_for_archiving = true entry.build_for_analyzing = true 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.
202 203 204 205 |
# File 'lib/xcodeproj/scheme.rb', line 202 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.
146 147 148 |
# File 'lib/xcodeproj/scheme.rb', line 146 def analyze_action @analyze_action ||= AnalyzeAction.new(@scheme.elements['AnalyzeAction']) end |
#analyze_action=(action) ⇒ Object
153 154 155 156 157 |
# File 'lib/xcodeproj/scheme.rb', line 153 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.
162 163 164 |
# File 'lib/xcodeproj/scheme.rb', line 162 def archive_action @archive_action ||= ArchiveAction.new(@scheme.elements['ArchiveAction']) end |
#archive_action=(action) ⇒ Object
169 170 171 172 173 |
# File 'lib/xcodeproj/scheme.rb', line 169 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.
82 83 84 |
# File 'lib/xcodeproj/scheme.rb', line 82 def build_action @build_action ||= BuildAction.new(@scheme.elements['BuildAction']) end |
#build_action=(action) ⇒ Object
89 90 91 92 93 |
# File 'lib/xcodeproj/scheme.rb', line 89 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) ⇒ 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
66 67 68 69 70 71 72 73 |
# File 'lib/xcodeproj/scheme.rb', line 66 def configure_with_targets(runnable_target, test_target) build_action.add_entry BuildAction::Entry.new(runnable_target) if runnable_target build_action.add_entry BuildAction::Entry.new(test_target) if test_target test_action.add_testable TestAction::TestableReference.new(test_target) if test_target launch_action.buildable_product_runnable = BuildableProductRunnable.new(runnable_target, 0) if runnable_target profile_action.buildable_product_runnable = BuildableProductRunnable.new(runnable_target) if runnable_target end |
#launch_action ⇒ XCScheme::LaunchAction
Returns The Launch Action associated with this scheme.
114 115 116 |
# File 'lib/xcodeproj/scheme.rb', line 114 def launch_action @launch_action ||= LaunchAction.new(@scheme.elements['LaunchAction']) end |
#launch_action=(action) ⇒ Object
121 122 123 124 125 |
# File 'lib/xcodeproj/scheme.rb', line 121 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.
130 131 132 |
# File 'lib/xcodeproj/scheme.rb', line 130 def profile_action @profile_action ||= ProfileAction.new(@scheme.elements['ProfileAction']) end |
#profile_action=(action) ⇒ Object
137 138 139 140 141 |
# File 'lib/xcodeproj/scheme.rb', line 137 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.
320 321 322 323 324 325 326 |
# File 'lib/xcodeproj/scheme.rb', line 320 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.
302 303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/xcodeproj/scheme.rb', line 302 def save_as(project_path, name, shared = true) if shared scheme_folder_path = self.class.shared_data_dir(project_path) else scheme_folder_path = self.class.user_data_dir(project_path) end scheme_folder_path.mkpath scheme_path = scheme_folder_path + "#{name}.xcscheme" 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.
212 213 214 215 216 217 218 219 220 221 |
# File 'lib/xcodeproj/scheme.rb', line 212 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) 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.
98 99 100 |
# File 'lib/xcodeproj/scheme.rb', line 98 def test_action @test_action ||= TestAction.new(@scheme.elements['TestAction']) end |
#test_action=(action) ⇒ Object
105 106 107 108 109 |
# File 'lib/xcodeproj/scheme.rb', line 105 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.
275 276 277 278 279 280 281 282 283 |
# File 'lib/xcodeproj/scheme.rb', line 275 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 |