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.
- checksums.yaml +4 -4
- data/bin/xcodeproj +5 -5
- data/lib/xcodeproj.rb +0 -2
- data/lib/xcodeproj/command.rb +26 -17
- data/lib/xcodeproj/command/project_diff.rb +8 -11
- data/lib/xcodeproj/command/show.rb +8 -10
- data/lib/xcodeproj/command/sort.rb +4 -7
- data/lib/xcodeproj/command/target_diff.rb +4 -5
- data/lib/xcodeproj/config.rb +64 -57
- data/lib/xcodeproj/config/other_linker_flags_parser.rb +62 -0
- data/lib/xcodeproj/constants.rb +31 -30
- data/lib/xcodeproj/differ.rb +5 -9
- data/lib/xcodeproj/gem_version.rb +1 -2
- data/lib/xcodeproj/helper.rb +5 -4
- data/lib/xcodeproj/plist_helper.rb +46 -11
- data/lib/xcodeproj/project.rb +16 -20
- data/lib/xcodeproj/project/case_converter.rb +59 -0
- data/lib/xcodeproj/project/object.rb +40 -30
- data/lib/xcodeproj/project/object/build_configuration.rb +1 -5
- data/lib/xcodeproj/project/object/build_file.rb +1 -4
- data/lib/xcodeproj/project/object/build_phase.rb +2 -13
- data/lib/xcodeproj/project/object/build_rule.rb +0 -3
- data/lib/xcodeproj/project/object/configuration_list.rb +0 -4
- data/lib/xcodeproj/project/object/container_item_proxy.rb +2 -4
- data/lib/xcodeproj/project/object/file_reference.rb +3 -6
- data/lib/xcodeproj/project/object/group.rb +6 -14
- data/lib/xcodeproj/project/object/helpers/file_references_factory.rb +64 -13
- data/lib/xcodeproj/project/object/helpers/groupable_helper.rb +4 -6
- data/lib/xcodeproj/project/object/native_target.rb +18 -29
- data/lib/xcodeproj/project/object/reference_proxy.rb +0 -4
- data/lib/xcodeproj/project/object/root_object.rb +4 -8
- data/lib/xcodeproj/project/object/target_dependency.rb +1 -4
- data/lib/xcodeproj/project/object_attributes.rb +76 -33
- data/lib/xcodeproj/project/object_dictionary.rb +76 -63
- data/lib/xcodeproj/project/object_list.rb +5 -9
- data/lib/xcodeproj/project/project_helper.rb +2 -7
- data/lib/xcodeproj/project/xcproj_helper.rb +0 -2
- data/lib/xcodeproj/scheme.rb +12 -15
- data/lib/xcodeproj/user_interface.rb +0 -4
- data/lib/xcodeproj/workspace.rb +36 -23
- data/lib/xcodeproj/workspace/file_reference.rb +3 -3
- data/lib/xcodeproj/xcodebuild_helper.rb +0 -6
- 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
|
-
#
|
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[
|
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 ==
|
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[
|
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
|
-
|
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
|
-
|
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,
|
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
|
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,
|
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
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
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 |
|
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,
|
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
|
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
|
-
|
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
|
-
|
308
|
-
|
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(
|
311
|
-
|
307
|
+
frameworks_build_phase.add_file_reference(reference, true)
|
308
|
+
reference
|
312
309
|
end
|
313
310
|
end
|
314
|
-
|
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 { |
|
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
|
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(
|
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, [
|
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
|