Class: Pod::Project

Inherits:
Xcodeproj::Project
  • Object
show all
Defined in:
lib/cocoapods/project.rb

Overview

The Pods project.

Model class which provides helpers for working with the Pods project through the installation process.

Constant Summary

LEGACY_BUILD_ROOT =

————————————————————————-#

'${SRCROOT}/../build'
SPEC_SUBGROUPS =
{
  :resources  => 'Resources',
  :frameworks => 'Frameworks',
}

Instance Attribute Summary collapse

Legacy Xcode build root collapse

Pod Groups collapse

File references collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, skip_initialization = false, object_version = Xcodeproj::Constants::DEFAULT_OBJECT_VERSION) ⇒ Project

Initialize a new instance



19
20
21
22
23
24
25
26
27
28
# File 'lib/cocoapods/project.rb', line 19

def initialize(path, skip_initialization = false,
    object_version = Xcodeproj::Constants::DEFAULT_OBJECT_VERSION)
  super(path, skip_initialization, object_version)
  @support_files_group = new_group('Targets Support Files')
  @refs_by_absolute_path = {}
  @variant_groups_by_path_and_name = {}
  @pods = new_group('Pods')
  @development_pods = new_group('Development Pods')
  self.symroot = LEGACY_BUILD_ROOT
end

Instance Attribute Details

#development_podsPBXGroup (readonly)



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

def development_pods
  @development_pods
end

#podsPBXGroup (readonly)



37
38
39
# File 'lib/cocoapods/project.rb', line 37

def pods
  @pods
end

#support_files_groupPBXGroup (readonly)



33
34
35
# File 'lib/cocoapods/project.rb', line 33

def support_files_group
  @support_files_group
end

Instance Method Details

#add_build_configuration(name, type) ⇒ XCBuildConfiguration

Note:

This method extends the original Xcodeproj implementation to include a preprocessor definition named after the build setting. This is done to support the TargetEnvironmentHeader specification of Pods available only on certain build configurations.

Adds a new build configuration to the project and populates it with default settings according to the provided type.



247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# File 'lib/cocoapods/project.rb', line 247

def add_build_configuration(name, type)
  build_configuration = super
  settings = build_configuration.build_settings
  definitions = settings['GCC_PREPROCESSOR_DEFINITIONS'] || ['$(inherited)']
  defines = [defininition_for_build_configuration(name)]
  defines << 'DEBUG' if type == :debug
  defines.each do |define|
    value = "#{define}=1"
    unless definitions.include?(value)
      definitions.unshift(value)
    end
  end
  settings['GCC_PREPROCESSOR_DEFINITIONS'] = definitions

  if type == :debug
    settings['SWIFT_ACTIVE_COMPILATION_CONDITIONS'] = 'DEBUG'
  end

  build_configuration
end

#add_file_reference(absolute_path, group, reflect_file_system_structure = false, base_path = nil) ⇒ PBXFileReference

Adds a file reference to given path as a child of the given group.



186
187
188
189
190
191
192
193
194
195
196
# File 'lib/cocoapods/project.rb', line 186

def add_file_reference(absolute_path, group, reflect_file_system_structure = false, base_path = nil)
  file_path_name = absolute_path.is_a?(Pathname) ? absolute_path : Pathname.new(absolute_path)
  group = group_for_path_in_group(file_path_name, group, reflect_file_system_structure, base_path)
  if ref = reference_for_path(file_path_name.realpath)
    @refs_by_absolute_path[absolute_path.to_s] = ref
    ref
  else
    ref = group.new_file(file_path_name.realpath)
    @refs_by_absolute_path[absolute_path.to_s] = ref
  end
end

#add_pod_group(pod_name, path, development = false, absolute = false) ⇒ PBXGroup

Creates a new group for the Pod with the given name and configures its path.



84
85
86
87
88
89
90
91
92
# File 'lib/cocoapods/project.rb', line 84

def add_pod_group(pod_name, path, development = false, absolute = false)
  raise '[BUG]' if pod_group(pod_name)

  parent_group = development ? development_pods : pods
  source_tree = absolute ? :absolute : :group

  group = parent_group.new_group(pod_name, path, source_tree)
  group
end

#add_podfile(podfile_path) ⇒ PBXFileReference

Adds a file reference to the Podfile.



221
222
223
224
225
226
227
# File 'lib/cocoapods/project.rb', line 221

def add_podfile(podfile_path)
  new_file(podfile_path, :project).tap do |podfile_ref|
    podfile_ref.xc_language_specification_identifier = 'xcode.lang.ruby'
    podfile_ref.explicit_file_type = 'text.script.ruby'
    podfile_ref.last_known_file_type = 'text'
  end
end

#defininition_for_build_configuration(name) ⇒ String



273
274
275
# File 'lib/cocoapods/project.rb', line 273

def defininition_for_build_configuration(name)
  "POD_CONFIGURATION_#{name.underscore}".gsub(/[^a-zA-Z0-9_]/, '_').upcase
end

#group_for_spec(spec_name, subgroup_key = nil) ⇒ PBXGroup

Returns the group for the specification with the give name creating it if needed.



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'lib/cocoapods/project.rb', line 126

def group_for_spec(spec_name, subgroup_key = nil)
  pod_name = Specification.root_name(spec_name)
  group = pod_group(pod_name)
  raise "[Bug] Unable to locate group for Pod named `#{pod_name}`" unless group
  if spec_name != pod_name
    subspecs_names = spec_name.gsub(pod_name + '/', '').split('/')
    subspecs_names.each do |name|
      group = group[name] || group.new_group(name)
    end
  end

  if subgroup_key
    subgroup_name = SPEC_SUBGROUPS[subgroup_key]
    raise ArgumentError, "Unrecognized subgroup key `#{subgroup_key}`" unless subgroup_name
    group = group[subgroup_name] || group.new_group(subgroup_name)
  end

  group
end

#pod_group(pod_name) ⇒ PBXGroup

Returns the group for the Pod with the given name.



107
108
109
# File 'lib/cocoapods/project.rb', line 107

def pod_group(pod_name)
  pod_groups.find { |group| group.name == pod_name }
end

#pod_groupsArray<PBXGroup>



96
97
98
# File 'lib/cocoapods/project.rb', line 96

def pod_groups
  pods.children.objects + development_pods.children.objects
end

#pod_support_files_group(pod_name, dir) ⇒ PBXGroup

Returns the support files group for the Pod with the given name.



153
154
155
156
157
158
159
160
# File 'lib/cocoapods/project.rb', line 153

def pod_support_files_group(pod_name, dir)
  group = pod_group(pod_name)
  support_files_group = group['Support Files']
  unless support_files_group
    support_files_group = group.new_group('Support Files', dir)
  end
  support_files_group
end

#reference_for_path(absolute_path) ⇒ PBXFileReference, Nil

Returns the file reference for the given absolute path.



206
207
208
209
210
211
212
# File 'lib/cocoapods/project.rb', line 206

def reference_for_path(absolute_path)
  unless Pathname.new(absolute_path).absolute?
    raise ArgumentError, "Paths must be absolute #{absolute_path}"
  end

  refs_by_absolute_path[absolute_path.to_s]
end

#symroot=(symroot) ⇒ void



56
57
58
59
60
# File 'lib/cocoapods/project.rb', line 56

def symroot=(symroot)
  root_object.build_configuration_list.build_configurations.each do |config|
    config.build_settings['SYMROOT'] = symroot
  end
end