cocoapods 1.5.2 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +365 -1
- data/bin/pod +1 -1
- data/lib/cocoapods/command/cache/clean.rb +1 -1
- data/lib/cocoapods/command/init.rb +4 -2
- data/lib/cocoapods/command/install.rb +7 -0
- data/lib/cocoapods/command/lib/lint.rb +8 -1
- data/lib/cocoapods/command/outdated.rb +4 -9
- data/lib/cocoapods/command/repo/add.rb +1 -1
- data/lib/cocoapods/command/repo/list.rb +1 -1
- data/lib/cocoapods/command/repo/push.rb +17 -12
- data/lib/cocoapods/command/repo/remove.rb +1 -1
- data/lib/cocoapods/command/repo/update.rb +1 -1
- data/lib/cocoapods/command/setup.rb +1 -1
- data/lib/cocoapods/command/spec/create.rb +39 -39
- data/lib/cocoapods/command/spec/lint.rb +8 -1
- data/lib/cocoapods/command.rb +3 -1
- data/lib/cocoapods/config.rb +13 -2
- data/lib/cocoapods/downloader/cache.rb +1 -1
- data/lib/cocoapods/executable.rb +3 -3
- data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
- data/lib/cocoapods/external_sources.rb +7 -4
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +13 -2
- data/lib/cocoapods/generator/app_target_helper.rb +141 -17
- data/lib/cocoapods/generator/copy_resources_script.rb +14 -3
- data/lib/cocoapods/generator/dummy_source.rb +14 -5
- data/lib/cocoapods/generator/embed_frameworks_script.rb +37 -20
- data/lib/cocoapods/generator/header.rb +1 -1
- data/lib/cocoapods/generator/info_plist_file.rb +12 -4
- data/lib/cocoapods/generator/prefix_header.rb +2 -2
- data/lib/cocoapods/hooks_manager.rb +28 -17
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +14 -6
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
- data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +27 -14
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
- data/lib/cocoapods/installer/analyzer.rb +391 -284
- data/lib/cocoapods/installer/installation_options.rb +2 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
- data/lib/cocoapods/installer/post_install_hooks_context.rb +72 -47
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +69 -29
- data/lib/cocoapods/installer/user_project_integrator.rb +6 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +104 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +23 -50
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +296 -177
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +51 -33
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +62 -69
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +130 -122
- data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
- data/lib/cocoapods/installer.rb +140 -63
- data/lib/cocoapods/project.rb +16 -14
- data/lib/cocoapods/resolver/resolver_specification.rb +41 -0
- data/lib/cocoapods/resolver.rb +79 -98
- data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
- data/lib/cocoapods/sandbox/headers_store.rb +9 -8
- data/lib/cocoapods/sandbox/path_list.rb +5 -8
- data/lib/cocoapods/sandbox.rb +31 -43
- data/lib/cocoapods/sources_manager.rb +1 -1
- data/lib/cocoapods/target/aggregate_target.rb +143 -85
- data/lib/cocoapods/target/build_settings.rb +1124 -0
- data/lib/cocoapods/target/framework_paths.rb +36 -0
- data/lib/cocoapods/target/pod_target.rb +198 -295
- data/lib/cocoapods/target.rb +92 -37
- data/lib/cocoapods/user_interface.rb +5 -0
- data/lib/cocoapods/validator.rb +149 -44
- data/lib/cocoapods.rb +0 -1
- metadata +31 -23
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
- data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
- data/lib/cocoapods/generator/xcconfig.rb +0 -13
@@ -4,12 +4,18 @@ module Pod
|
|
4
4
|
# The {PodsProjectGenerator} handles generation of the 'Pods/Pods.xcodeproj'
|
5
5
|
#
|
6
6
|
class PodsProjectGenerator
|
7
|
+
require 'cocoapods/installer/xcode/pods_project_generator/target_installer_helper'
|
7
8
|
require 'cocoapods/installer/xcode/pods_project_generator/pod_target_integrator'
|
8
9
|
require 'cocoapods/installer/xcode/pods_project_generator/target_installer'
|
10
|
+
require 'cocoapods/installer/xcode/pods_project_generator/target_installation_result'
|
9
11
|
require 'cocoapods/installer/xcode/pods_project_generator/pod_target_installer'
|
10
12
|
require 'cocoapods/installer/xcode/pods_project_generator/file_references_installer'
|
11
13
|
require 'cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer'
|
12
14
|
|
15
|
+
# @return [Sandbox] The sandbox where the Pods should be installed.
|
16
|
+
#
|
17
|
+
attr_reader :sandbox
|
18
|
+
|
13
19
|
# @return [Pod::Project] the `Pods/Pods.xcodeproj` project.
|
14
20
|
#
|
15
21
|
attr_reader :project
|
@@ -20,10 +26,6 @@ module Pod
|
|
20
26
|
#
|
21
27
|
attr_reader :aggregate_targets
|
22
28
|
|
23
|
-
# @return [Sandbox] The sandbox where the Pods should be installed.
|
24
|
-
#
|
25
|
-
attr_reader :sandbox
|
26
|
-
|
27
29
|
# @return [Array<PodTarget>] The model representations of pod targets.
|
28
30
|
#
|
29
31
|
attr_reader :pod_targets
|
@@ -43,16 +45,16 @@ module Pod
|
|
43
45
|
|
44
46
|
# Initialize a new instance
|
45
47
|
#
|
46
|
-
# @param [
|
47
|
-
# @param [
|
48
|
-
# @param [Array<PodTarget>] pod_targets @see pod_targets
|
49
|
-
# @param [Analyzer] analysis_result @see analysis_result
|
50
|
-
# @param [InstallationOptions] installation_options @see installation_options
|
51
|
-
# @param [Config] config @see config
|
48
|
+
# @param [Sandbox] sandbox @see #sandbox
|
49
|
+
# @param [Array<AggregateTarget>] aggregate_targets @see #aggregate_targets
|
50
|
+
# @param [Array<PodTarget>] pod_targets @see #pod_targets
|
51
|
+
# @param [Analyzer] analysis_result @see #analysis_result
|
52
|
+
# @param [InstallationOptions] installation_options @see #installation_options
|
53
|
+
# @param [Config] config @see #config
|
52
54
|
#
|
53
|
-
def initialize(
|
54
|
-
@aggregate_targets = aggregate_targets
|
55
|
+
def initialize(sandbox, aggregate_targets, pod_targets, analysis_result, installation_options, config)
|
55
56
|
@sandbox = sandbox
|
57
|
+
@aggregate_targets = aggregate_targets
|
56
58
|
@pod_targets = pod_targets
|
57
59
|
@analysis_result = analysis_result
|
58
60
|
@installation_options = installation_options
|
@@ -62,9 +64,10 @@ module Pod
|
|
62
64
|
def generate!
|
63
65
|
prepare
|
64
66
|
install_file_references
|
65
|
-
|
66
|
-
integrate_targets
|
67
|
-
|
67
|
+
@target_installation_results = install_targets
|
68
|
+
integrate_targets(@target_installation_results.pod_target_installation_results)
|
69
|
+
wire_target_dependencies(@target_installation_results)
|
70
|
+
@target_installation_results
|
68
71
|
end
|
69
72
|
|
70
73
|
def write
|
@@ -76,11 +79,19 @@ module Pod
|
|
76
79
|
UI.message('- Generating deterministic UUIDs') { project.predictabilize_uuids }
|
77
80
|
end
|
78
81
|
library_product_types = [:framework, :dynamic_library, :static_library]
|
82
|
+
|
83
|
+
pod_target_installation_results = @target_installation_results.pod_target_installation_results
|
84
|
+
results_by_native_target = Hash[pod_target_installation_results.map do |_, result|
|
85
|
+
[result.native_target, result]
|
86
|
+
end]
|
79
87
|
project.recreate_user_schemes(false) do |scheme, target|
|
88
|
+
next unless target.respond_to?(:symbol_type)
|
80
89
|
next unless library_product_types.include? target.symbol_type
|
81
|
-
|
82
|
-
next
|
83
|
-
|
90
|
+
installation_result = results_by_native_target[target]
|
91
|
+
next unless installation_result
|
92
|
+
installation_result.test_native_targets.each do |test_native_target|
|
93
|
+
scheme.add_test_target(test_native_target)
|
94
|
+
end
|
84
95
|
end
|
85
96
|
project.save
|
86
97
|
end
|
@@ -95,8 +106,8 @@ module Pod
|
|
95
106
|
next unless share_scheme_for_development_pod?(pod_target.pod_name)
|
96
107
|
Xcodeproj::XCScheme.share_scheme(project.path, pod_target.label)
|
97
108
|
if pod_target.contains_test_specifications?
|
98
|
-
pod_target.
|
99
|
-
Xcodeproj::XCScheme.share_scheme(project.path, pod_target.test_target_label(
|
109
|
+
pod_target.test_specs.each do |test_spec|
|
110
|
+
Xcodeproj::XCScheme.share_scheme(project.path, pod_target.test_target_label(test_spec))
|
100
111
|
end
|
101
112
|
end
|
102
113
|
end
|
@@ -104,6 +115,8 @@ module Pod
|
|
104
115
|
|
105
116
|
private
|
106
117
|
|
118
|
+
InstallationResults = Struct.new(:pod_target_installation_results, :aggregate_target_installation_results)
|
119
|
+
|
107
120
|
def create_project
|
108
121
|
if object_version = aggregate_targets.map(&:user_project).compact.map { |p| p.object_version.to_i }.min
|
109
122
|
Pod::Project.new(sandbox.project_path, false, object_version)
|
@@ -152,60 +165,68 @@ module Pod
|
|
152
165
|
build_configuration.build_settings['TVOS_DEPLOYMENT_TARGET'] = tvos_deployment_target.to_s if tvos_deployment_target
|
153
166
|
build_configuration.build_settings['STRIP_INSTALLED_PRODUCT'] = 'NO'
|
154
167
|
build_configuration.build_settings['CLANG_ENABLE_OBJC_ARC'] = 'YES'
|
155
|
-
build_configuration.build_settings['CODE_SIGNING_REQUIRED'] = 'NO'
|
156
|
-
build_configuration.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
|
157
168
|
end
|
158
169
|
end
|
159
170
|
end
|
160
171
|
|
161
172
|
def install_file_references
|
162
|
-
installer = FileReferencesInstaller.new(sandbox, pod_targets, project)
|
173
|
+
installer = FileReferencesInstaller.new(sandbox, pod_targets, project, installation_options.preserve_pod_file_structure)
|
163
174
|
installer.install!
|
164
175
|
end
|
165
176
|
|
166
|
-
def
|
177
|
+
def install_targets
|
167
178
|
UI.message '- Installing targets' do
|
168
179
|
umbrella_headers_by_dir = pod_targets.map do |pod_target|
|
169
180
|
next unless pod_target.should_build? && pod_target.defines_module?
|
170
181
|
pod_target.umbrella_header_path
|
171
182
|
end.compact.group_by(&:dirname)
|
172
183
|
|
173
|
-
pod_targets.sort_by(&:name).
|
174
|
-
|
175
|
-
target_installer
|
176
|
-
target_installer.install!
|
177
|
-
end
|
184
|
+
pod_target_installation_results = Hash[pod_targets.sort_by(&:name).map do |pod_target|
|
185
|
+
umbrella_headers_in_header_dir = umbrella_headers_by_dir[pod_target.module_map_path.dirname]
|
186
|
+
target_installer = PodTargetInstaller.new(sandbox, @project, pod_target, umbrella_headers_in_header_dir)
|
187
|
+
[pod_target.name, target_installer.install!]
|
188
|
+
end]
|
178
189
|
|
179
|
-
|
180
|
-
|
181
|
-
|
190
|
+
# Hook up system framework dependencies for the pod targets that were just installed.
|
191
|
+
pod_target_installation_result_values = pod_target_installation_results.values.compact
|
192
|
+
unless pod_target_installation_result_values.empty?
|
193
|
+
add_system_framework_dependencies(pod_target_installation_result_values)
|
182
194
|
end
|
183
195
|
|
184
|
-
|
196
|
+
aggregate_target_installation_results = Hash[aggregate_targets.sort_by(&:name).map do |target|
|
197
|
+
target_installer = AggregateTargetInstaller.new(sandbox, @project, target)
|
198
|
+
[target.name, target_installer.install!]
|
199
|
+
end]
|
200
|
+
|
201
|
+
InstallationResults.new(pod_target_installation_results, aggregate_target_installation_results)
|
185
202
|
end
|
186
203
|
end
|
187
204
|
|
188
|
-
def integrate_targets
|
189
|
-
|
190
|
-
|
205
|
+
def integrate_targets(pod_target_installation_results)
|
206
|
+
pod_installations_to_integrate = pod_target_installation_results.values.select do |pod_target_installation_result|
|
207
|
+
pod_target = pod_target_installation_result.target
|
208
|
+
!pod_target_installation_result.test_native_targets.empty? || pod_target.contains_script_phases?
|
209
|
+
end
|
210
|
+
unless pod_installations_to_integrate.empty?
|
191
211
|
UI.message '- Integrating targets' do
|
192
|
-
|
193
|
-
PodTargetIntegrator.new(
|
212
|
+
pod_installations_to_integrate.each do |pod_target_installation_result|
|
213
|
+
PodTargetIntegrator.new(pod_target_installation_result, installation_options).integrate!
|
194
214
|
end
|
195
215
|
end
|
196
216
|
end
|
197
217
|
end
|
198
218
|
|
199
|
-
def add_system_framework_dependencies
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
219
|
+
def add_system_framework_dependencies(pod_target_installation_results)
|
220
|
+
sorted_installation_results = pod_target_installation_results.sort_by do |pod_target_installation_result|
|
221
|
+
pod_target_installation_result.target.name
|
222
|
+
end
|
223
|
+
sorted_installation_results.each do |target_installation_result|
|
224
|
+
pod_target = target_installation_result.target
|
225
|
+
next unless pod_target.should_build?
|
226
|
+
next if !pod_target.requires_frameworks? || pod_target.static_framework?
|
227
|
+
pod_target.file_accessors.each do |file_accessor|
|
228
|
+
native_target = target_installation_result.native_target_for_spec(file_accessor.spec)
|
229
|
+
add_system_frameworks_to_native_target(native_target, file_accessor)
|
209
230
|
end
|
210
231
|
end
|
211
232
|
end
|
@@ -213,53 +234,70 @@ module Pod
|
|
213
234
|
# Adds a target dependency for each pod spec to each aggregate target and
|
214
235
|
# links the pod targets among each other.
|
215
236
|
#
|
237
|
+
# @param [Array[Hash{String=>TargetInstallationResult}]] target_installation_results
|
238
|
+
# the installation results that were produced when all targets were installed. This includes
|
239
|
+
# pod target installation results and aggregate target installation results.
|
240
|
+
#
|
216
241
|
# @return [void]
|
217
242
|
#
|
218
|
-
def
|
243
|
+
def wire_target_dependencies(target_installation_results)
|
219
244
|
frameworks_group = project.frameworks_group
|
220
|
-
|
221
|
-
|
245
|
+
pod_target_installation_results_hash = target_installation_results.pod_target_installation_results
|
246
|
+
aggregate_target_installation_results_hash = target_installation_results.aggregate_target_installation_results
|
247
|
+
|
248
|
+
# Wire up aggregate targets
|
249
|
+
aggregate_target_installation_results_hash.values.each do |aggregate_target_installation_result|
|
250
|
+
aggregate_target = aggregate_target_installation_result.target
|
251
|
+
aggregate_native_target = aggregate_target_installation_result.native_target
|
222
252
|
is_app_extension = !(aggregate_target.user_targets.map(&:symbol_type) &
|
223
|
-
|
253
|
+
[:app_extension, :watch_extension, :watch2_extension, :tv_extension, :messages_extension]).empty?
|
224
254
|
is_app_extension ||= aggregate_target.user_targets.any? { |ut| ut.common_resolved_build_setting('APPLICATION_EXTENSION_API_ONLY') == 'YES' }
|
225
|
-
|
255
|
+
configure_app_extension_api_only_to_native_target(aggregate_native_target) if is_app_extension
|
256
|
+
# Wire up dependencies that are part of inherit search paths for this aggregate target.
|
226
257
|
aggregate_target.search_paths_aggregate_targets.each do |search_paths_target|
|
227
|
-
|
258
|
+
aggregate_native_target.add_dependency(aggregate_target_installation_results_hash[search_paths_target.name].native_target)
|
228
259
|
end
|
229
|
-
|
260
|
+
# Wire up all pod target dependencies to aggregate target.
|
230
261
|
aggregate_target.pod_targets.each do |pod_target|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
add_pod_target_test_dependencies(pod_target, frameworks_group)
|
237
|
-
next
|
238
|
-
end
|
239
|
-
|
240
|
-
aggregate_target.native_target.add_dependency(pod_target.native_target)
|
241
|
-
configure_app_extension_api_only_for_target(pod_target) if is_app_extension
|
262
|
+
pod_target_native_target = pod_target_installation_results_hash[pod_target.name].native_target
|
263
|
+
aggregate_native_target.add_dependency(pod_target_native_target)
|
264
|
+
configure_app_extension_api_only_to_native_target(pod_target_native_target) if is_app_extension
|
265
|
+
end
|
266
|
+
end
|
242
267
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
268
|
+
# Wire up pod targets
|
269
|
+
pod_target_installation_results_hash.values.each do |pod_target_installation_result|
|
270
|
+
pod_target = pod_target_installation_result.target
|
271
|
+
native_target = pod_target_installation_result.native_target
|
272
|
+
# First, wire up all resource bundles.
|
273
|
+
pod_target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
|
274
|
+
native_target.add_dependency(resource_bundle_target)
|
275
|
+
if pod_target.requires_frameworks? && pod_target.should_build?
|
276
|
+
native_target.add_resources([resource_bundle_target.product_reference])
|
249
277
|
end
|
250
278
|
end
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
next
|
279
|
+
# Wire up all dependencies to this pod target, if any.
|
280
|
+
dependent_targets = pod_target.dependent_targets
|
281
|
+
dependent_targets.each do |dependent_target|
|
282
|
+
native_target.add_dependency(pod_target_installation_results_hash[dependent_target.name].native_target)
|
283
|
+
add_framework_file_reference_to_native_target(native_target, pod_target, dependent_target, frameworks_group)
|
257
284
|
end
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
285
|
+
# Wire up test native targets.
|
286
|
+
unless pod_target_installation_result.test_native_targets.empty?
|
287
|
+
pod_target_installation_result.test_specs_by_native_target.each do |test_native_target, test_specs|
|
288
|
+
test_dependent_targets = test_specs.flat_map { |s| pod_target.test_dependent_targets_by_spec_name[s.name] }.compact.unshift(pod_target).uniq
|
289
|
+
test_dependent_targets.each do |test_dependent_target|
|
290
|
+
dependency_installation_result = pod_target_installation_results_hash[test_dependent_target.name]
|
291
|
+
resource_bundle_native_targets = dependency_installation_result.test_resource_bundle_targets[test_specs.first.name]
|
292
|
+
unless resource_bundle_native_targets.nil?
|
293
|
+
resource_bundle_native_targets.each do |test_resource_bundle_target|
|
294
|
+
test_native_target.add_dependency(test_resource_bundle_target)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
test_native_target.add_dependency(dependency_installation_result.native_target)
|
298
|
+
add_framework_file_reference_to_native_target(test_native_target, pod_target, test_dependent_target, frameworks_group)
|
299
|
+
end
|
300
|
+
end
|
263
301
|
end
|
264
302
|
end
|
265
303
|
end
|
@@ -295,55 +333,25 @@ module Pod
|
|
295
333
|
|
296
334
|
# @! group Private Helpers
|
297
335
|
|
298
|
-
|
299
|
-
|
300
|
-
def add_pod_target_test_dependencies(pod_target, frameworks_group)
|
301
|
-
test_dependent_targets = pod_target.all_dependent_targets
|
302
|
-
pod_target.test_specs_by_native_target.each do |test_native_target, test_specs|
|
303
|
-
test_dependent_targets.reject(&:should_build?).each do |test_dependent_target|
|
304
|
-
add_resource_bundles_to_native_target(test_dependent_target, test_native_target)
|
305
|
-
end
|
306
|
-
add_dependent_targets_to_native_target(test_dependent_targets, test_native_target, false, pod_target.requires_frameworks?, frameworks_group)
|
307
|
-
test_spec_consumers = test_specs.map { |test_spec| test_spec.consumer(pod_target.platform) }
|
308
|
-
if test_spec_consumers.any?(&:requires_app_host?)
|
309
|
-
app_host_target = project.targets.find { |t| t.name == pod_target.app_host_label(test_specs.first.test_type) }
|
310
|
-
test_native_target.add_dependency(app_host_target)
|
311
|
-
end
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
def add_dependent_targets_to_native_target(dependent_targets, native_target, is_app_extension, requires_frameworks, frameworks_group)
|
316
|
-
dependent_targets.each do |pod_dependency_target|
|
317
|
-
next unless pod_dependency_target.should_build?
|
318
|
-
native_target.add_dependency(pod_dependency_target.native_target)
|
319
|
-
configure_app_extension_api_only_for_target(pod_dependency_target) if is_app_extension
|
320
|
-
|
321
|
-
if requires_frameworks
|
322
|
-
product_ref = frameworks_group.files.find { |f| f.path == pod_dependency_target.product_name } ||
|
323
|
-
frameworks_group.new_product_ref_for_target(pod_dependency_target.product_basename, pod_dependency_target.product_type)
|
324
|
-
native_target.frameworks_build_phase.add_file_reference(product_ref, true)
|
325
|
-
end
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
def add_system_frameworks_to_native_target(file_accessor, native_target)
|
336
|
+
def add_system_frameworks_to_native_target(native_target, file_accessor)
|
330
337
|
file_accessor.spec_consumer.frameworks.each do |framework|
|
331
338
|
native_target.add_system_framework(framework)
|
332
339
|
end
|
333
340
|
end
|
334
341
|
|
335
|
-
def
|
336
|
-
|
337
|
-
|
338
|
-
|
342
|
+
def add_framework_file_reference_to_native_target(native_target, pod_target, dependent_target, frameworks_group)
|
343
|
+
if pod_target.should_build? && pod_target.requires_frameworks? && !pod_target.static_framework? && dependent_target.should_build?
|
344
|
+
product_ref = frameworks_group.files.find { |f| f.path == dependent_target.product_name } ||
|
345
|
+
frameworks_group.new_product_ref_for_target(dependent_target.product_basename, dependent_target.product_type)
|
346
|
+
native_target.frameworks_build_phase.add_file_reference(product_ref, true)
|
339
347
|
end
|
340
348
|
end
|
341
349
|
|
342
350
|
# Sets the APPLICATION_EXTENSION_API_ONLY build setting to YES for all
|
343
|
-
# configurations of the given target
|
351
|
+
# configurations of the given native target.
|
344
352
|
#
|
345
|
-
def
|
346
|
-
|
353
|
+
def configure_app_extension_api_only_to_native_target(native_target)
|
354
|
+
native_target.build_configurations.each do |config|
|
347
355
|
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
|
348
356
|
end
|
349
357
|
end
|
@@ -34,7 +34,7 @@ module Pod
|
|
34
34
|
def validate!
|
35
35
|
verify_no_duplicate_framework_and_library_names
|
36
36
|
verify_no_static_framework_transitive_dependencies
|
37
|
-
|
37
|
+
verify_swift_pods_swift_version
|
38
38
|
verify_swift_pods_have_module_dependencies
|
39
39
|
end
|
40
40
|
|
@@ -91,22 +91,28 @@ module Pod
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def
|
95
|
-
|
96
|
-
"
|
94
|
+
def verify_swift_pods_swift_version
|
95
|
+
error_message_for_target_definition = lambda do |target_definition|
|
96
|
+
"`#{target_definition.name}` (Swift #{target_definition.swift_version})"
|
97
97
|
end
|
98
98
|
swift_pod_targets = pod_targets.select(&:uses_swift?)
|
99
99
|
error_messages = swift_pod_targets.map do |pod_target|
|
100
100
|
next unless pod_target.spec_swift_version.nil?
|
101
101
|
swift_target_definitions = pod_target.target_definitions.reject { |target| target.swift_version.blank? }
|
102
|
-
next if swift_target_definitions.
|
103
|
-
|
104
|
-
|
102
|
+
next if swift_target_definitions.uniq(&:swift_version).count == 1
|
103
|
+
if swift_target_definitions.empty?
|
104
|
+
"- `#{pod_target.name}` does not specify a Swift version and none of the targets " \
|
105
|
+
"(#{pod_target.target_definitions.map { |td| "`#{td.name}`" }.to_sentence}) integrating it have the " \
|
106
|
+
'`SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at ' \
|
107
|
+
'least one of the targets that integrate this pod.'
|
108
|
+
else
|
109
|
+
target_errors = swift_target_definitions.map(&error_message_for_target_definition).to_sentence
|
110
|
+
"- `#{pod_target.name}` is integrated by multiple targets that use a different Swift version: #{target_errors}."
|
111
|
+
end
|
105
112
|
end.compact
|
106
113
|
|
107
114
|
unless error_messages.empty?
|
108
|
-
raise Informative,
|
109
|
-
"that do not have the same Swift version:\n\n#{error_messages.join("\n")}"
|
115
|
+
raise Informative, "Unable to determine Swift version for the following pods:\n\n#{error_messages.join("\n")}"
|
110
116
|
end
|
111
117
|
end
|
112
118
|
|