cocoapods 1.5.2 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
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