Class: Xcake::Xcode::SchemeList

Inherits:
Object
  • Object
show all
Defined in:
lib/xcake/xcode/scheme_list.rb

Overview

This class is used to represent a list of Schemes.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(project) ⇒ 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

#projectProject



10
11
12
# File 'lib/xcake/xcode/scheme_list.rb', line 10

def project
  @project
end

#schemesArray<Scheme>



14
15
16
# File 'lib/xcake/xcode/scheme_list.rb', line 14

def schemes
  @schemes
end

#xcschememanagementHash<String, Object>



19
20
21
# File 'lib/xcake/xcode/scheme_list.rb', line 19

def xcschememanagement
  @xcschememanagement
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_schemesObject

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