xcodeproj 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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