xcodeproj 0.18.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/bin/xcodeproj +5 -5
  3. data/lib/xcodeproj.rb +0 -2
  4. data/lib/xcodeproj/command.rb +26 -17
  5. data/lib/xcodeproj/command/project_diff.rb +8 -11
  6. data/lib/xcodeproj/command/show.rb +8 -10
  7. data/lib/xcodeproj/command/sort.rb +4 -7
  8. data/lib/xcodeproj/command/target_diff.rb +4 -5
  9. data/lib/xcodeproj/config.rb +64 -57
  10. data/lib/xcodeproj/config/other_linker_flags_parser.rb +62 -0
  11. data/lib/xcodeproj/constants.rb +31 -30
  12. data/lib/xcodeproj/differ.rb +5 -9
  13. data/lib/xcodeproj/gem_version.rb +1 -2
  14. data/lib/xcodeproj/helper.rb +5 -4
  15. data/lib/xcodeproj/plist_helper.rb +46 -11
  16. data/lib/xcodeproj/project.rb +16 -20
  17. data/lib/xcodeproj/project/case_converter.rb +59 -0
  18. data/lib/xcodeproj/project/object.rb +40 -30
  19. data/lib/xcodeproj/project/object/build_configuration.rb +1 -5
  20. data/lib/xcodeproj/project/object/build_file.rb +1 -4
  21. data/lib/xcodeproj/project/object/build_phase.rb +2 -13
  22. data/lib/xcodeproj/project/object/build_rule.rb +0 -3
  23. data/lib/xcodeproj/project/object/configuration_list.rb +0 -4
  24. data/lib/xcodeproj/project/object/container_item_proxy.rb +2 -4
  25. data/lib/xcodeproj/project/object/file_reference.rb +3 -6
  26. data/lib/xcodeproj/project/object/group.rb +6 -14
  27. data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +64 -13
  28. data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +4 -6
  29. data/lib/xcodeproj/project/object/native_target.rb +18 -29
  30. data/lib/xcodeproj/project/object/reference_proxy.rb +0 -4
  31. data/lib/xcodeproj/project/object/root_object.rb +4 -8
  32. data/lib/xcodeproj/project/object/target_dependency.rb +1 -4
  33. data/lib/xcodeproj/project/object_attributes.rb +76 -33
  34. data/lib/xcodeproj/project/object_dictionary.rb +76 -63
  35. data/lib/xcodeproj/project/object_list.rb +5 -9
  36. data/lib/xcodeproj/project/project_helper.rb +2 -7
  37. data/lib/xcodeproj/project/xcproj_helper.rb +0 -2
  38. data/lib/xcodeproj/scheme.rb +12 -15
  39. data/lib/xcodeproj/user_interface.rb +0 -4
  40. data/lib/xcodeproj/workspace.rb +36 -23
  41. data/lib/xcodeproj/workspace/file_reference.rb +3 -3
  42. data/lib/xcodeproj/xcodebuild_helper.rb +0 -6
  43. metadata +20 -18
@@ -1,7 +1,6 @@
1
1
  module Xcodeproj
2
2
  class Project
3
3
  module Object
4
-
5
4
  # Apparently a proxy for another object which might belong another
6
5
  # project contained in the same workspace of the project document.
7
6
  #
@@ -19,7 +18,6 @@ module Xcodeproj
19
18
  # xcodeproj to raise because ti can't find the UUID.
20
19
  #
21
20
  class PBXContainerItemProxy < AbstractObject
22
-
23
21
  # @!group Attributes
24
22
 
25
23
  # @return [String] apparently the UUID of the root object
@@ -38,7 +36,8 @@ module Xcodeproj
38
36
  # If this assumption is incorrect, there could be loss of
39
37
  # information opening and saving an existing project.
40
38
  #
41
- # TODO this is the external reference that 'contains' other proxy items
39
+ # @todo This is the external reference that 'contains' other proxy
40
+ # items.
42
41
  attribute :container_portal, String
43
42
 
44
43
  # @return [String] the type of the proxy.
@@ -66,7 +65,6 @@ module Xcodeproj
66
65
  # the proxy.
67
66
  #
68
67
  attribute :remote_info, String
69
-
70
68
  end
71
69
  end
72
70
  end
@@ -3,11 +3,9 @@ require 'xcodeproj/project/object/helpers/groupable_helper'
3
3
  module Xcodeproj
4
4
  class Project
5
5
  module Object
6
-
7
6
  # This class represents a reference to a file in the file system.
8
7
  #
9
8
  class PBXFileReference < AbstractObject
10
-
11
9
  # @!group Attributes
12
10
 
13
11
  # @return [String] the name of the reference, often not present.
@@ -245,7 +243,7 @@ module Xcodeproj
245
243
  #
246
244
  def project_reference_metadata
247
245
  project.root_object.project_references.find do |project_reference|
248
- project_reference['ProjectRef'] == self
246
+ project_reference[:project_ref] == self
249
247
  end
250
248
  end
251
249
 
@@ -259,7 +257,7 @@ module Xcodeproj
259
257
  def proxy_containers
260
258
  project.objects.select do |object|
261
259
  object.isa == 'PBXContainerItemProxy' &&
262
- object.container_portal == self.uuid
260
+ object.container_portal == uuid
263
261
  end
264
262
  end
265
263
 
@@ -313,14 +311,13 @@ module Xcodeproj
313
311
  if project_reference = project_reference_metadata
314
312
  file_reference_proxies.each(&:remove_from_project)
315
313
  target_dependency_proxies.each(&:remove_from_project)
316
- project_reference['ProductGroup'].remove_from_project
314
+ project_reference[:product_group].remove_from_project
317
315
  project.root_object.project_references.delete(project_reference)
318
316
  end
319
317
  super
320
318
  end
321
319
 
322
320
  #---------------------------------------------------------------------#
323
-
324
321
  end
325
322
  end
326
323
  end
@@ -4,12 +4,10 @@ require 'xcodeproj/project/object/helpers/file_references_factory'
4
4
  module Xcodeproj
5
5
  class Project
6
6
  module Object
7
-
8
7
  # This class represents a group. A group can contain other groups
9
8
  # (PBXGroup) and file references (PBXFileReference).
10
9
  #
11
10
  class PBXGroup < AbstractObject
12
-
13
11
  # @!group Attributes
14
12
 
15
13
  # @return [ObjectList<PBXGroup, PBXFileReference>]
@@ -78,7 +76,6 @@ module Xcodeproj
78
76
  #
79
77
  attribute :comments, String
80
78
 
81
-
82
79
  public
83
80
 
84
81
  # @!group Helpers
@@ -223,7 +220,7 @@ module Xcodeproj
223
220
  def new_reference(path, source_tree = :group)
224
221
  FileReferencesFactory.new_reference(self, path, source_tree)
225
222
  end
226
- alias :new_file :new_reference
223
+ alias_method :new_file, :new_reference
227
224
 
228
225
  # Creates a file reference to a static library and adds it to the
229
226
  # group.
@@ -280,7 +277,7 @@ module Xcodeproj
280
277
  def clear
281
278
  children.objects.each(&:remove_from_project)
282
279
  end
283
- alias :remove_children_recursively :clear
280
+ alias_method :remove_children_recursively, :clear
284
281
 
285
282
  # Traverses the children groups and finds the children with the given
286
283
  # path, optionally, creating any needed group. If the given path is
@@ -306,7 +303,7 @@ module Xcodeproj
306
303
  return self unless path
307
304
  path = path.split('/') unless path.is_a?(Array)
308
305
  child_name = path.shift
309
- child = children.find{ |c| c.display_name == child_name }
306
+ child = children.find { |c| c.display_name == child_name }
310
307
  if child.nil?
311
308
  if should_create
312
309
  child = new_group(child_name)
@@ -351,7 +348,7 @@ module Xcodeproj
351
348
  if extname_x != extname_y
352
349
  extname_x <=> extname_y
353
350
  else
354
- File.basename(x.display_name, ".*" ) <=> File.basename(y.display_name, ".*" )
351
+ File.basename(x.display_name, '.*') <=> File.basename(y.display_name, '.*')
355
352
  end
356
353
  else
357
354
  0
@@ -364,7 +361,7 @@ module Xcodeproj
364
361
  # @return [void]
365
362
  #
366
363
  def sort_recursively_by_type
367
- groups.each { |group| group.sort_recursively_by_type }
364
+ groups.each(&:sort_recursively_by_type)
368
365
  sort_by_type
369
366
  end
370
367
 
@@ -408,7 +405,7 @@ module Xcodeproj
408
405
  end
409
406
  end
410
407
 
411
- result = File.basename(x.display_name, ".*" ) <=> File.basename(y.display_name, ".*" )
408
+ result = File.basename(x.display_name, '.*') <=> File.basename(y.display_name, '.*')
412
409
  if result.zero?
413
410
  File.extname(x.display_name) <=> File.extname(y.display_name)
414
411
  else
@@ -423,13 +420,11 @@ module Xcodeproj
423
420
  # This class is used to gather localized files into one entry.
424
421
  #
425
422
  class PBXVariantGroup < PBXGroup
426
-
427
423
  # @!group Attributes
428
424
 
429
425
  # @return [String] the file type guessed by Xcode.
430
426
  #
431
427
  attribute :last_known_file_type, String
432
-
433
428
  end
434
429
 
435
430
  #-----------------------------------------------------------------------#
@@ -440,7 +435,6 @@ module Xcodeproj
440
435
  # Used to contain the different versions of a `xcdatamodel`.
441
436
  #
442
437
  class XCVersionGroup < PBXGroup
443
-
444
438
  # @!group Attributes
445
439
 
446
440
  # @return [PBXFileReference] the reference to the current version.
@@ -450,11 +444,9 @@ module Xcodeproj
450
444
  # @return [String] the type of the versioned resource.
451
445
  #
452
446
  attribute :version_group_type, String, 'wrapper.xcdatamodel'
453
-
454
447
  end
455
448
 
456
449
  #-----------------------------------------------------------------------#
457
-
458
450
  end
459
451
  end
460
452
  end
@@ -5,7 +5,6 @@ module Xcodeproj
5
5
  module Object
6
6
  class FileReferencesFactory
7
7
  class << self
8
-
9
8
  # Creates a new reference with the given path and adds it to the
10
9
  # given group. The reference is configured according to the extension
11
10
  # of the path.
@@ -23,11 +22,14 @@ module Xcodeproj
23
22
  # @return [PBXFileReference, XCVersionGroup] The new reference.
24
23
  #
25
24
  def new_reference(group, path, source_tree)
26
- if File.extname(path).downcase == '.xcdatamodeld'
27
- ref = new_xcdatamodeld(group, path, source_tree)
28
- else
29
- ref = new_file_reference(group, path, source_tree)
30
- end
25
+ ref = case File.extname(path).downcase
26
+ when '.xcdatamodeld'
27
+ new_xcdatamodeld(group, path, source_tree)
28
+ when '.xcodeproj'
29
+ new_subproject(group, path, source_tree)
30
+ else
31
+ new_file_reference(group, path, source_tree)
32
+ end
31
33
 
32
34
  configure_defaults_for_file_reference(ref)
33
35
  ref
@@ -69,11 +71,10 @@ module Xcodeproj
69
71
  def new_bundle(group, product_name)
70
72
  ref = new_reference(group, "#{product_name}.bundle", :built_products)
71
73
  ref.include_in_index = '0'
72
- ref.set_explicit_file_type("wrapper.cfbundle")
74
+ ref.set_explicit_file_type('wrapper.cfbundle')
73
75
  ref
74
76
  end
75
77
 
76
-
77
78
  private
78
79
 
79
80
  # @group Private Helpers
@@ -135,8 +136,7 @@ module Xcodeproj
135
136
  if path.exist?
136
137
  path.children.each do |child_path|
137
138
  if File.extname(child_path) == '.xcdatamodel'
138
- child_ref = new_file_reference(ref, child_path, :group)
139
- last_child_ref = child_ref
139
+ new_file_reference(ref, child_path, :group)
140
140
  elsif File.basename(child_path) == '.xccurrentversion'
141
141
  full_path = path + File.basename(child_path)
142
142
  xccurrentversion = Xcodeproj::PlistHelper.read(full_path)
@@ -146,7 +146,7 @@ module Xcodeproj
146
146
 
147
147
  if current_version_name
148
148
  ref.current_version = ref.children.find do |obj|
149
- obj.path.split('/').last == current_version_name
149
+ obj.path.split('/').last == current_version_name
150
150
  end
151
151
  end
152
152
  end
@@ -154,6 +154,59 @@ module Xcodeproj
154
154
  ref
155
155
  end
156
156
 
157
+ # Creates a file reference to another Xcode subproject and setups the
158
+ # proxies to the targets.
159
+ #
160
+ # @param [PBXGroup] group
161
+ # The group to which to add the reference.
162
+ #
163
+ # @param [#to_s] path
164
+ # The, preferably absolute, path of the reference.
165
+ #
166
+ # @param [Symbol] source_tree
167
+ # The source tree key to use to configure the path (@see
168
+ # GroupableHelper::SOURCE_TREES_BY_KEY).
169
+ #
170
+ # @note To analyze the targets the given project is read and thus
171
+ # it should already exist in the disk.
172
+ #
173
+ # @return [PBXFileReference] The new file reference.
174
+ #
175
+ def new_subproject(group, path, source_tree)
176
+ ref = new_file_reference(group, path, source_tree)
177
+ ref.include_in_index = nil
178
+
179
+ product_group_ref = group.project.new(PBXGroup)
180
+ product_group_ref.name = 'Products'
181
+ product_group_ref.source_tree = '<group>'
182
+
183
+ subproj = Project.open(path)
184
+ subproj.products_group.files.each do |product_reference|
185
+ container_proxy = group.project.new(PBXContainerItemProxy)
186
+ container_proxy.container_portal = ref.uuid
187
+ container_proxy.proxy_type = '2'
188
+ container_proxy.remote_global_id_string = product_reference.uuid
189
+ container_proxy.remote_info = 'Subproject'
190
+
191
+ reference_proxy = group.project.new(PBXReferenceProxy)
192
+ extension = File.extname(product_reference.path)[1..-1]
193
+ reference_proxy.file_type = Constants::FILE_TYPES_BY_EXTENSION[extension]
194
+ reference_proxy.path = product_reference.path
195
+ reference_proxy.remote_ref = container_proxy
196
+ reference_proxy.source_tree = 'BUILT_PRODUCTS_DIR'
197
+
198
+ product_group_ref << reference_proxy
199
+ end
200
+
201
+ attribute = PBXProject.references_by_keys_attributes.find { |attrb| attrb.name == :project_references }
202
+ project_reference = ObjectDictionary.new(attribute, group.project.root_object)
203
+ project_reference[:project_ref] = ref
204
+ project_reference[:product_group] = product_group_ref
205
+ group.project.root_object.project_references << project_reference
206
+
207
+ ref
208
+ end
209
+
157
210
  # Configures a file reference according to the extension to math
158
211
  # Xcode behaviour.
159
212
  #
@@ -177,10 +230,8 @@ module Xcodeproj
177
230
  end
178
231
 
179
232
  #-------------------------------------------------------------------#
180
-
181
233
  end
182
234
  end
183
235
  end
184
236
  end
185
237
  end
186
-
@@ -3,7 +3,6 @@ module Xcodeproj
3
3
  module Object
4
4
  class GroupableHelper
5
5
  class << self
6
-
7
6
  # @param [PBXGroup, PBXFileReference] object
8
7
  # The object to analyze.
9
8
  #
@@ -12,15 +11,15 @@ module Xcodeproj
12
11
  def parent(object)
13
12
  referrers = object.referrers.uniq
14
13
  if referrers.count > 1
15
- referrers = referrers.select{ |obj| obj.isa == 'PBXGroup' }
14
+ referrers = referrers.select { |obj| obj.isa == 'PBXGroup' }
16
15
  end
17
16
 
18
17
  if referrers.count == 0
19
- raise "[Xcodeproj] Consistency issue: no parent " \
18
+ raise '[Xcodeproj] Consistency issue: no parent ' \
20
19
  "for object `#{object.display_name}`: "\
21
20
  "`#{object.referrers.join('`, `')}`"
22
21
  elsif referrers.count > 1
23
- raise "[Xcodeproj] Consistency issue: unexpected multiple parents " \
22
+ raise '[Xcodeproj] Consistency issue: unexpected multiple parents ' \
24
23
  "for object `#{object.display_name}`: "\
25
24
  "#{object.referrers}"
26
25
  end
@@ -178,7 +177,7 @@ module Xcodeproj
178
177
 
179
178
  if source_tree == SOURCE_TREES_BY_KEY[:absolute]
180
179
  unless path.absolute?
181
- raise "[Xcodeproj] Attempt to set a relative path with an " \
180
+ raise '[Xcodeproj] Attempt to set a relative path with an ' \
182
181
  "absolute source tree: `#{path}`"
183
182
  end
184
183
  object.path = path.to_s
@@ -220,7 +219,6 @@ module Xcodeproj
220
219
  end
221
220
 
222
221
  #-------------------------------------------------------------------#
223
-
224
222
  end
225
223
  end
226
224
  end
@@ -1,9 +1,7 @@
1
1
  module Xcodeproj
2
2
  class Project
3
3
  module Object
4
-
5
4
  class AbstractTarget < AbstractObject
6
-
7
5
  # @!group Attributes
8
6
 
9
7
  # @return [String] The name of the Target.
@@ -31,7 +29,6 @@ module Xcodeproj
31
29
  #
32
30
  has_many :dependencies, PBXTargetDependency
33
31
 
34
-
35
32
  public
36
33
 
37
34
  # @!group Helpers
@@ -54,7 +51,7 @@ module Xcodeproj
54
51
  def resolved_build_setting(key)
55
52
  target_settings = build_configuration_list.get_setting(key)
56
53
  project_settings = project.build_configuration_list.get_setting(key)
57
- target_settings.merge(project_settings) do |key, target_val, proj_val|
54
+ target_settings.merge(project_settings) do |_key, target_val, proj_val|
58
55
  target_val || proj_val
59
56
  end
60
57
  end
@@ -203,7 +200,7 @@ module Xcodeproj
203
200
  container_proxy.container_portal = project.root_object.uuid
204
201
  else
205
202
  subproject_reference = project.reference_for_path(target.project.path)
206
- raise ArgumentError, "add_dependency got target that belongs to a project is not this project and is not a subproject of this project" unless subproject_reference
203
+ raise ArgumentError, 'add_dependency got target that belongs to a project is not this project and is not a subproject of this project' unless subproject_reference
207
204
  container_proxy.container_portal = subproject_reference.uuid
208
205
  end
209
206
  container_proxy.proxy_type = '1'
@@ -245,7 +242,6 @@ module Xcodeproj
245
242
  phase
246
243
  end
247
244
 
248
-
249
245
  public
250
246
 
251
247
  # @!group System frameworks
@@ -280,7 +276,7 @@ module Xcodeproj
280
276
  path_sdk_name = 'MacOSX'
281
277
  path_sdk_version = sdk_version || Constants::LAST_KNOWN_OSX_SDK
282
278
  else
283
- raise "Unknown platform for target"
279
+ raise 'Unknown platform for target'
284
280
  end
285
281
 
286
282
  path = "Platforms/#{path_sdk_name}.platform/Developer/SDKs/#{path_sdk_name}#{path_sdk_version}.sdk/System/Library/Frameworks/#{name}.framework"
@@ -291,7 +287,7 @@ module Xcodeproj
291
287
  ref
292
288
  end
293
289
  end
294
- alias :add_system_frameworks :add_system_framework
290
+ alias_method :add_system_frameworks, :add_system_framework
295
291
 
296
292
  # Adds a file reference for one or more system libraries to the project
297
293
  # if needed and adds them to the Frameworks build phases.
@@ -304,14 +300,15 @@ module Xcodeproj
304
300
  def add_system_library(names)
305
301
  Array(names).each do |name|
306
302
  path = "usr/lib/lib#{name}.dylib"
307
- unless ref = project.frameworks_group.files.find { |ref| ref.path == path }
308
- ref = project.frameworks_group.new_file(path, :sdk_root)
303
+ files = project.frameworks_group.files
304
+ unless reference = files.find { |ref| ref.path == path }
305
+ reference = project.frameworks_group.new_file(path, :sdk_root)
309
306
  end
310
- frameworks_build_phase.add_file_reference(ref, true)
311
- ref
307
+ frameworks_build_phase.add_file_reference(reference, true)
308
+ reference
312
309
  end
313
310
  end
314
- alias :add_system_libraries :add_system_library
311
+ alias_method :add_system_libraries, :add_system_library
315
312
 
316
313
  public
317
314
 
@@ -325,11 +322,10 @@ module Xcodeproj
325
322
  {
326
323
  display_name => {
327
324
  'Build Phases' => build_phases.map(&:pretty_print),
328
- 'Build Configurations' => build_configurations.map(&:pretty_print)
329
- }
325
+ 'Build Configurations' => build_configurations.map(&:pretty_print),
326
+ },
330
327
  }
331
328
  end
332
-
333
329
  end
334
330
 
335
331
  #-----------------------------------------------------------------------#
@@ -337,7 +333,6 @@ module Xcodeproj
337
333
  # Represents a target handled by Xcode.
338
334
  #
339
335
  class PBXNativeTarget < AbstractTarget
340
-
341
336
  # @!group Attributes
342
337
 
343
338
  # @return [PBXBuildRule] the build rules of this target.
@@ -365,7 +360,6 @@ module Xcodeproj
365
360
  #
366
361
  has_many :build_phases, AbstractBuildPhase
367
362
 
368
-
369
363
  public
370
364
 
371
365
  # @!group Helpers
@@ -374,7 +368,8 @@ module Xcodeproj
374
368
  # @return [Symbol] The type of the target expressed as a symbol.
375
369
  #
376
370
  def symbol_type
377
- pair = Constants::PRODUCT_TYPE_UTI.find { |key, value| value == product_type }
371
+ pair = Constants::PRODUCT_TYPE_UTI.find { |_key, value| value == product_type }
372
+ return nil if pair.nil?
378
373
  pair.first
379
374
  end
380
375
 
@@ -396,7 +391,7 @@ module Xcodeproj
396
391
 
397
392
  extension = File.extname(file.path)
398
393
  header_extensions = Constants::HEADER_FILES_EXTENSIONS
399
- if (header_extensions.include?(extension))
394
+ if header_extensions.include?(extension)
400
395
  headers_build_phase.files << build_file
401
396
  else
402
397
  if compiler_flags && !compiler_flags.empty?
@@ -471,7 +466,7 @@ module Xcodeproj
471
466
  def frameworks_build_phase
472
467
  phase = build_phases.find { |bp| bp.class == PBXFrameworksBuildPhase }
473
468
  unless phase
474
- phase= project.new(PBXFrameworksBuildPhase)
469
+ phase = project.new(PBXFrameworksBuildPhase)
475
470
  build_phases << phase
476
471
  end
477
472
  phase
@@ -492,7 +487,6 @@ module Xcodeproj
492
487
  phase
493
488
  end
494
489
 
495
-
496
490
  public
497
491
 
498
492
  # @!group AbstractObject Hooks
@@ -503,7 +497,7 @@ module Xcodeproj
503
497
  #
504
498
  # Build phases are not sorted as they order is relevant.
505
499
  #
506
- def sort(options = nil)
500
+ def sort(_options = nil)
507
501
  attributes_to_sort = to_many_attributes.reject { |attr| attr.name == :build_phases }
508
502
  attributes_to_sort.each do |attrb|
509
503
  list = attrb.get_value(self)
@@ -521,7 +515,6 @@ module Xcodeproj
521
515
  # @todo Apparently it can't have build rules.
522
516
  #
523
517
  class PBXAggregateTarget < AbstractTarget
524
-
525
518
  # @!group Attributes
526
519
 
527
520
  # @return [PBXBuildRule] the build phases of the target.
@@ -530,8 +523,7 @@ module Xcodeproj
530
523
  # PBXShellScriptBuildPhase can appear multiple times in a
531
524
  # target.
532
525
  #
533
- has_many :build_phases, [ PBXCopyFilesBuildPhase, PBXShellScriptBuildPhase ]
534
-
526
+ has_many :build_phases, [PBXCopyFilesBuildPhase, PBXShellScriptBuildPhase]
535
527
  end
536
528
 
537
529
  #-----------------------------------------------------------------------#
@@ -542,7 +534,6 @@ module Xcodeproj
542
534
  # present.
543
535
  #
544
536
  class PBXLegacyTarget < AbstractTarget
545
-
546
537
  # @!group Attributes
547
538
 
548
539
  # @return [String] e.g "Dir"
@@ -568,11 +559,9 @@ module Xcodeproj
568
559
  # target.
569
560
  #
570
561
  has_many :build_phases, AbstractBuildPhase
571
-
572
562
  end
573
563
 
574
564
  #-----------------------------------------------------------------------#
575
-
576
565
  end
577
566
  end
578
567
  end