cocoapods 1.5.2 → 1.6.1

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 (81) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +365 -1
  3. data/bin/pod +1 -1
  4. data/lib/cocoapods/command/cache/clean.rb +1 -1
  5. data/lib/cocoapods/command/init.rb +4 -2
  6. data/lib/cocoapods/command/install.rb +7 -0
  7. data/lib/cocoapods/command/lib/lint.rb +8 -1
  8. data/lib/cocoapods/command/outdated.rb +4 -9
  9. data/lib/cocoapods/command/repo/add.rb +1 -1
  10. data/lib/cocoapods/command/repo/list.rb +1 -1
  11. data/lib/cocoapods/command/repo/push.rb +17 -12
  12. data/lib/cocoapods/command/repo/remove.rb +1 -1
  13. data/lib/cocoapods/command/repo/update.rb +1 -1
  14. data/lib/cocoapods/command/setup.rb +1 -1
  15. data/lib/cocoapods/command/spec/create.rb +39 -39
  16. data/lib/cocoapods/command/spec/lint.rb +8 -1
  17. data/lib/cocoapods/command.rb +3 -1
  18. data/lib/cocoapods/config.rb +13 -2
  19. data/lib/cocoapods/downloader/cache.rb +1 -1
  20. data/lib/cocoapods/executable.rb +3 -3
  21. data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
  22. data/lib/cocoapods/external_sources.rb +7 -4
  23. data/lib/cocoapods/gem_version.rb +1 -1
  24. data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
  25. data/lib/cocoapods/generator/acknowledgements/plist.rb +13 -2
  26. data/lib/cocoapods/generator/app_target_helper.rb +141 -17
  27. data/lib/cocoapods/generator/copy_resources_script.rb +14 -3
  28. data/lib/cocoapods/generator/dummy_source.rb +14 -5
  29. data/lib/cocoapods/generator/embed_frameworks_script.rb +37 -20
  30. data/lib/cocoapods/generator/header.rb +1 -1
  31. data/lib/cocoapods/generator/info_plist_file.rb +12 -4
  32. data/lib/cocoapods/generator/prefix_header.rb +2 -2
  33. data/lib/cocoapods/hooks_manager.rb +28 -17
  34. data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
  35. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +14 -6
  36. data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
  37. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
  38. data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
  39. data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +27 -14
  40. data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
  41. data/lib/cocoapods/installer/analyzer.rb +391 -284
  42. data/lib/cocoapods/installer/installation_options.rb +2 -0
  43. data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
  44. data/lib/cocoapods/installer/post_install_hooks_context.rb +72 -47
  45. data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
  46. data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
  47. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
  48. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +69 -29
  49. data/lib/cocoapods/installer/user_project_integrator.rb +6 -4
  50. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
  51. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +104 -0
  52. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +23 -50
  53. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +296 -177
  54. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +51 -33
  55. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
  56. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +62 -69
  57. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
  58. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +130 -122
  59. data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
  60. data/lib/cocoapods/installer.rb +140 -63
  61. data/lib/cocoapods/project.rb +16 -14
  62. data/lib/cocoapods/resolver/resolver_specification.rb +41 -0
  63. data/lib/cocoapods/resolver.rb +79 -98
  64. data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
  65. data/lib/cocoapods/sandbox/headers_store.rb +9 -8
  66. data/lib/cocoapods/sandbox/path_list.rb +5 -8
  67. data/lib/cocoapods/sandbox.rb +31 -43
  68. data/lib/cocoapods/sources_manager.rb +1 -1
  69. data/lib/cocoapods/target/aggregate_target.rb +143 -85
  70. data/lib/cocoapods/target/build_settings.rb +1124 -0
  71. data/lib/cocoapods/target/framework_paths.rb +36 -0
  72. data/lib/cocoapods/target/pod_target.rb +198 -295
  73. data/lib/cocoapods/target.rb +92 -37
  74. data/lib/cocoapods/user_interface.rb +5 -0
  75. data/lib/cocoapods/validator.rb +149 -44
  76. data/lib/cocoapods.rb +0 -1
  77. metadata +31 -23
  78. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
  79. data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
  80. data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
  81. data/lib/cocoapods/generator/xcconfig.rb +0 -13
@@ -1,558 +0,0 @@
1
- require 'active_support/core_ext/object/try'
2
-
3
- module Pod
4
- module Generator
5
- module XCConfig
6
- # Stores the shared logic of the classes of the XCConfig module.
7
- #
8
- module XCConfigHelper
9
- # @return [String] Used as alias for BUILD_DIR, so that when this
10
- # is overridden in the user target, the user can override
11
- # this variable to point to the standard directory, which
12
- # will be used by CocoaPods.
13
- #
14
- BUILD_DIR_VARIABLE = '${PODS_BUILD_DIR}'.freeze
15
-
16
- # @return [String] Used as alias for CONFIGURATION_BUILD_DIR, so that
17
- # when this is overridden per {PodTarget}, it is still possible
18
- # to reference other build products relative to the original
19
- # path. Furthermore if it was overridden in the user target,
20
- # the user can override this variable to point to the standard
21
- # directory, which will be used by CocoaPods.
22
- #
23
- CONFIGURATION_BUILD_DIR_VARIABLE = '${PODS_CONFIGURATION_BUILD_DIR}'.freeze
24
-
25
- # Converts an array of strings to a single string where the each string
26
- # is surrounded by double quotes and separated by a space. Used to
27
- # represent strings in a xcconfig file.
28
- #
29
- # @param [Array<String>] strings
30
- # a list of strings.
31
- #
32
- # @param [String] prefix
33
- # optional prefix, such as a flag or option.
34
- #
35
- # @return [String] the resulting string.
36
- #
37
- def self.quote(strings, prefix = nil)
38
- prefix = "#{prefix} " if prefix
39
- strings.sort.map { |s| %W( #{prefix}"#{s}" ) }.join(' ')
40
- end
41
-
42
- # Return the default linker flags
43
- #
44
- # @param [Target] target
45
- # the target, which is used to check if the ARC compatibility
46
- # flag is required.
47
- #
48
- # @param [Boolean] include_objc_flag
49
- # whether to include `-ObjC` in the other linker flags
50
- #
51
- # @return [String] the default linker flags. `-ObjC` is optionally included depending
52
- # on the target while `-fobjc-arc` is included only if requested in the Podfile.
53
- #
54
- def self.default_ld_flags(target, include_objc_flag = false)
55
- ld_flags = ''
56
- ld_flags << '-ObjC' if include_objc_flag
57
- if target.podfile.set_arc_compatibility_flag? &&
58
- target.spec_consumers.any?(&:requires_arc?)
59
- ld_flags << ' -fobjc-arc'
60
- end
61
- ld_flags.strip
62
- end
63
-
64
- # Configures the given Xcconfig
65
- #
66
- # @param [Target] target
67
- # The root target, may be nil.
68
- #
69
- # @param [PodTarget] pod_target
70
- # The pod target, which holds the list of +Spec::FileAccessor+.
71
- #
72
- # @param [Xcodeproj::Config] xcconfig
73
- # The xcconfig to edit.
74
- #
75
- # @param [Boolean] include_ld_flags
76
- # Indicates whether or not to generate ld flags in addition to compile flags
77
- #
78
- # @param [Boolean] test_xcconfig
79
- # Whether the settings for dependent targets are being generated for a test xcconfig or not.
80
- #
81
- # @return [void]
82
- #
83
- def self.add_settings_for_file_accessors_of_target(target, pod_target, xcconfig, include_ld_flags = true, test_xcconfig = false)
84
- file_accessors = pod_target.file_accessors
85
- file_accessors = file_accessors.reject { |f| f.spec.test_specification? } unless test_xcconfig
86
- file_accessors.each do |file_accessor|
87
- if target.nil? || !file_accessor.spec.test_specification?
88
- XCConfigHelper.add_spec_build_settings_to_xcconfig(file_accessor.spec_consumer, xcconfig) if include_ld_flags
89
- XCConfigHelper.add_static_dependency_build_settings(target, pod_target, xcconfig, file_accessor, include_ld_flags)
90
- end
91
- end
92
- XCConfigHelper.add_dynamic_dependency_build_settings(target, pod_target, xcconfig, include_ld_flags, test_xcconfig)
93
- if pod_target.requires_frameworks?
94
- pod_target.dependent_targets.each do |dependent_target|
95
- XCConfigHelper.add_dynamic_dependency_build_settings(target, dependent_target, xcconfig, include_ld_flags, test_xcconfig)
96
- end
97
- end
98
- end
99
-
100
- # Adds build settings for static vendored frameworks and libraries.
101
- #
102
- # @param [Target] target
103
- # The root target, may be nil.
104
- #
105
- # @param [PodTarget] pod_target
106
- # The pod target, which holds the list of +Spec::FileAccessor+.
107
- #
108
- # @param [Xcodeproj::Config] xcconfig
109
- # The xcconfig to edit.
110
- #
111
- # @param [Spec::FileAccessor] file_accessor
112
- # The file accessor, which holds the list of static frameworks.
113
- #
114
- # @param [Boolean] include_ld_flags
115
- # Indicates whether or not to generate ld flags in addition to compile flags
116
- #
117
- # @return [void]
118
- #
119
- def self.add_static_dependency_build_settings(target, pod_target, xcconfig, file_accessor, include_ld_flags)
120
- if target.nil? || !file_accessor.spec.test_specification?
121
- adds_other_ldflags = include_ld_flags && XCConfigHelper.links_dependency?(target, pod_target)
122
- file_accessor.vendored_static_frameworks.each do |vendored_static_framework|
123
- XCConfigHelper.add_framework_build_settings(vendored_static_framework, xcconfig, pod_target.sandbox.root, adds_other_ldflags)
124
- end
125
- file_accessor.vendored_static_libraries.each do |vendored_static_library|
126
- XCConfigHelper.add_library_build_settings(vendored_static_library, xcconfig, pod_target.sandbox.root, adds_other_ldflags)
127
- end
128
- end
129
- end
130
-
131
- # @param [AggregateTarget] aggregate_target
132
- # The aggregate target, may be nil.
133
- #
134
- # @param [PodTarget] pod_target
135
- # The pod target to link or not.
136
- #
137
- # @return [Boolean] Whether static dependency should be added to the 'OTHER_LDFLAGS'
138
- # of the aggregate target. Aggregate targets that inherit search paths will only link
139
- # if the target has explicitly declared the pod dependency.
140
- #
141
- def self.links_dependency?(aggregate_target, pod_target)
142
- return true if aggregate_target.nil? || aggregate_target.target_definition.inheritance == 'complete'
143
- aggregate_target.pod_targets_to_link.include?(pod_target)
144
- end
145
-
146
- # Adds build settings for dynamic vendored frameworks and libraries.
147
- #
148
- # @param [Target] target
149
- # The root target, may be nil.
150
- #
151
- # @param [PodTarget] pod_target
152
- # The pod target, which holds the list of +Spec::FileAccessor+.
153
- #
154
- # @param [Xcodeproj::Config] xcconfig
155
- # The xcconfig to edit.
156
- #
157
- # @param [Boolean] include_ld_flags
158
- # Indicates whether or not to generate ld flags in addition to compile flags
159
- #
160
- # @param [Boolean] test_xcconfig
161
- # Whether the settings for dependent targets are being generated for a test xcconfig or not.
162
- #
163
- # @return [void]
164
- #
165
- def self.add_dynamic_dependency_build_settings(target, pod_target, xcconfig, include_ld_flags, test_xcconfig)
166
- file_accessors = pod_target.file_accessors
167
- file_accessors = file_accessors.reject { |f| f.spec.test_specification? } unless test_xcconfig
168
- file_accessors.each do |file_accessor|
169
- if target.nil? || !file_accessor.spec.test_specification?
170
- file_accessor.vendored_dynamic_frameworks.each do |vendored_dynamic_framework|
171
- XCConfigHelper.add_framework_build_settings(vendored_dynamic_framework, xcconfig, pod_target.sandbox.root, include_ld_flags)
172
- end
173
- file_accessor.vendored_dynamic_libraries.each do |vendored_dynamic_library|
174
- XCConfigHelper.add_library_build_settings(vendored_dynamic_library, xcconfig, pod_target.sandbox.root, include_ld_flags)
175
- end
176
- end
177
- end
178
- end
179
-
180
- # Configures the given Xcconfig according to the build settings of the
181
- # given Specification.
182
- #
183
- # @param [Specification::Consumer] consumer
184
- # The consumer of the specification.
185
- #
186
- # @param [Xcodeproj::Config] xcconfig
187
- # The xcconfig to edit.
188
- #
189
- # @return [void]
190
- #
191
- def self.add_spec_build_settings_to_xcconfig(consumer, xcconfig)
192
- xcconfig.libraries.merge(consumer.libraries)
193
- xcconfig.frameworks.merge(consumer.frameworks)
194
- xcconfig.weak_frameworks.merge(consumer.weak_frameworks)
195
- add_developers_frameworks_if_needed(xcconfig)
196
- end
197
-
198
- # Configures the given Xcconfig with the build settings for the given
199
- # framework path.
200
- #
201
- # @param [Pathname] framework_path
202
- # The path of the framework.
203
- #
204
- # @param [Xcodeproj::Config] xcconfig
205
- # The xcconfig to edit.
206
- #
207
- # @param [Pathname] sandbox_root
208
- # The path retrieved from Sandbox#root.
209
- #
210
- # @param [Boolean] include_ld_flags
211
- # Indicates whether or not to generate ld flags in addition to compile flags
212
- #
213
- # @return [void]
214
- #
215
- def self.add_framework_build_settings(framework_path, xcconfig, sandbox_root, include_ld_flags = true)
216
- name = File.basename(framework_path, '.framework')
217
- dirname = '${PODS_ROOT}/' + framework_path.dirname.relative_path_from(sandbox_root).to_s
218
- build_settings = {
219
- 'FRAMEWORK_SEARCH_PATHS' => quote([dirname]),
220
- }
221
- build_settings['OTHER_LDFLAGS'] = "-framework \"#{name}\"" if include_ld_flags
222
- xcconfig.merge!(build_settings)
223
- end
224
-
225
- # Configures the given Xcconfig with the build settings for the given
226
- # library path.
227
- #
228
- # @param [Pathname] library_path
229
- # The path of the library.
230
- #
231
- # @param [Xcodeproj::Config] xcconfig
232
- # The xcconfig to edit.
233
- #
234
- # @param [Pathname] sandbox_root
235
- # The path retrieved from Sandbox#root.
236
- #
237
- # @param [Boolean] include_ld_flags
238
- # Indicates whether or not to generate ld flags in addition to compile flags
239
- #
240
- # @return [void]
241
- #
242
- def self.add_library_build_settings(library_path, xcconfig, sandbox_root, include_ld_flags = true)
243
- extension = File.extname(library_path)
244
- name = File.basename(library_path, extension).sub(/\Alib/, '')
245
- dirname = '${PODS_ROOT}/' + library_path.dirname.relative_path_from(sandbox_root).to_s
246
- build_settings = {
247
- 'LIBRARY_SEARCH_PATHS' => quote([dirname]),
248
- }
249
- build_settings['OTHER_LDFLAGS'] = "-l\"#{name}\"" if include_ld_flags
250
- xcconfig.merge!(build_settings)
251
- end
252
-
253
- # Add the code signing settings for generated targets to ensure that
254
- # frameworks are correctly signed to be integrated and re-signed when
255
- # building the application and embedding the framework
256
- #
257
- # @param [Target] target
258
- # The target.
259
- #
260
- # @param [Xcodeproj::Config] xcconfig
261
- # The xcconfig to edit.
262
- #
263
- # @return [void]
264
- #
265
- def self.add_code_signing_settings(target, xcconfig)
266
- build_settings = {}
267
- if target.platform.to_sym == :osx
268
- build_settings['CODE_SIGN_IDENTITY'] = ''
269
- end
270
- xcconfig.merge!(build_settings)
271
- end
272
-
273
- # Checks if the given target requires specific settings and configures
274
- # the given Xcconfig.
275
- #
276
- # @param [Target] target
277
- # The target.
278
- #
279
- # @param [Xcodeproj::Config] xcconfig
280
- # The xcconfig to edit.
281
- #
282
- # @return [void]
283
- #
284
- def self.add_target_specific_settings(target, xcconfig)
285
- if target.requires_frameworks?
286
- add_code_signing_settings(target, xcconfig)
287
- end
288
- add_language_specific_settings(target, xcconfig)
289
- end
290
-
291
- # Returns the search paths for frameworks and libraries the given target
292
- # depends on, so that it can be correctly built and linked.
293
- #
294
- # @param [Target] target
295
- # The target.
296
- #
297
- # @param [Array<PodTarget>] dependent_targets
298
- # The pod targets the given target depends on.
299
- #
300
- # @param [Boolean] test_xcconfig
301
- # Whether the settings for dependent targets are being generated for a test xcconfig or not.
302
- #
303
- # @return [Hash<String, String>] the settings
304
- #
305
- def self.search_paths_for_dependent_targets(target, dependent_targets, test_xcconfig = false)
306
- dependent_targets = dependent_targets.select(&:should_build?)
307
-
308
- # Filter out dependent targets that are subsets of another target.
309
- subset_targets = []
310
- dependent_targets.uniq.combination(2) do |a, b|
311
- if (a.specs - b.specs).empty?
312
- subset_targets << a
313
- elsif (b.specs - a.specs).empty?
314
- subset_targets << b
315
- end
316
- end
317
- dependent_targets -= subset_targets
318
-
319
- # Alias build dirs to avoid recursive definitions for pod targets and depending
320
- # on build settings which could be overwritten in the user target.
321
- build_settings = {
322
- BUILD_DIR_VARIABLE[2..-2] => '${BUILD_DIR}',
323
- CONFIGURATION_BUILD_DIR_VARIABLE[2..-2] => "#{BUILD_DIR_VARIABLE}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)",
324
- }
325
-
326
- # Scope pod targets as long as they are not test targets.
327
- if !test_xcconfig && target.respond_to?(:configuration_build_dir)
328
- build_settings['CONFIGURATION_BUILD_DIR'] = target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
329
- end
330
-
331
- module_map_files = []
332
- unless dependent_targets.empty?
333
- framework_search_paths = []
334
- library_search_paths = []
335
- swift_import_paths = []
336
- dependent_targets.each do |dependent_target|
337
- if dependent_target.requires_frameworks?
338
- framework_search_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
339
- else
340
- library_search_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
341
- if dependent_target.defines_module?
342
- module_map_file = if dependent_target.uses_swift?
343
- # for swift, we have a custom build phase that copies in the module map, appending the .Swift module
344
- "${PODS_CONFIGURATION_BUILD_DIR}/#{dependent_target.label}/#{dependent_target.product_module_name}.modulemap"
345
- else
346
- "${PODS_ROOT}/#{dependent_target.module_map_path.relative_path_from(dependent_target.sandbox.root)}"
347
- end
348
- module_map_files << %(-fmodule-map-file="#{module_map_file}")
349
- swift_import_paths << dependent_target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE) if dependent_target.uses_swift?
350
- end
351
- end
352
- end
353
-
354
- build_settings['FRAMEWORK_SEARCH_PATHS'] = XCConfigHelper.quote(framework_search_paths.uniq)
355
- build_settings['LIBRARY_SEARCH_PATHS'] = XCConfigHelper.quote(library_search_paths.uniq)
356
- build_settings['SWIFT_INCLUDE_PATHS'] = XCConfigHelper.quote(swift_import_paths.uniq)
357
- end
358
-
359
- other_swift_flags = module_map_files.tap(&:uniq!).flat_map { |f| ['-Xcc', f] }
360
- if target.is_a?(PodTarget) && !target.requires_frameworks? && target.defines_module? && !test_xcconfig
361
- # make it possible for a mixed swift/objc static library to be able to import the objc from within swift
362
- other_swift_flags += ['-import-underlying-module', '-Xcc', '-fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}"']
363
- end
364
- # unconditionally set these, because of (the possibility of) having to add the pod targets own module map file
365
- build_settings['OTHER_CFLAGS'] = module_map_files.join(' ')
366
- build_settings['OTHER_SWIFT_FLAGS'] = other_swift_flags.join(' ')
367
-
368
- build_settings
369
- end
370
-
371
- # Updates xcconfig with the HEADER_SEARCH_PATHS from the search_paths.
372
- #
373
- # @param [Target] search_paths_target
374
- # The target.
375
- #
376
- # @param [Xcodeproj::Config] xcconfig
377
- # The xcconfig to edit.
378
- #
379
- def self.propagate_header_search_paths_from_search_paths(search_paths_target, xcconfig)
380
- header_search_paths_list = []
381
- search_paths_target.pod_targets.each do |target|
382
- target.spec_consumers.each do |spec_consumer|
383
- paths = spec_consumer.user_target_xcconfig['HEADER_SEARCH_PATHS']
384
- header_search_paths_list <<= paths unless paths.nil?
385
- end
386
- unless header_search_paths_list == []
387
- header_search_paths = header_search_paths_list.join(' ')
388
- unless header_search_paths.include? '$(inherited)'
389
- header_search_paths = '$(inherited) ' + header_search_paths
390
- end
391
- build_settings = { 'HEADER_SEARCH_PATHS' => header_search_paths }
392
- xcconfig.merge!(build_settings)
393
- end
394
- end
395
- end
396
-
397
- # Add custom build settings and required build settings to link to
398
- # vendored libraries and frameworks.
399
- #
400
- # @param [Target] target
401
- # The root target, may be nil.
402
- #
403
- # @param [Array<PodTarget] dep_targets
404
- # The dependency targets to add the vendored build settings for.
405
- #
406
- # @param [Xcodeproj::Config] xcconfig
407
- # The xcconfig to edit.
408
- #
409
- # @param [Boolean] include_ld_flags
410
- # Indicates whether or not to generate ld flags in addition to compile flags
411
- #
412
- # @param [Boolean] test_xcconfig
413
- # Indicates whether or not the generated ld flags are for a test xcconfig or not
414
- #
415
- # @note
416
- # In case of generated pod targets, which require frameworks, the
417
- # vendored frameworks and libraries are already linked statically
418
- # into the framework binary and must not be linked again to the
419
- # user target.
420
- #
421
- def self.generate_vendored_build_settings(target, dep_targets, xcconfig, include_ld_flags = true, test_xcconfig = false)
422
- dep_targets.each do |dep_target|
423
- unless dep_target.should_build? && dep_target.requires_frameworks? && !dep_target.static_framework?
424
- XCConfigHelper.add_settings_for_file_accessors_of_target(target, dep_target, xcconfig, include_ld_flags, test_xcconfig)
425
- end
426
- end
427
- end
428
-
429
- # Ensure to add the default linker run path search paths as they could
430
- # be not present due to being historically absent in the project or
431
- # target template or just being removed by being superficial when
432
- # linking third-party dependencies exclusively statically. This is not
433
- # something a project needs specifically for the integration with
434
- # CocoaPods, but makes sure that it is self-contained for the given
435
- # constraints.
436
- #
437
- # @param [Target] target
438
- # The target, this can be an aggregate target or a pod target.
439
- #
440
- # @param [Boolean] requires_host_target
441
- # If this target requires a host target
442
- #
443
- # @param [Boolean] test_bundle
444
- # Whether this is a test bundle or not. This has an effect when the platform is `osx` and changes
445
- # the runtime search paths accordingly.
446
- #
447
- # @param [Xcodeproj::Config] xcconfig
448
- # The xcconfig to edit.
449
- #
450
- # @return [void]
451
- #
452
- def self.generate_ld_runpath_search_paths(target, requires_host_target, test_bundle, xcconfig)
453
- ld_runpath_search_paths = ['$(inherited)']
454
- if target.platform.symbolic_name == :osx
455
- ld_runpath_search_paths << "'@executable_path/../Frameworks'"
456
- ld_runpath_search_paths << \
457
- if test_bundle
458
- "'@loader_path/../Frameworks'"
459
- else
460
- "'@loader_path/Frameworks'"
461
- end
462
- else
463
- ld_runpath_search_paths << [
464
- "'@executable_path/Frameworks'",
465
- "'@loader_path/Frameworks'",
466
- ]
467
- ld_runpath_search_paths << "'@executable_path/../../Frameworks'" if requires_host_target
468
- end
469
- xcconfig.merge!('LD_RUNPATH_SEARCH_PATHS' => ld_runpath_search_paths.join(' '))
470
- end
471
-
472
- # Add pod target to list of frameworks / libraries that are linked
473
- # with the user’s project.
474
- #
475
- # @param [AggregateTarget] aggregate_target
476
- # The aggregate target, may be nil.
477
- #
478
- # @param [Array<PodTarget] pod_targets
479
- # The pod targets to add the vendored build settings for.
480
- #
481
- # @param [Xcodeproj::Config] xcconfig
482
- # The xcconfig to edit.
483
- #
484
- # @return [void]
485
- #
486
- def self.generate_other_ld_flags(aggregate_target, pod_targets, xcconfig)
487
- # Make sure -framework option gets added for the search paths when static_frameworks are involved.
488
- # Otherwise test targets won't link in their primary target's dependencies.
489
- unless aggregate_target.nil?
490
- dependent_targets = aggregate_target.search_paths_aggregate_targets
491
- dependent_targets.each do |dependent_target|
492
- if aggregate_target.requires_frameworks? && dependent_target.pod_targets.any?(&:static_framework?)
493
- generate_other_ld_flags(dependent_target, dependent_target.pod_targets, xcconfig)
494
- end
495
- end
496
- end
497
- other_ld_flags = pod_targets.select(&:should_build?).map do |pod_target|
498
- if pod_target.requires_frameworks?
499
- %(-framework "#{pod_target.product_basename}")
500
- elsif XCConfigHelper.links_dependency?(aggregate_target, pod_target)
501
- %(-l "#{pod_target.product_basename}")
502
- end
503
- end
504
- xcconfig.merge!('OTHER_LDFLAGS' => other_ld_flags.compact.join(' '))
505
- end
506
-
507
- # Checks if the given target requires language specific settings and
508
- # configures the given Xcconfig.
509
- #
510
- # @param [Target] target
511
- # The target.
512
- #
513
- # @param [Xcodeproj::Config] xcconfig
514
- # The xcconfig to edit.
515
- #
516
- # @return [void]
517
- #
518
- def self.add_language_specific_settings(target, xcconfig)
519
- if target.uses_swift?
520
- other_swift_flags = ['$(inherited)', quote(%w(-D COCOAPODS))]
521
- other_swift_flags << quote(%w(-suppress-warnings)) if target.try(:inhibit_warnings?)
522
- build_settings = { 'OTHER_SWIFT_FLAGS' => other_swift_flags.join(' ') }
523
- xcconfig.merge!(build_settings)
524
- end
525
- end
526
-
527
- # Adds the search paths of the developer frameworks to the specification
528
- # if needed. This is done because the `SenTestingKit` requires them and
529
- # adding them to each specification which requires it is repetitive and
530
- # error prone.
531
- #
532
- # @param [Xcodeproj::Config] xcconfig
533
- # The xcconfig to edit.
534
- #
535
- # @return [void]
536
- #
537
- def self.add_developers_frameworks_if_needed(xcconfig)
538
- matched_frameworks = xcconfig.frameworks & %w(XCTest SenTestingKit)
539
- unless matched_frameworks.empty?
540
- search_paths = xcconfig.attributes['FRAMEWORK_SEARCH_PATHS'] ||= ''
541
- search_paths_to_add = []
542
- search_paths_to_add << '$(inherited)'
543
- frameworks_path = '"$(PLATFORM_DIR)/Developer/Library/Frameworks"'
544
- search_paths_to_add << frameworks_path
545
- search_paths_to_add.each do |search_path|
546
- unless search_paths.include?(search_path)
547
- search_paths << ' ' unless search_paths.empty?
548
- search_paths << search_path
549
- end
550
- end
551
- end
552
- end
553
-
554
- #---------------------------------------------------------------------#
555
- end
556
- end
557
- end
558
- end
@@ -1,13 +0,0 @@
1
- module Pod
2
- module Generator
3
- # Generates Xcode configuration files. A configuration file is generated
4
- # for each Pod and for each Pod target definition. The aggregates the
5
- # configurations of the Pods and define target specific settings.
6
- #
7
- module XCConfig
8
- autoload :AggregateXCConfig, 'cocoapods/generator/xcconfig/aggregate_xcconfig'
9
- autoload :PodXCConfig, 'cocoapods/generator/xcconfig/pod_xcconfig'
10
- autoload :XCConfigHelper, 'cocoapods/generator/xcconfig/xcconfig_helper'
11
- end
12
- end
13
- end