Class: Xcake::Xcode::SchemeList
- Defined in:
- lib/xcake/xcode/scheme_list.rb
Overview
This class is used to represent a list of Schemes.
Instance Attribute Summary collapse
-
#project ⇒ Project
The project for the scheme list.
-
#schemes ⇒ Array<Scheme>
The schemes in the list.
-
#xcschememanagement ⇒ Hash<String, Object>
Xcschememanagementfile contents.
Instance Method Summary collapse
-
#create_schemes_for_application(target) ⇒ Object
Creates schemes based on a application target.
-
#create_schemes_for_target(target) ⇒ Object
Creates schemes based on a target.
-
#initialize(project) ⇒ SchemeList
constructor
A new instance of SchemeList.
-
#recreate_schemes ⇒ Object
Creates the schemes based on the targets.
-
#save(writing_path) ⇒ Object
Writes scheme list data.
- #write_plist(xcschememanagement_path) ⇒ Object private
Constructor Details
#initialize(project) ⇒ SchemeList
Returns a new instance of SchemeList.
26 27 28 29 30 31 32 33 34 |
# File 'lib/xcake/xcode/scheme_list.rb', line 26 def initialize(project) @project = project @schemes = [] @xcschememanagement = { 'SchemeUserState' => {}, 'SuppressBuildableAutocreation' => {} } end |
Instance Attribute Details
#project ⇒ Project
Returns the project for the scheme list.
10 11 12 |
# File 'lib/xcake/xcode/scheme_list.rb', line 10 def project @project end |
Instance Method Details
#create_schemes_for_application(target) ⇒ Object
Creates schemes based on a application target
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/xcake/xcode/scheme_list.rb', line 61 def create_schemes_for_application(target) target.build_configurations.each do |c| scheme = Scheme.new scheme.name = "#{target.name}-#{c.name}" @xcschememanagement['SuppressBuildableAutocreation'][target.uuid] = { 'primary' => true } unit_test_target = project.find_unit_test_target_for_target(target) scheme.configure_with_targets(target, unit_test_target) scheme.test_action.build_configuration = c.name scheme.launch_action.build_configuration = c.name scheme.profile_action.build_configuration = c.name scheme.analyze_action.build_configuration = c.name scheme.archive_action.build_configuration = c.name # TODO: We should structure this stuff out if unit_test_target unit_test_target.add_dependency(target) @xcschememanagement['SuppressBuildableAutocreation'][unit_test_target.uuid] = { 'primary' => true } end schemes << scheme end end |
#create_schemes_for_target(target) ⇒ Object
Creates schemes based on a target.
49 50 51 52 53 54 |
# File 'lib/xcake/xcode/scheme_list.rb', line 49 def create_schemes_for_target(target) case target.product_type when Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application] create_schemes_for_application(target) end end |
#recreate_schemes ⇒ Object
Creates the schemes based on the targets.
38 39 40 41 42 |
# File 'lib/xcake/xcode/scheme_list.rb', line 38 def recreate_schemes @project.targets.each do |t| create_schemes_for_target(t) end end |
#save(writing_path) ⇒ Object
Writes scheme list data.
TODO: Move to a Generator
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/xcake/xcode/scheme_list.rb', line 94 def save(writing_path) schemes_dir = Scheme.user_data_dir(writing_path) FileUtils.rm_rf(schemes_dir) FileUtils.mkdir_p(schemes_dir) schemes.each do |s| s.save_as(@project.path, s.name, true) @xcschememanagement['SchemeUserState']["#{s.name}.xcscheme_^#shared#^_"] = { 'isShown' => true } end xcschememanagement_path = schemes_dir + 'xcschememanagement.plist' write_plist(xcschememanagement_path) end |
#write_plist(xcschememanagement_path) ⇒ Object (private)
114 115 116 117 118 119 120 |
# File 'lib/xcake/xcode/scheme_list.rb', line 114 def write_plist(xcschememanagement_path) if Xcake.modern_xcodeproj? Xcodeproj::Plist.write_to_path(@xcschememanagement, xcschememanagement_path) else Xcodeproj.write_plist(@xcschememanagement, xcschememanagement_path) end end |