cocoapods 1.0.0 → 1.1.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +329 -0
  3. data/lib/cocoapods/command/init.rb +6 -6
  4. data/lib/cocoapods/command/ipc/list.rb +40 -0
  5. data/lib/cocoapods/command/ipc/podfile.rb +31 -0
  6. data/lib/cocoapods/command/ipc/repl.rb +51 -0
  7. data/lib/cocoapods/command/ipc/spec.rb +29 -0
  8. data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
  9. data/lib/cocoapods/command/ipc.rb +18 -0
  10. data/lib/cocoapods/command/lib/create.rb +105 -0
  11. data/lib/cocoapods/command/lib/lint.rb +111 -0
  12. data/lib/cocoapods/command/lib.rb +3 -207
  13. data/lib/cocoapods/command/repo/push.rb +44 -20
  14. data/lib/cocoapods/command/setup.rb +2 -1
  15. data/lib/cocoapods/command/spec/lint.rb +4 -0
  16. data/lib/cocoapods/command.rb +2 -1
  17. data/lib/cocoapods/config.rb +4 -1
  18. data/lib/cocoapods/downloader/cache.rb +1 -0
  19. data/lib/cocoapods/downloader.rb +20 -0
  20. data/lib/cocoapods/executable.rb +1 -1
  21. data/lib/cocoapods/gem_version.rb +1 -1
  22. data/lib/cocoapods/generator/acknowledgements/plist.rb +4 -1
  23. data/lib/cocoapods/generator/copy_resources_script.rb +4 -10
  24. data/lib/cocoapods/generator/header.rb +2 -1
  25. data/lib/cocoapods/generator/prefix_header.rb +0 -12
  26. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +38 -5
  27. data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +5 -4
  28. data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +5 -1
  29. data/lib/cocoapods/installer/analyzer/target_inspector.rb +24 -1
  30. data/lib/cocoapods/installer/analyzer.rb +161 -1
  31. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +29 -9
  32. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +204 -0
  33. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +314 -0
  34. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +401 -0
  35. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +214 -0
  36. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +265 -0
  37. data/lib/cocoapods/installer/xcode.rb +7 -0
  38. data/lib/cocoapods/installer.rb +50 -214
  39. data/lib/cocoapods/resolver.rb +15 -9
  40. data/lib/cocoapods/sandbox/headers_store.rb +4 -10
  41. data/lib/cocoapods/sandbox/path_list.rb +20 -9
  42. data/lib/cocoapods/sources_manager.rb +7 -10
  43. data/lib/cocoapods/target/aggregate_target.rb +20 -0
  44. data/lib/cocoapods/target/pod_target.rb +37 -7
  45. data/lib/cocoapods/user_interface/error_report.rb +7 -0
  46. data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
  47. data/lib/cocoapods/user_interface.rb +7 -5
  48. data/lib/cocoapods/validator.rb +59 -11
  49. metadata +112 -83
  50. data/lib/cocoapods/command/inter_process_communication.rb +0 -177
  51. data/lib/cocoapods/installer/file_references_installer.rb +0 -310
  52. data/lib/cocoapods/installer/migrator.rb +0 -86
  53. data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +0 -191
  54. data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +0 -368
  55. data/lib/cocoapods/installer/target_installer.rb +0 -210
@@ -1,368 +0,0 @@
1
- module Pod
2
- class Installer
3
- # Creates the target for the Pods libraries in the Pods project and the
4
- # relative support files.
5
- #
6
- class PodTargetInstaller < TargetInstaller
7
- # Creates the target in the Pods project and the relative support files.
8
- #
9
- # @return [void]
10
- #
11
- def install!
12
- unless target.should_build?
13
- add_resources_bundle_targets
14
- return
15
- end
16
-
17
- UI.message "- Installing target `#{target.name}` #{target.platform}" do
18
- add_target
19
- create_support_files_dir
20
- add_resources_bundle_targets
21
- add_files_to_build_phases
22
- create_xcconfig_file
23
- if target.requires_frameworks?
24
- create_info_plist_file
25
- create_module_map
26
- create_umbrella_header do |generator|
27
- generator.imports += if header_mappings_dir
28
- target.file_accessors.flat_map(&:public_headers).map do |pathname|
29
- pathname.relative_path_from(header_mappings_dir)
30
- end
31
- else
32
- target.file_accessors.flat_map(&:public_headers).map(&:basename)
33
- end
34
- end
35
- end
36
- create_prefix_header
37
- create_dummy_source
38
- end
39
- end
40
-
41
- private
42
-
43
- # Remove the default headers folder path settings for static library pod
44
- # targets.
45
- #
46
- # @return [Hash{String => String}]
47
- #
48
- def custom_build_settings
49
- settings = super
50
- unless target.requires_frameworks?
51
- settings['PRIVATE_HEADERS_FOLDER_PATH'] = ''
52
- settings['PUBLIC_HEADERS_FOLDER_PATH'] = ''
53
- end
54
- settings
55
- end
56
-
57
- #-----------------------------------------------------------------------#
58
-
59
- SOURCE_FILE_EXTENSIONS = Sandbox::FileAccessor::SOURCE_FILE_EXTENSIONS
60
-
61
- # Adds the build files of the pods to the target and adds a reference to
62
- # the frameworks of the Pods.
63
- #
64
- # @note The Frameworks are used only for presentation purposes as the
65
- # xcconfig is the authoritative source about their information.
66
- #
67
- # @note Core Data model directories (.xcdatamodeld) defined in the `resources`
68
- # property are currently added to the `Copy Resources` build phase like
69
- # all other resources. The Xcode UI adds these to the `Compile Sources`
70
- # build phase, but they will compile correctly either way.
71
- #
72
- # @return [void]
73
- #
74
- def add_files_to_build_phases
75
- target.file_accessors.each do |file_accessor|
76
- consumer = file_accessor.spec_consumer
77
-
78
- headers = file_accessor.headers
79
- public_headers = file_accessor.public_headers
80
- private_headers = file_accessor.private_headers
81
- other_source_files = file_accessor.source_files.reject { |sf| SOURCE_FILE_EXTENSIONS.include?(sf.extname) }
82
-
83
- {
84
- true => file_accessor.arc_source_files,
85
- false => file_accessor.non_arc_source_files,
86
- }.each do |arc, files|
87
- files = files - headers - other_source_files
88
- flags = compiler_flags_for_consumer(consumer, arc)
89
- regular_file_refs = files.map { |sf| project.reference_for_path(sf) }
90
- native_target.add_file_references(regular_file_refs, flags)
91
- end
92
-
93
- header_file_refs = headers.map { |sf| project.reference_for_path(sf) }
94
- native_target.add_file_references(header_file_refs) do |build_file|
95
- add_header(build_file, public_headers, private_headers)
96
- end
97
-
98
- other_file_refs = other_source_files.map { |sf| project.reference_for_path(sf) }
99
- native_target.add_file_references(other_file_refs, nil)
100
-
101
- next unless target.requires_frameworks?
102
-
103
- resource_refs = file_accessor.resources.flatten.map do |res|
104
- project.reference_for_path(res)
105
- end
106
-
107
- # Some nested files are not directly present in the Xcode project, such as the contents
108
- # of an .xcdatamodeld directory. These files will return nil file references.
109
- resource_refs.compact!
110
-
111
- native_target.add_resources(resource_refs)
112
- end
113
- end
114
-
115
- # Adds the resources of the Pods to the Pods project.
116
- #
117
- # @note The source files are grouped by Pod and in turn by subspec
118
- # (recursively) in the resources group.
119
- #
120
- # @note Core Data model directories (.xcdatamodeld) are currently added to the
121
- # `Copy Resources` build phase like all other resources. The Xcode UI adds
122
- # these to the `Compile Sources` build phase, but they will compile
123
- # correctly either way.
124
- #
125
- # @return [void]
126
- #
127
- def add_resources_bundle_targets
128
- target.file_accessors.each do |file_accessor|
129
- file_accessor.resource_bundles.each do |bundle_name, paths|
130
- file_references = paths.map do |path|
131
- ref = project.reference_for_path(path)
132
-
133
- # Some nested files are not directly present in the Xcode project, such as the contents
134
- # of an .xcdatamodeld directory. These files are implicitly included by including their
135
- # parent directory.
136
- next if ref.nil?
137
-
138
- # For variant groups, the variant group itself is added, not its members.
139
- next ref.parent if ref.parent.is_a?(Xcodeproj::Project::Object::PBXVariantGroup)
140
-
141
- ref
142
- end
143
- file_references = file_references.uniq.compact
144
-
145
- label = target.resources_bundle_target_label(bundle_name)
146
- bundle_target = project.new_resources_bundle(label, file_accessor.spec_consumer.platform_name)
147
- bundle_target.product_reference.tap do |bundle_product|
148
- bundle_file_name = "#{bundle_name}.bundle"
149
- bundle_product.name = bundle_file_name
150
- bundle_product.path = bundle_file_name
151
- end
152
- bundle_target.add_resources(file_references)
153
-
154
- target.user_build_configurations.each do |bc_name, type|
155
- bundle_target.add_build_configuration(bc_name, type)
156
- end
157
- bundle_target.deployment_target = deployment_target
158
-
159
- target.resource_bundle_targets << bundle_target
160
-
161
- if target.should_build?
162
- native_target.add_dependency(bundle_target)
163
- if target.requires_frameworks?
164
- native_target.add_resources([bundle_target.product_reference])
165
- end
166
- end
167
-
168
- # Create Info.plist file for bundle
169
- path = target.info_plist_path
170
- path.dirname.mkdir unless path.dirname.exist?
171
- info_plist_path = path.dirname + "ResourceBundle-#{bundle_name}-#{path.basename}"
172
- generator = Generator::InfoPlistFile.new(target, :bundle_package_type => :bndl)
173
- generator.save_as(info_plist_path)
174
- add_file_to_support_group(info_plist_path)
175
-
176
- bundle_target.build_configurations.each do |c|
177
- c.build_settings['PRODUCT_NAME'] = bundle_name
178
- relative_info_plist_path = info_plist_path.relative_path_from(sandbox.root)
179
- c.build_settings['INFOPLIST_FILE'] = relative_info_plist_path.to_s
180
- c.build_settings['CONFIGURATION_BUILD_DIR'] = target.configuration_build_dir('$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)')
181
-
182
- # Set the correct device family for this bundle, based on the platform
183
- device_family_by_platform = {
184
- :ios => '1,2',
185
- :tvos => '3',
186
- :watchos => '1,2' # The device family for watchOS is 4, but Xcode creates watchkit-compatible bundles as 1,2
187
- }
188
-
189
- if family = device_family_by_platform[target.platform.name]
190
- c.build_settings['TARGETED_DEVICE_FAMILY'] = family
191
- end
192
- end
193
- end
194
- end
195
- end
196
-
197
- # Generates the contents of the xcconfig file and saves it to disk.
198
- #
199
- # @return [void]
200
- #
201
- def create_xcconfig_file
202
- path = target.xcconfig_path
203
- xcconfig_gen = Generator::XCConfig::PodXCConfig.new(target)
204
- xcconfig_gen.save_as(path)
205
- xcconfig_file_ref = add_file_to_support_group(path)
206
-
207
- native_target.build_configurations.each do |c|
208
- c.base_configuration_reference = xcconfig_file_ref
209
- end
210
-
211
- # also apply the private config to resource targets
212
- target.resource_bundle_targets.each do |rsrc_target|
213
- rsrc_target.build_configurations.each do |rsrc_bc|
214
- rsrc_bc.base_configuration_reference = xcconfig_file_ref
215
- end
216
- end
217
- end
218
-
219
- # Creates a prefix header file which imports `UIKit` or `Cocoa` according
220
- # to the platform of the target. This file also include any prefix header
221
- # content reported by the specification of the pods.
222
- #
223
- # @return [void]
224
- #
225
- def create_prefix_header
226
- path = target.prefix_header_path
227
- generator = Generator::PrefixHeader.new(target.file_accessors, target.platform)
228
- generator.save_as(path)
229
- add_file_to_support_group(path)
230
-
231
- native_target.build_configurations.each do |c|
232
- relative_path = path.relative_path_from(project.path.dirname)
233
- c.build_settings['GCC_PREFIX_HEADER'] = relative_path.to_s
234
- end
235
- end
236
-
237
- ENABLE_OBJECT_USE_OBJC_FROM = {
238
- :ios => Version.new('6'),
239
- :osx => Version.new('10.8'),
240
- :watchos => Version.new('2.0'),
241
- :tvos => Version.new('9.0'),
242
- }
243
-
244
- # Returns the compiler flags for the source files of the given specification.
245
- #
246
- # The following behavior is regarding the `OS_OBJECT_USE_OBJC` flag. When
247
- # set to `0`, it will allow code to use `dispatch_release()` on >= iOS 6.0
248
- # and OS X 10.8.
249
- #
250
- # * New libraries that do *not* require ARC don’t need to care about this
251
- # issue at all.
252
- #
253
- # * New libraries that *do* require ARC _and_ have a deployment target of
254
- # >= iOS 6.0 or OS X 10.8:
255
- #
256
- # These no longer use `dispatch_release()` and should *not* have the
257
- # `OS_OBJECT_USE_OBJC` flag set to `0`.
258
- #
259
- # **Note:** this means that these libraries *have* to specify the
260
- # deployment target in order to function well.
261
- #
262
- # * New libraries that *do* require ARC, but have a deployment target of
263
- # < iOS 6.0 or OS X 10.8:
264
- #
265
- # These contain `dispatch_release()` calls and as such need the
266
- # `OS_OBJECT_USE_OBJC` flag set to `1`.
267
- #
268
- # **Note:** libraries that do *not* specify a platform version are
269
- # assumed to have a deployment target of < iOS 6.0 or OS X 10.8.
270
- #
271
- # For more information, see: http://opensource.apple.com/source/libdispatch/libdispatch-228.18/os/object.h
272
- #
273
- # @param [Specification::Consumer] consumer
274
- # The consumer for the specification for which the compiler flags
275
- # are needed.
276
- #
277
- # @return [String] The compiler flags.
278
- #
279
- def compiler_flags_for_consumer(consumer, arc)
280
- flags = consumer.compiler_flags.dup
281
- if !arc
282
- flags << '-fno-objc-arc'
283
- else
284
- platform_name = consumer.platform_name
285
- spec_deployment_target = consumer.spec.deployment_target(platform_name)
286
- if spec_deployment_target.nil? || Version.new(spec_deployment_target) < ENABLE_OBJECT_USE_OBJC_FROM[platform_name]
287
- flags << '-DOS_OBJECT_USE_OBJC=0'
288
- end
289
- end
290
- if target.inhibit_warnings?
291
- flags << '-w -Xanalyzer -analyzer-disable-all-checks'
292
- end
293
- flags * ' '
294
- end
295
-
296
- # Adds a reference to the given file in the support group of this target.
297
- #
298
- # @param [Pathname] path
299
- # The path of the file to which the reference should be added.
300
- #
301
- # @return [PBXFileReference] the file reference of the added file.
302
- #
303
- def add_file_to_support_group(path)
304
- pod_name = target.pod_name
305
- dir = target.support_files_dir
306
- group = project.pod_support_files_group(pod_name, dir)
307
- group.new_file(path)
308
- end
309
-
310
- def create_module_map
311
- return super unless custom_module_map
312
- path = target.module_map_path
313
- UI.message "- Copying module map file to #{UI.path(path)}" do
314
- FileUtils.cp(custom_module_map, path)
315
- add_file_to_support_group(path)
316
-
317
- native_target.build_configurations.each do |c|
318
- relative_path = path.relative_path_from(sandbox.root)
319
- c.build_settings['MODULEMAP_FILE'] = relative_path.to_s
320
- end
321
- end
322
- end
323
-
324
- def create_umbrella_header
325
- return super unless custom_module_map
326
- end
327
-
328
- def custom_module_map
329
- @custom_module_map ||= target.file_accessors.first.module_map
330
- end
331
-
332
- def header_mappings_dir
333
- return @header_mappings_dir if defined?(@header_mappings_dir)
334
- file_accessor = target.file_accessors.first
335
- @header_mappings_dir = if dir = file_accessor.spec_consumer.header_mappings_dir
336
- file_accessor.path_list.root + dir
337
- end
338
- end
339
-
340
- def add_header(build_file, public_headers, private_headers)
341
- file_ref = build_file.file_ref
342
- acl = if public_headers.include?(file_ref.real_path)
343
- 'Public'
344
- elsif private_headers.include?(file_ref.real_path)
345
- 'Private'
346
- else
347
- 'Project'
348
- end
349
-
350
- if target.requires_frameworks? && header_mappings_dir && acl != 'Project'
351
- relative_path = file_ref.real_path.relative_path_from(header_mappings_dir)
352
- sub_dir = relative_path.dirname
353
- copy_phase_name = "Copy #{sub_dir} #{acl} Headers"
354
- copy_phase = native_target.copy_files_build_phases.find { |bp| bp.name == copy_phase_name } ||
355
- native_target.new_copy_files_build_phase(copy_phase_name)
356
- copy_phase.symbol_dst_subfolder_spec = :products_directory
357
- copy_phase.dst_path = "$(#{acl.upcase}_HEADERS_FOLDER_PATH)/#{sub_dir}"
358
- copy_phase.add_file_reference(file_ref, true)
359
- else
360
- build_file.settings ||= {}
361
- build_file.settings['ATTRIBUTES'] = [acl]
362
- end
363
- end
364
-
365
- #-----------------------------------------------------------------------#
366
- end
367
- end
368
- end
@@ -1,210 +0,0 @@
1
- module Pod
2
- class Installer
3
- # Controller class responsible of creating and configuring the static
4
- # library target in Pods project. It also creates the support file needed
5
- # by the target.
6
- #
7
- class TargetInstaller
8
- # @return [Sandbox] sandbox the sandbox where the support files should
9
- # be generated.
10
- #
11
- attr_reader :sandbox
12
-
13
- # @return [Target] The library whose target needs to be generated.
14
- #
15
- attr_reader :target
16
-
17
- # @param [Project] project @see project
18
- # @param [Target] target @see target
19
- #
20
- def initialize(sandbox, target)
21
- @sandbox = sandbox
22
- @target = target
23
- end
24
-
25
- private
26
-
27
- #-----------------------------------------------------------------------#
28
-
29
- # @!group Installation steps
30
-
31
- # Adds the target for the library to the Pods project with the
32
- # appropriate build configurations.
33
- #
34
- # @note The `PODS_HEADERS_SEARCH_PATHS` overrides the xcconfig.
35
- #
36
- # @return [void]
37
- #
38
- def add_target
39
- product_type = target.product_type
40
- name = target.label
41
- platform = target.platform.name
42
- language = target.uses_swift? ? :swift : :objc
43
- @native_target = project.new_target(product_type, name, platform, deployment_target, nil, language)
44
-
45
- product_name = target.product_name
46
- product = @native_target.product_reference
47
- product.name = product_name
48
-
49
- target.user_build_configurations.each do |bc_name, type|
50
- @native_target.add_build_configuration(bc_name, type)
51
- end
52
-
53
- @native_target.build_configurations.each do |configuration|
54
- configuration.build_settings.merge!(custom_build_settings)
55
- end
56
-
57
- target.native_target = @native_target
58
- end
59
-
60
- # @return [String] The deployment target.
61
- #
62
- def deployment_target
63
- target.platform.deployment_target.to_s
64
- end
65
-
66
- # Returns the customized build settings which are overridden in the build
67
- # settings of the user target.
68
- #
69
- # @return [Hash{String => String}]
70
- #
71
- def custom_build_settings
72
- settings = {}
73
-
74
- unless target.archs.empty?
75
- settings['ARCHS'] = target.archs
76
- end
77
-
78
- if target.requires_frameworks?
79
- settings['PRODUCT_NAME'] = target.product_module_name
80
- else
81
- settings.merge!('OTHER_LDFLAGS' => '', 'OTHER_LIBTOOLFLAGS' => '')
82
- end
83
-
84
- settings
85
- end
86
-
87
- # Creates the directory where to store the support files of the target.
88
- #
89
- def create_support_files_dir
90
- target.support_files_dir.mkdir
91
- end
92
-
93
- # Creates the Info.plist file which sets public framework attributes
94
- #
95
- # @return [void]
96
- #
97
- def create_info_plist_file
98
- path = target.info_plist_path
99
- UI.message "- Generating Info.plist file at #{UI.path(path)}" do
100
- generator = Generator::InfoPlistFile.new(target)
101
- generator.save_as(path)
102
- add_file_to_support_group(path)
103
-
104
- native_target.build_configurations.each do |c|
105
- relative_path = path.relative_path_from(sandbox.root)
106
- c.build_settings['INFOPLIST_FILE'] = relative_path.to_s
107
- end
108
- end
109
- end
110
-
111
- # Creates the module map file which ensures that the umbrella header is
112
- # recognized with a customized path
113
- #
114
- # @yield_param [Generator::ModuleMap]
115
- # yielded once to configure the private headers
116
- #
117
- # @return [void]
118
- #
119
- def create_module_map
120
- path = target.module_map_path
121
- UI.message "- Generating module map file at #{UI.path(path)}" do
122
- generator = Generator::ModuleMap.new(target)
123
- yield generator if block_given?
124
- generator.save_as(path)
125
- add_file_to_support_group(path)
126
-
127
- native_target.build_configurations.each do |c|
128
- relative_path = path.relative_path_from(sandbox.root)
129
- c.build_settings['MODULEMAP_FILE'] = relative_path.to_s
130
- end
131
- end
132
- end
133
-
134
- # Generates a header which ensures that all header files are exported
135
- # in the module map
136
- #
137
- # @yield_param [Generator::UmbrellaHeader]
138
- # yielded once to configure the imports
139
- #
140
- def create_umbrella_header
141
- path = target.umbrella_header_path
142
- UI.message "- Generating umbrella header at #{UI.path(path)}" do
143
- generator = Generator::UmbrellaHeader.new(target)
144
- yield generator if block_given?
145
- generator.save_as(path)
146
-
147
- # Add the file to the support group and the native target,
148
- # so it will been added to the header build phase
149
- file_ref = add_file_to_support_group(path)
150
- native_target.add_file_references([file_ref])
151
-
152
- # Make the umbrella header public
153
- build_file = native_target.headers_build_phase.build_file(file_ref)
154
- build_file.settings ||= {}
155
- build_file.settings['ATTRIBUTES'] = ['Public']
156
- end
157
- end
158
-
159
- # Generates a dummy source file for each target so libraries that contain
160
- # only categories build.
161
- #
162
- # @return [void]
163
- #
164
- def create_dummy_source
165
- path = target.dummy_source_path
166
- generator = Generator::DummySource.new(target.label)
167
- generator.save_as(path)
168
- file_reference = add_file_to_support_group(path)
169
- native_target.source_build_phase.add_file_reference(file_reference)
170
- end
171
-
172
- # @return [PBXNativeTarget] the target generated by the installation
173
- # process.
174
- #
175
- # @note Generated by the {#add_target} step.
176
- #
177
- attr_reader :native_target
178
-
179
- private
180
-
181
- #-----------------------------------------------------------------------#
182
-
183
- # @!group Private helpers.
184
-
185
- # @return [Project] the Pods project of the sandbox.
186
- #
187
- def project
188
- sandbox.project
189
- end
190
-
191
- # @return [PBXGroup] the group where the file references to the support
192
- # files should be stored.
193
- #
194
- attr_reader :support_files_group
195
-
196
- # Adds a reference to the given file in the support group of this target.
197
- #
198
- # @param [Pathname] path
199
- # The path of the file to which the reference should be added.
200
- #
201
- # @return [PBXFileReference] the file reference of the added file.
202
- #
203
- def add_file_to_support_group(path)
204
- support_files_group.new_file(path)
205
- end
206
-
207
- #-----------------------------------------------------------------------#
208
- end
209
- end
210
- end