Class: Xcake::Xcode::Project

Inherits:
Xcodeproj::Project show all
Defined in:
lib/xcake/xcode/project.rb

Instance Method Summary collapse

Instance Method Details

#attributesHash

Returns the attributes of the project.

Returns:

  • (Hash)

    the attributes of the project



9
10
11
# File 'lib/xcake/xcode/project.rb', line 9

def attributes
  root_object.attributes
end

#class_prefixString

Returns the class name for the project.

Returns:

  • (String)

    the class name for the project



15
16
17
# File 'lib/xcake/xcode/project.rb', line 15

def class_prefix
  attributes['CLASSPREFIX']
end

#class_prefix=(class_prefix) ⇒ String

Sets the class prefix for the project

Parameters:

Returns:

  • (String)

    the class name for the project



25
26
27
# File 'lib/xcake/xcode/project.rb', line 25

def class_prefix=(class_prefix)
  attributes['CLASSPREFIX'] = class_prefix
end

#file_reference_for_path(path) ⇒ PBXFileReference

Creates a new xcode file reference from the node

=> path of the file reference from the source root

Parameters:

  • path (Pathname)

Returns:

  • (PBXFileReference)

    new xcode file refrence



124
125
126
127
128
129
130
# File 'lib/xcake/xcode/project.rb', line 124

def file_reference_for_path(path)
  group = group_for_file_reference_path(path)
  group_path = Pathname.new group.dirname

  file_path = path.cleanpath.relative_path_from group_path
  group.new_reference(file_path.to_s)
end

#find_unit_test_target_for_target(target) ⇒ Target

Finds a unit test target for a xcode target

Parameters:

  • target (Target)

    target to find a xcode target for.

Returns:

  • (Target)

    unit test target



176
177
178
179
180
# File 'lib/xcake/xcode/project.rb', line 176

def find_unit_test_target_for_target(target)
  targets.find do |t|
    t.name == "#{target.name}Tests"
  end
end

#group_for_file_reference_path(path) ⇒ Object



132
133
134
135
136
137
# File 'lib/xcake/xcode/project.rb', line 132

def group_for_file_reference_path(path)
  clean_path = path.cleanpath
  group = variant_group_for_path(path)
  group = group_for_path(path) unless group
  group
end

#group_for_path(path) ⇒ Object (private)



160
161
162
163
164
165
# File 'lib/xcake/xcode/project.rb', line 160

def group_for_path(path)
  group_path = path.dirname.cleanpath

  return main_group unless group_path.to_s != '.'
  main_group.child_for_path(group_path.to_s)
end

#new_configuration(_configuration) ⇒ Configurarion

Creates a new xcode configuration from the configuration DSL

Parameters:

  • configuration (Configurarion)

    configuration DSL to create target from

Returns:

  • (Configurarion)

    new xcode configuration



113
114
115
# File 'lib/xcake/xcode/project.rb', line 113

def new_configuration(_configuration)
  new(Xcodeproj::Project::Object::XCBuildConfiguration)
end

#new_target(target) ⇒ Target

Creates a new xcode target from the target DSL

Parameters:

  • target (Target)

    target DSL to create target from

Returns:

  • (Target)

    new xcode target



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/xcake/xcode/project.rb', line 85

def new_target(target)
  native_target = new(Xcodeproj::Project::Object::PBXNativeTarget)
  native_target.name = target.name
  native_target.product_name = target.name

  case target.type
  when Symbol
    native_target.product_type = Xcodeproj::Constants::PRODUCT_TYPE_UTI[target.type]
  when String
    native_target.product_type = target.type
  end

  native_target.build_configuration_list = new(Xcodeproj::Project::Object::XCConfigurationList)

  product = products_group.new_product_ref_for_target(native_target.product_name, native_target.product_type)
  native_target.product_reference = product

  targets << native_target
  native_target
end

#object_versionObject



51
52
53
# File 'lib/xcake/xcode/project.rb', line 51

def object_version
  Xcodeproj::Constants::DEFAULT_OBJECT_VERSION.to_s
end

#organizationString

Returns the organization for the project.

Returns:

  • (String)

    the organization for the project



31
32
33
# File 'lib/xcake/xcode/project.rb', line 31

def organization
  attributes['ORGANIZATIONNAME']
end

#organization=(organization) ⇒ SchemeList

Sets the organization for the project

Parameters:

Returns:

  • (SchemeList)

    the organization for the project



41
42
43
# File 'lib/xcake/xcode/project.rb', line 41

def organization=(organization)
  attributes['ORGANIZATIONNAME'] = organization
end

#recreate_user_schemesObject



55
56
57
58
# File 'lib/xcake/xcode/project.rb', line 55

def recreate_user_schemes(*)
  scheme_list.recreate_schemes
  scheme_list.save(path)
end

#scheme_listSchemeList

Returns the scheme list.

Returns:



47
48
49
# File 'lib/xcake/xcode/project.rb', line 47

def scheme_list
  @scheme_list ||= SchemeList.new(self)
end

#setup_for_xcakeObject

Configures the Project for use with Xcake. This makes sure we have sensible defaults and it as clean as possible.



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/xcake/xcode/project.rb', line 64

def setup_for_xcake
  root_object.remove_referrer(self) if root_object
  root_object = new(Project::Object::PBXProject)
  root_object.add_referrer(self)

  config_list = new(XCConfigurationList)
  root_object.build_configuration_list = config_list

  root_object.main_group = new(PBXGroup)
  root_object.product_ref_group = root_object.main_group.new_group('Products')

  @root_object = root_object
end

#variant_group_for_path(path) ⇒ Object (private)



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'lib/xcake/xcode/project.rb', line 141

def variant_group_for_path(path)
  group_path = path.dirname.cleanpath
  base_name = group_path.basename

  return nil unless base_name.to_s.include?('.lproj')
  parent_group = group_for_path(group_path)

  group = parent_group[path.basename.to_s]

  unless group
    group = new(PBXVariantGroup)
    group.name = path.basename.to_s
    group.set_source_tree(:group)
    parent_group.children << group
  end

  group
end