class Xcodeproj::XCScheme


folder.
usually stored in a xcuserdata or xcshareddata (for a shared scheme)
This class represents a Scheme document represented by a “.xcscheme” file

def self.share_scheme(project_path, scheme_name, user = nil)

Parameters:
  • user (String) --
  • scheme_name (String) --
  • project_path (String) --
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

def self.shared_data_dir(project_path)

Returns:
  • (Pathname) -
def self.shared_data_dir(project_path)
  project_path = Pathname.new(project_path)
  project_path + 'xcshareddata/xcschemes'
end

def self.user_data_dir(project_path, user = nil)

Returns:
  • (Pathname) -
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

def add_build_target(build_target, build_for_running = true)

Parameters:
  • build_for_running (Bool) --
  • build_target (Xcodeproj::Project::Object::AbstractTarget) --
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

def add_test_target(test_target)

Parameters:
  • test_target (Xcodeproj::Project::Object::AbstractTarget) --
def add_test_target(test_target)
  testable = TestAction::TestableReference.new(test_target)
  test_action.add_testable(testable)
end

def analyze_action

Returns:
  • (XCScheme::AnalyzeAction) -
def analyze_action
  @analyze_action ||= AnalyzeAction.new(@scheme.elements['AnalyzeAction'])
end

def analyze_action=(action)

Parameters:
  • action (XCScheme::AnalyzeAction) --
def analyze_action=(action)
  @scheme.delete_element('AnalyzeAction')
  @scheme.add_element(action.xml_element)
  @analyze_action = action
end

def archive_action

Returns:
  • (XCScheme::ArchiveAction) -
def archive_action
  @archive_action ||= ArchiveAction.new(@scheme.elements['ArchiveAction'])
end

def archive_action=(action)

Parameters:
  • action (XCScheme::ArchiveAction) --
def archive_action=(action)
  @scheme.delete_element('ArchiveAction')
  @scheme.add_element(action.xml_element)
  @archive_action = action
end

def build_action

Returns:
  • (XCScheme::BuildAction) -
def build_action
  @build_action ||= BuildAction.new(@scheme.elements['BuildAction'])
end

def build_action=(action)

Parameters:
  • action (XCScheme::BuildAction) --
def build_action=(action)
  @scheme.delete_element('BuildAction')
  @scheme.add_element(action.xml_element)
  @build_action = action
end

def configure_with_targets(runnable_target, test_target, launch_target: false)

Parameters:
  • launch_target (Boolean) --
  • test_target (Xcodeproj::Project::Object::PBXAbstractTarget) --
  • runnable_target (Xcodeproj::Project::Object::PBXAbstractTarget) --
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

def initialize(file_path = nil)

Parameters:
  • file_path (String) --
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

def launch_action

Returns:
  • (XCScheme::LaunchAction) -
def launch_action
  @launch_action ||= LaunchAction.new(@scheme.elements['LaunchAction'])
end

def launch_action=(action)

Parameters:
  • action (XCScheme::LaunchAction) --
def launch_action=(action)
  @scheme.delete_element('LaunchAction')
  @scheme.add_element(action.xml_element)
  @launch_action = action
end

def profile_action

Returns:
  • (XCScheme::ProfileAction) -
def profile_action
  @profile_action ||= ProfileAction.new(@scheme.elements['ProfileAction'])
end

def profile_action=(action)

Parameters:
  • action (XCScheme::ProfileAction) --
def profile_action=(action)
  @scheme.delete_element('ProfileAction')
  @scheme.add_element(action.xml_element)
  @profile_action = action
end

def save!


Requires that the XCScheme object was initialized using a file path.

file this XCScheme was created from, overriding the original file.
Serializes the current state of the object to the original ".xcscheme"
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

def save_as(project_path, name, shared = true)

Other tags:
    Example: Saving a scheme -

Returns:
  • (void) -

Parameters:
  • shared (Boolean) --
  • name (String) --
  • project_path (String, Pathname) --
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

def set_launch_target(build_target)

Parameters:
  • build_target (Xcodeproj::Project::Object::AbstractTarget) --
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

def test_action

Returns:
  • (XCScheme::TestAction) -
def test_action
  @test_action ||= TestAction.new(@scheme.elements['TestAction'])
end

def test_action=(action)

Parameters:
  • action (XCScheme::TestAction) --
def test_action=(action)
  @scheme.delete_element('TestAction')
  @scheme.add_element(action.xml_element)
  @test_action = action
end

def to_s

Returns:
  • (String) - the XML string value of the current state of the object.

Other tags:
    Note: - The goal of the string representation is to match Xcode output as
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