cocoapods 1.3.0.beta.2 → 1.3.0.beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -0
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +8 -4
- data/lib/cocoapods/generator/embed_frameworks_script.rb +9 -5
- data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +2 -2
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +6 -3
- data/lib/cocoapods/installer.rb +8 -0
- data/lib/cocoapods/installer/pods_project_integrator/pod_target_integrator.rb +85 -0
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +124 -54
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +40 -8
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +5 -5
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +25 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +73 -17
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +39 -5
- data/lib/cocoapods/installer/xcode/target_validator.rb +1 -1
- data/lib/cocoapods/project.rb +21 -7
- data/lib/cocoapods/sandbox.rb +2 -3
- data/lib/cocoapods/target/aggregate_target.rb +7 -37
- data/lib/cocoapods/target/pod_target.rb +87 -1
- metadata +7 -6
@@ -47,7 +47,7 @@ module Pod
|
|
47
47
|
file_accessors = pod_targets.flat_map(&:file_accessors)
|
48
48
|
|
49
49
|
frameworks = file_accessors.flat_map(&:vendored_frameworks).uniq.map(&:basename)
|
50
|
-
frameworks += pod_targets.select { |pt| pt.should_build? && pt.requires_frameworks? }.map(&:product_module_name)
|
50
|
+
frameworks += pod_targets.select { |pt| pt.should_build? && pt.requires_frameworks? }.map(&:product_module_name).uniq
|
51
51
|
verify_no_duplicate_names(frameworks, aggregate_target.label, 'frameworks')
|
52
52
|
|
53
53
|
libraries = file_accessors.flat_map(&:vendored_libraries).uniq.map(&:basename)
|
data/lib/cocoapods/project.rb
CHANGED
@@ -177,12 +177,15 @@ module Pod
|
|
177
177
|
# If yes, where needed, intermediate groups are created, similar to
|
178
178
|
# how mkdir -p operates.
|
179
179
|
#
|
180
|
+
# @param [Pathname] base_path
|
181
|
+
# The base path for newly created groups when reflect_file_system_structure is true.
|
182
|
+
# If nil, the provided group's real_path is used.
|
183
|
+
#
|
180
184
|
# @return [PBXFileReference] The new file reference.
|
181
185
|
#
|
182
|
-
def add_file_reference(absolute_path, group, reflect_file_system_structure = false)
|
186
|
+
def add_file_reference(absolute_path, group, reflect_file_system_structure = false, base_path = nil)
|
183
187
|
file_path_name = absolute_path.is_a?(Pathname) ? absolute_path : Pathname.new(absolute_path)
|
184
|
-
group = group_for_path_in_group(file_path_name, group, reflect_file_system_structure)
|
185
|
-
|
188
|
+
group = group_for_path_in_group(file_path_name, group, reflect_file_system_structure, base_path)
|
186
189
|
if ref = reference_for_path(file_path_name.realpath)
|
187
190
|
@refs_by_absolute_path[absolute_path.to_s] = ref
|
188
191
|
ref
|
@@ -305,24 +308,35 @@ module Pod
|
|
305
308
|
# If yes, where needed, intermediate groups are created, similar to
|
306
309
|
# how mkdir -p operates.
|
307
310
|
#
|
311
|
+
# @param [Pathname] base_path
|
312
|
+
# The base path for the newly created group. If nil, the provided group's real_path is used.
|
313
|
+
#
|
308
314
|
# @return [PBXGroup] The appropriate group for the filepath.
|
309
315
|
# Can be PBXVariantGroup, if the file is localized.
|
310
316
|
#
|
311
|
-
def group_for_path_in_group(absolute_pathname, group, reflect_file_system_structure)
|
317
|
+
def group_for_path_in_group(absolute_pathname, group, reflect_file_system_structure, base_path = nil)
|
312
318
|
unless absolute_pathname.absolute?
|
313
319
|
raise ArgumentError, "Paths must be absolute #{absolute_pathname}"
|
314
320
|
end
|
321
|
+
unless base_path.nil? || base_path.absolute?
|
322
|
+
raise ArgumentError, "Paths must be absolute #{base_path}"
|
323
|
+
end
|
315
324
|
|
316
|
-
|
325
|
+
relative_base = base_path.nil? ? group.real_path : base_path.realdirpath
|
326
|
+
relative_pathname = absolute_pathname.relative_path_from(relative_base)
|
317
327
|
relative_dir = relative_pathname.dirname
|
318
328
|
lproj_regex = /\.lproj/i
|
319
329
|
|
320
330
|
# Add subgroups for directories, but treat .lproj as a file
|
321
331
|
if reflect_file_system_structure
|
322
|
-
|
332
|
+
path = relative_base
|
333
|
+
relative_dir.each_filename do |name|
|
323
334
|
break if name.to_s =~ lproj_regex
|
324
335
|
next if name == '.'
|
325
|
-
|
336
|
+
# Make sure groups have the correct absolute path set, as intermittent
|
337
|
+
# directories may not be included in the group structure
|
338
|
+
path += name
|
339
|
+
group = group[name] || group.new_group(name, path)
|
326
340
|
end
|
327
341
|
end
|
328
342
|
|
data/lib/cocoapods/sandbox.rb
CHANGED
@@ -89,8 +89,8 @@ module Pod
|
|
89
89
|
path = pod_dir(name)
|
90
90
|
path.rmtree if path.exist?
|
91
91
|
end
|
92
|
-
|
93
|
-
|
92
|
+
podspec_path = specification_path(name)
|
93
|
+
podspec_path.rmtree if podspec_path
|
94
94
|
end
|
95
95
|
|
96
96
|
# Prepares the sandbox for a new installation removing any file that will
|
@@ -98,7 +98,6 @@ module Pod
|
|
98
98
|
#
|
99
99
|
def prepare
|
100
100
|
FileUtils.rm_rf(headers_root)
|
101
|
-
FileUtils.rm_rf(target_support_files_root)
|
102
101
|
|
103
102
|
FileUtils.mkdir_p(headers_root)
|
104
103
|
FileUtils.mkdir_p(sources_root)
|
@@ -184,7 +184,7 @@ module Pod
|
|
184
184
|
pod_targets.any?(&:uses_swift?)
|
185
185
|
end
|
186
186
|
|
187
|
-
# @return [Hash{String => Array<Hash{Symbol => [String]}>] The vendored dynamic artifacts and framework target
|
187
|
+
# @return [Hash{String => Array<Hash{Symbol => [String]}>}] The vendored dynamic artifacts and framework target
|
188
188
|
# input and output paths grouped by config
|
189
189
|
#
|
190
190
|
def framework_paths_by_config
|
@@ -193,51 +193,21 @@ module Pod
|
|
193
193
|
relevant_pod_targets = pod_targets.select do |pod_target|
|
194
194
|
pod_target.include_in_build_config?(target_definition, config)
|
195
195
|
end
|
196
|
-
framework_paths_by_config[config] = relevant_pod_targets.flat_map
|
197
|
-
frameworks = []
|
198
|
-
pod_target.file_accessors.flat_map(&:vendored_dynamic_artifacts).map do |framework_path|
|
199
|
-
relative_path_to_sandbox = framework_path.relative_path_from(sandbox.root)
|
200
|
-
framework = { :name => framework_path.basename.to_s,
|
201
|
-
:input_path => "${PODS_ROOT}/#{relative_path_to_sandbox}",
|
202
|
-
:output_path => "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{framework_path.basename}" }
|
203
|
-
# Until this can be configured, assume the dSYM file uses the file name as the framework.
|
204
|
-
# See https://github.com/CocoaPods/CocoaPods/issues/1698
|
205
|
-
dsym_name = "#{framework_path.basename}.dSYM"
|
206
|
-
dsym_path = Pathname.new("#{framework_path.dirname}/#{dsym_name}")
|
207
|
-
if dsym_path.exist?
|
208
|
-
framework[:dsym_name] = dsym_name
|
209
|
-
framework[:dsym_input_path] = "${PODS_ROOT}/#{relative_path_to_sandbox}.dSYM"
|
210
|
-
framework[:dsym_output_path] = "${DWARF_DSYM_FOLDER_PATH}/#{dsym_name}"
|
211
|
-
end
|
212
|
-
frameworks << framework
|
213
|
-
end
|
214
|
-
if pod_target.should_build? && pod_target.requires_frameworks?
|
215
|
-
frameworks << { :name => pod_target.product_name,
|
216
|
-
:input_path => pod_target.build_product_path('${BUILT_PRODUCTS_DIR}'),
|
217
|
-
:output_path => "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{pod_target.product_name}" }
|
218
|
-
end
|
219
|
-
frameworks
|
220
|
-
end
|
196
|
+
framework_paths_by_config[config] = relevant_pod_targets.flat_map(&:framework_paths)
|
221
197
|
end
|
222
198
|
framework_paths_by_config
|
223
199
|
end
|
224
200
|
|
225
|
-
# @return [Hash{
|
201
|
+
# @return [Hash{String => Array<String>}] Uniqued Resources grouped by config
|
226
202
|
#
|
227
203
|
def resource_paths_by_config
|
228
|
-
|
204
|
+
relevant_pod_targets = pod_targets.reject do |pod_target|
|
229
205
|
pod_target.should_build? && pod_target.requires_frameworks?
|
230
206
|
end
|
231
207
|
user_build_configurations.keys.each_with_object({}) do |config, resources_by_config|
|
232
|
-
resources_by_config[config] =
|
233
|
-
next [] unless
|
234
|
-
resource_paths
|
235
|
-
accessor.resources.flat_map { |res| "${PODS_ROOT}/#{res.relative_path_from(sandbox.project.path.dirname)}" }
|
236
|
-
end
|
237
|
-
resource_bundles = library_target.file_accessors.flat_map do |accessor|
|
238
|
-
accessor.resource_bundles.keys.map { |name| "#{library_target.configuration_build_dir}/#{name.shellescape}.bundle" }
|
239
|
-
end
|
240
|
-
(resource_paths + resource_bundles + [bridge_support_file].compact).uniq
|
208
|
+
resources_by_config[config] = relevant_pod_targets.flat_map do |pod_target|
|
209
|
+
next [] unless pod_target.include_in_build_config?(target_definition, config)
|
210
|
+
(pod_target.resource_paths + [bridge_support_file].compact).uniq
|
241
211
|
end
|
242
212
|
end
|
243
213
|
end
|
@@ -7,7 +7,7 @@ module Pod
|
|
7
7
|
#
|
8
8
|
attr_reader :specs
|
9
9
|
|
10
|
-
# @return [Array<
|
10
|
+
# @return [Array<TargetDefinition>] the target definitions of the Podfile
|
11
11
|
# that generated this target.
|
12
12
|
#
|
13
13
|
attr_reader :target_definitions
|
@@ -56,6 +56,7 @@ module Pod
|
|
56
56
|
@build_headers = Sandbox::HeadersStore.new(sandbox, 'Private')
|
57
57
|
@file_accessors = []
|
58
58
|
@resource_bundle_targets = []
|
59
|
+
@test_resource_bundle_targets = []
|
59
60
|
@test_native_targets = []
|
60
61
|
@dependent_targets = []
|
61
62
|
@test_dependent_targets = []
|
@@ -149,6 +150,10 @@ module Pod
|
|
149
150
|
# to this target.
|
150
151
|
attr_reader :resource_bundle_targets
|
151
152
|
|
153
|
+
# @return [Array<PBXNativeTarget>] the resource bundle test targets belonging
|
154
|
+
# to this target.
|
155
|
+
attr_reader :test_resource_bundle_targets
|
156
|
+
|
152
157
|
# @return [Bool] Whether or not this target should be build.
|
153
158
|
#
|
154
159
|
# A target should not be build if it has no source files.
|
@@ -192,6 +197,53 @@ module Pod
|
|
192
197
|
specs.select(&:test_specification?).map(&:test_type).uniq
|
193
198
|
end
|
194
199
|
|
200
|
+
# @return [Array<Hash{Symbol => [String]}>] The vendored and non vendored framework paths
|
201
|
+
# this target depends upon.
|
202
|
+
#
|
203
|
+
def framework_paths
|
204
|
+
@framework_paths ||= begin
|
205
|
+
frameworks = []
|
206
|
+
file_accessors.flat_map(&:vendored_dynamic_artifacts).map do |framework_path|
|
207
|
+
relative_path_to_sandbox = framework_path.relative_path_from(sandbox.root)
|
208
|
+
framework = { :name => framework_path.basename.to_s,
|
209
|
+
:input_path => "${PODS_ROOT}/#{relative_path_to_sandbox}",
|
210
|
+
:output_path => "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{framework_path.basename}" }
|
211
|
+
# Until this can be configured, assume the dSYM file uses the file name as the framework.
|
212
|
+
# See https://github.com/CocoaPods/CocoaPods/issues/1698
|
213
|
+
dsym_name = "#{framework_path.basename}.dSYM"
|
214
|
+
dsym_path = Pathname.new("#{framework_path.dirname}/#{dsym_name}")
|
215
|
+
if dsym_path.exist?
|
216
|
+
framework[:dsym_name] = dsym_name
|
217
|
+
framework[:dsym_input_path] = "${PODS_ROOT}/#{relative_path_to_sandbox}.dSYM"
|
218
|
+
framework[:dsym_output_path] = "${DWARF_DSYM_FOLDER_PATH}/#{dsym_name}"
|
219
|
+
end
|
220
|
+
frameworks << framework
|
221
|
+
end
|
222
|
+
if should_build? && requires_frameworks?
|
223
|
+
frameworks << { :name => product_name,
|
224
|
+
:input_path => build_product_path('${BUILT_PRODUCTS_DIR}'),
|
225
|
+
:output_path => "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{product_name}" }
|
226
|
+
end
|
227
|
+
frameworks
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
# @return [Array<String>] The resource and resource bundle paths this target depends upon.
|
232
|
+
#
|
233
|
+
def resource_paths
|
234
|
+
@resource_paths ||= begin
|
235
|
+
resource_paths = file_accessors.flat_map do |accessor|
|
236
|
+
accessor.resources.flat_map { |res| "${PODS_ROOT}/#{res.relative_path_from(sandbox.project.path.dirname)}" }
|
237
|
+
end
|
238
|
+
resource_bundles = file_accessors.flat_map do |accessor|
|
239
|
+
prefix = Generator::XCConfig::XCConfigHelper::CONFIGURATION_BUILD_DIR_VARIABLE
|
240
|
+
prefix = configuration_build_dir unless accessor.spec.test_specification?
|
241
|
+
accessor.resource_bundles.keys.map { |name| "#{prefix}/#{name.shellescape}.bundle" }
|
242
|
+
end
|
243
|
+
resource_paths + resource_bundles
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
195
247
|
# Returns the corresponding native target to use based on the provided specification.
|
196
248
|
# This is used to figure out whether to add a source file into the library native target or any of the
|
197
249
|
# test native targets.
|
@@ -226,6 +278,22 @@ module Pod
|
|
226
278
|
end
|
227
279
|
end
|
228
280
|
|
281
|
+
# Returns the corresponding test type given the product type.
|
282
|
+
#
|
283
|
+
# @param [Symbol] product_type
|
284
|
+
# The product type to map to a test type.
|
285
|
+
#
|
286
|
+
# @return [Symbol] The native product type to use.
|
287
|
+
#
|
288
|
+
def test_type_for_product_type(product_type)
|
289
|
+
case product_type
|
290
|
+
when :unit_test_bundle
|
291
|
+
:unit
|
292
|
+
else
|
293
|
+
raise Informative, "Unknown product type `#{product_type}`."
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
229
297
|
# @return [Specification] The root specification for the target.
|
230
298
|
#
|
231
299
|
def root_spec
|
@@ -256,6 +324,24 @@ module Pod
|
|
256
324
|
"#{label}-#{test_type.capitalize}-Tests"
|
257
325
|
end
|
258
326
|
|
327
|
+
# @param [Symbol] test_type
|
328
|
+
# The test type this embed frameworks script path is for.
|
329
|
+
#
|
330
|
+
# @return [Pathname] The absolute path of the copy resources script for the given test type.
|
331
|
+
#
|
332
|
+
def copy_resources_script_path_for_test_type(test_type)
|
333
|
+
support_files_dir + "#{test_target_label(test_type)}-resources.sh"
|
334
|
+
end
|
335
|
+
|
336
|
+
# @param [Symbol] test_type
|
337
|
+
# The test type this embed frameworks script path is for.
|
338
|
+
#
|
339
|
+
# @return [Pathname] The absolute path of the embed frameworks script for the given test type.
|
340
|
+
#
|
341
|
+
def embed_frameworks_script_path_for_test_type(test_type)
|
342
|
+
support_files_dir + "#{test_target_label(test_type)}-frameworks.sh"
|
343
|
+
end
|
344
|
+
|
259
345
|
# @return [Array<String>] The names of the Pods on which this target
|
260
346
|
# depends.
|
261
347
|
#
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.beta.
|
4
|
+
version: 1.3.0.beta.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eloy Duran
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-
|
14
|
+
date: 2017-07-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: cocoapods-core
|
@@ -19,14 +19,14 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.3.0.beta.
|
22
|
+
version: 1.3.0.beta.3
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.3.0.beta.
|
29
|
+
version: 1.3.0.beta.3
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: claide
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,7 +207,7 @@ dependencies:
|
|
207
207
|
requirements:
|
208
208
|
- - ">="
|
209
209
|
- !ruby/object:Gem::Version
|
210
|
-
version: 1.5.
|
210
|
+
version: 1.5.1
|
211
211
|
- - "<"
|
212
212
|
- !ruby/object:Gem::Version
|
213
213
|
version: '2.0'
|
@@ -217,7 +217,7 @@ dependencies:
|
|
217
217
|
requirements:
|
218
218
|
- - ">="
|
219
219
|
- !ruby/object:Gem::Version
|
220
|
-
version: 1.5.
|
220
|
+
version: 1.5.1
|
221
221
|
- - "<"
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '2.0'
|
@@ -471,6 +471,7 @@ files:
|
|
471
471
|
- lib/cocoapods/installer/pod_source_installer.rb
|
472
472
|
- lib/cocoapods/installer/pod_source_preparer.rb
|
473
473
|
- lib/cocoapods/installer/podfile_validator.rb
|
474
|
+
- lib/cocoapods/installer/pods_project_integrator/pod_target_integrator.rb
|
474
475
|
- lib/cocoapods/installer/post_install_hooks_context.rb
|
475
476
|
- lib/cocoapods/installer/pre_install_hooks_context.rb
|
476
477
|
- lib/cocoapods/installer/source_provider_hooks_context.rb
|