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

Returns a new instance of SchemeList.

Parameters:

  • project (Project)

    project to create scheme list for.



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

Returns the project for the scheme list.

Returns:

  • (Project)

    the project for the scheme list



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

def project
  @project
end

#schemesArray<Scheme>

Returns the schemes in the list.

Returns:



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

def schemes
  @schemes
end

#xcschememanagementHash<String, Object>

Returns xcschememanagementfile contents.

Returns:

  • (Hash<String, Object>)

    xcschememanagementfile contents



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

Parameters:

  • target (Target)

    target to create application schemes for



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.

Parameters:

  • target (Target)

    target to create schemes for



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

Parameters:

  • writing_path (String)

    path to write to.



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