cocoapods 1.1.0.rc.2 → 1.1.0.rc.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 +65 -1
- data/lib/cocoapods/command/lib/lint.rb +4 -0
- data/lib/cocoapods/command/spec/lint.rb +4 -0
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/copy_resources_script.rb +2 -8
- data/lib/cocoapods/generator/header.rb +2 -1
- data/lib/cocoapods/generator/prefix_header.rb +0 -12
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +37 -14
- data/lib/cocoapods/installer.rb +6 -4
- data/lib/cocoapods/installer/analyzer.rb +36 -6
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +3 -9
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +1 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +3 -3
- data/lib/cocoapods/sandbox/headers_store.rb +4 -10
- data/lib/cocoapods/sandbox/path_list.rb +15 -4
- data/lib/cocoapods/target/aggregate_target.rb +1 -18
- data/lib/cocoapods/target/pod_target.rb +22 -5
- data/lib/cocoapods/validator.rb +13 -1
- metadata +14 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45edd0b5b0ad6bf88e868720fa0687caa2868670
|
4
|
+
data.tar.gz: 265395164853e3b9f4c665e54117a0452768eb0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a253db5e9296fbaf7b49ef3fcf451c899d476e122bf2ca6f2f178f0cd0f2b3e4ac6f344e21ebd19d602e713efaa705aa717844a939014ed0417b67dd59a385fa
|
7
|
+
data.tar.gz: e1188063833e80370ade4fac40d14a5aa1a31f15e815e4bf63277157d16cdb4b72006a84ab8d0dd91e2739068b78d28336ea57d62f55b567c67608b342f6760e
|
data/CHANGELOG.md
CHANGED
@@ -4,11 +4,71 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
|
|
4
4
|
|
5
5
|
To install release candidates run `[sudo] gem install cocoapods --pre`
|
6
6
|
|
7
|
+
## 1.1.0.rc.3 (2016-10-11)
|
8
|
+
|
9
|
+
##### Enhancements
|
10
|
+
|
11
|
+
* Cache result of inhibit_warnings and include_in_build_config to speed up pod install.
|
12
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
13
|
+
[#5934](https://github.com/CocoaPods/CocoaPods/pull/5934)
|
14
|
+
|
15
|
+
* Tell users about the .swift-version file on validation failures.
|
16
|
+
[Danielle Tomlinson](https://github.com/dantoml)
|
17
|
+
[#5951](https://github.com/CocoaPods/CocoaPods/pull/5951)
|
18
|
+
|
19
|
+
* Improve performance of PathList.read_file_system
|
20
|
+
[Heath Borders](https://github.com/hborders)
|
21
|
+
[#5890](https://github.com/CocoaPods/CocoaPods/issues/5890)
|
22
|
+
|
23
|
+
* Cache result of uses_swift and should_build to speed up pod install.
|
24
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
25
|
+
[#5837](https://github.com/CocoaPods/CocoaPods/pull/5837)
|
26
|
+
|
27
|
+
* Remove uses of `cd` in generated scripts
|
28
|
+
[Ben Asher](https://github.com/benasher44)
|
29
|
+
[#5959](https://github.com/CocoaPods/CocoaPods/pull/5959)
|
30
|
+
|
31
|
+
* Error with helpful message when integrating a pod into targets that have mismatched Swift versions.
|
32
|
+
[Ben Asher](https://github.com/benasher44)
|
33
|
+
[#5984](https://github.com/CocoaPods/CocoaPods/pull/5984)
|
34
|
+
|
35
|
+
* Allow users to share pods between Objective-C and Swift targets.
|
36
|
+
[Danielle Tomlinson](https://github.com/dantoml)
|
37
|
+
[#5984](https://github.com/CocoaPods/CocoaPods/pull/5984)
|
38
|
+
|
39
|
+
* Allow setting the linting Swift version via `--swift-version=VERSION`
|
40
|
+
[Danielle Tomlinson](https://github.com/dantoml)
|
41
|
+
[#5989](https://github.com/CocoaPods/CocoaPods/pull/5989)
|
42
|
+
|
43
|
+
* Greenify pod install success message
|
44
|
+
[Stephen Hayes](https://github.com/schayes04)
|
45
|
+
[#5713](https://github.com/CocoaPods/CocoaPods/issues/5713)
|
46
|
+
|
47
|
+
* Update EMBEDDED_CONTENT_CONTAINS_SWIFT flag behaviour based on xcode version.
|
48
|
+
[codymoorhouse](https://github.com/codymoorhouse)
|
49
|
+
[#5732](https://github.com/CocoaPods/CocoaPods/issues/5732)
|
50
|
+
|
51
|
+
##### Bug Fixes
|
52
|
+
|
53
|
+
* Remove special handling for messages apps
|
54
|
+
[Ben Asher](https://github.com/benasher44)
|
55
|
+
[#5860](https://github.com/CocoaPods/CocoaPods/issues/5860)
|
56
|
+
|
57
|
+
* Ensure messages apps have an embed frameworks build phase
|
58
|
+
[Ben Asher](https://github.com/benasher44)
|
59
|
+
[#5860](https://github.com/CocoaPods/CocoaPods/issues/5860)
|
60
|
+
|
61
|
+
* Fix linting of private pods when using libraries.
|
62
|
+
[Stefan Pühringer](https://github.com/b-ray)
|
63
|
+
[#5891](https://github.com/CocoaPods/CocoaPods/issues/5891)
|
64
|
+
|
65
|
+
|
7
66
|
## 1.1.0.rc.2 (2016-09-13)
|
8
67
|
|
9
68
|
##### Enhancements
|
10
69
|
|
11
|
-
* Use the SWIFT_VERSION when linting pods.
|
70
|
+
* Use the SWIFT_VERSION when linting pods. To lint with Swift 3.0
|
71
|
+
add a Swift Version file. `echo "3.0" >> .swift-version`.
|
12
72
|
[Danielle Tomlinson](https://github.com/dantoml)
|
13
73
|
[#5841](https://github.com/CocoaPods/CocoaPods/pull/5841)
|
14
74
|
|
@@ -27,6 +87,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
27
87
|
|
28
88
|
##### Bug Fixes
|
29
89
|
|
90
|
+
* Wrap generated import headers with __OBJC__ to fix C only pods.
|
91
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
|
92
|
+
[#5291](https://github.com/CocoaPods/CocoaPods/issues/5291)
|
93
|
+
|
30
94
|
* Prevent crash when generating acknowledgements when license type is not specified.
|
31
95
|
[Marcelo Fabri](https://github.com/marcelofabri)
|
32
96
|
[#5826](https://github.com/CocoaPods/CocoaPods/issues/5826)
|
@@ -21,6 +21,8 @@ module Pod
|
|
21
21
|
'(defaults to https://github.com/CocoaPods/Specs.git). ' \
|
22
22
|
'Multiple sources must be comma-delimited.'],
|
23
23
|
['--private', 'Lint skips checks that apply only to public specs'],
|
24
|
+
['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
|
25
|
+
'This takes precedence over a .swift-version file.'],
|
24
26
|
].concat(super)
|
25
27
|
end
|
26
28
|
|
@@ -34,6 +36,7 @@ module Pod
|
|
34
36
|
@use_frameworks = !argv.flag?('use-libraries')
|
35
37
|
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
36
38
|
@private = argv.flag?('private', false)
|
39
|
+
@swift_version = argv.option('swift-version', nil)
|
37
40
|
@podspecs_paths = argv.arguments!
|
38
41
|
super
|
39
42
|
end
|
@@ -55,6 +58,7 @@ module Pod
|
|
55
58
|
validator.only_subspec = @only_subspec
|
56
59
|
validator.use_frameworks = @use_frameworks
|
57
60
|
validator.ignore_public_only_results = @private
|
61
|
+
validator.swift_version = @swift_version
|
58
62
|
validator.validate
|
59
63
|
|
60
64
|
unless @clean
|
@@ -27,6 +27,8 @@ module Pod
|
|
27
27
|
'(defaults to https://github.com/CocoaPods/Specs.git). ' \
|
28
28
|
'Multiple sources must be comma-delimited.'],
|
29
29
|
['--private', 'Lint skips checks that apply only to public specs'],
|
30
|
+
['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
|
31
|
+
'This takes precedence over a .swift-version file.'],
|
30
32
|
].concat(super)
|
31
33
|
end
|
32
34
|
|
@@ -40,6 +42,7 @@ module Pod
|
|
40
42
|
@use_frameworks = !argv.flag?('use-libraries')
|
41
43
|
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
42
44
|
@private = argv.flag?('private', false)
|
45
|
+
@swift_version = argv.option('swift-version', nil)
|
43
46
|
@podspecs_paths = argv.arguments!
|
44
47
|
super
|
45
48
|
end
|
@@ -57,6 +60,7 @@ module Pod
|
|
57
60
|
validator.only_subspec = @only_subspec
|
58
61
|
validator.use_frameworks = @use_frameworks
|
59
62
|
validator.ignore_public_only_results = @private
|
63
|
+
validator.swift_version = @swift_version
|
60
64
|
validator.validate
|
61
65
|
failure_reasons << validator.failure_reason
|
62
66
|
|
@@ -119,12 +119,6 @@ case "${TARGETED_DEVICE_FAMILY}" in
|
|
119
119
|
;;
|
120
120
|
esac
|
121
121
|
|
122
|
-
realpath() {
|
123
|
-
DIRECTORY="$(cd "${1%/*}" && pwd)"
|
124
|
-
FILENAME="${1##*/}"
|
125
|
-
echo "$DIRECTORY/$FILENAME"
|
126
|
-
}
|
127
|
-
|
128
122
|
install_resource()
|
129
123
|
{
|
130
124
|
if [[ "$1" = /* ]] ; then
|
@@ -166,7 +160,7 @@ EOM
|
|
166
160
|
xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
|
167
161
|
;;
|
168
162
|
*.xcassets)
|
169
|
-
ABSOLUTE_XCASSET_FILE
|
163
|
+
ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
|
170
164
|
XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
|
171
165
|
;;
|
172
166
|
*)
|
@@ -195,7 +189,7 @@ then
|
|
195
189
|
# Find all other xcassets (this unfortunately includes those of path pods and other targets).
|
196
190
|
OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
|
197
191
|
while read line; do
|
198
|
-
if [[ $line != "
|
192
|
+
if [[ $line != "${PODS_ROOT}*" ]]; then
|
199
193
|
XCASSET_FILES+=("$line")
|
200
194
|
fi
|
201
195
|
done <<<"$OTHER_XCASSETS"
|
@@ -55,18 +55,6 @@ module Pod
|
|
55
55
|
|
56
56
|
result
|
57
57
|
end
|
58
|
-
|
59
|
-
protected
|
60
|
-
|
61
|
-
# Generates the contents of the header according to the platform.
|
62
|
-
#
|
63
|
-
# @return [String]
|
64
|
-
#
|
65
|
-
def generate_platform_import_header
|
66
|
-
result = "#ifdef __OBJC__\n"
|
67
|
-
result << super
|
68
|
-
result << "#endif\n"
|
69
|
-
end
|
70
58
|
end
|
71
59
|
end
|
72
60
|
end
|
@@ -60,20 +60,8 @@ module Pod
|
|
60
60
|
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) COCOAPODS=1',
|
61
61
|
'FRAMEWORK_SEARCH_PATHS' => '$(inherited) ',
|
62
62
|
'LIBRARY_SEARCH_PATHS' => '$(inherited) ',
|
63
|
-
}
|
64
|
-
|
65
|
-
# copies all of the embedded target's pod_targets its host
|
66
|
-
# target. Therefore, this check will properly require the Swift
|
67
|
-
# libs in the host target, if the embedded target has any pod targets
|
68
|
-
# that use Swift. Setting this for the embedded target would
|
69
|
-
# cause an App Store rejection because frameworks cannot be embedded
|
70
|
-
# in embedded targets.
|
71
|
-
if !target.requires_host_target? && pod_targets.any?(&:uses_swift?)
|
72
|
-
config['EMBEDDED_CONTENT_CONTAINS_SWIFT'] = 'YES'
|
73
|
-
config['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES'
|
74
|
-
else
|
75
|
-
config['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO'
|
76
|
-
end
|
63
|
+
}.merge(embedded_content_settings)
|
64
|
+
|
77
65
|
@xcconfig = Xcodeproj::Config.new(config)
|
78
66
|
|
79
67
|
@xcconfig.merge!(merged_user_target_xcconfigs)
|
@@ -100,6 +88,41 @@ module Pod
|
|
100
88
|
|
101
89
|
protected
|
102
90
|
|
91
|
+
def target_swift_version
|
92
|
+
settings = target.native_target.resolved_build_setting('SWIFT_VERSION') unless target.native_target.nil?
|
93
|
+
settings.values.compact.uniq.first unless settings.nil?
|
94
|
+
end
|
95
|
+
|
96
|
+
EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION = Gem::Version.new('2.3')
|
97
|
+
|
98
|
+
# @return [Hash<String, String>] the build settings necessary for Swift
|
99
|
+
# targets to be correctly embedded in their host.
|
100
|
+
#
|
101
|
+
def embedded_content_settings
|
102
|
+
# For embedded targets, which live in a host target, CocoaPods
|
103
|
+
# copies all of the embedded target's pod_targets its host
|
104
|
+
# target. Therefore, this check will properly require the Swift
|
105
|
+
# libs in the host target, if the embedded target has any pod targets
|
106
|
+
# that use Swift. Setting this for the embedded target would
|
107
|
+
# cause an App Store rejection because frameworks cannot be embedded
|
108
|
+
# in embedded targets.
|
109
|
+
|
110
|
+
swift_version = Gem::Version.new(target_swift_version)
|
111
|
+
should_embed = !target.requires_host_target? && pod_targets.any?(&:uses_swift?)
|
112
|
+
embed_value = should_embed ? 'YES' : 'NO'
|
113
|
+
|
114
|
+
config = {
|
115
|
+
'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' => embed_value,
|
116
|
+
'EMBEDDED_CONTENT_CONTAINS_SWIFT' => embed_value,
|
117
|
+
}
|
118
|
+
|
119
|
+
if swift_version >= EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION || !should_embed
|
120
|
+
config.delete('EMBEDDED_CONTENT_CONTAINS_SWIFT')
|
121
|
+
end
|
122
|
+
|
123
|
+
config
|
124
|
+
end
|
125
|
+
|
103
126
|
# @return [Hash<String, String>] the build settings necessary to import
|
104
127
|
# the pod targets.
|
105
128
|
#
|
data/lib/cocoapods/installer.rb
CHANGED
@@ -478,10 +478,12 @@ module Pod
|
|
478
478
|
def print_post_install_message
|
479
479
|
podfile_dependencies = podfile.dependencies.uniq.size
|
480
480
|
pods_installed = root_specs.size
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
481
|
+
title_options = { :verbose_prefix => '-> '.green }
|
482
|
+
UI.titled_section('Pod installation complete! ' \
|
483
|
+
"There #{podfile_dependencies == 1 ? 'is' : 'are'} #{podfile_dependencies} " \
|
484
|
+
"#{'dependency'.pluralize(podfile_dependencies)} from the Podfile " \
|
485
|
+
"and #{pods_installed} total #{'pod'.pluralize(pods_installed)} installed.".green,
|
486
|
+
title_options)
|
485
487
|
end
|
486
488
|
|
487
489
|
# Runs the registered callbacks for the plugins post install hooks.
|
@@ -281,11 +281,7 @@ module Pod
|
|
281
281
|
embedded_aggregate_targets.each do |target|
|
282
282
|
host_uuids = []
|
283
283
|
aggregate_target_user_projects.product(target.user_targets).each do |user_project, user_target|
|
284
|
-
|
285
|
-
host_targets.map(&:symbol_type).each do |product_type|
|
286
|
-
target.add_host_target_product_type(product_type)
|
287
|
-
end
|
288
|
-
host_uuids += host_targets.map(&:uuid)
|
284
|
+
host_uuids += user_project.host_targets_for_embedded_target(user_target).map(&:uuid)
|
289
285
|
end
|
290
286
|
# For each host, keep track of its embedded target definitions
|
291
287
|
# to later verify each embedded target's compatiblity with its host,
|
@@ -353,6 +349,7 @@ module Pod
|
|
353
349
|
#
|
354
350
|
def generate_targets
|
355
351
|
specs_by_target = result.specs_by_target.reject { |td, _| td.abstract? }
|
352
|
+
check_pod_target_swift_versions(specs_by_target)
|
356
353
|
pod_targets = generate_pod_targets(specs_by_target)
|
357
354
|
aggregate_targets = specs_by_target.keys.map do |target_definition|
|
358
355
|
generate_target(target_definition, pod_targets)
|
@@ -410,6 +407,39 @@ module Pod
|
|
410
407
|
target
|
411
408
|
end
|
412
409
|
|
410
|
+
# Verify that targets using a pod have the same swift version
|
411
|
+
#
|
412
|
+
# @param [Hash{Podfile::TargetDefinition => Array<Specification>}] specs_by_target
|
413
|
+
# the resolved specifications grouped by target.
|
414
|
+
#
|
415
|
+
# @note raises Informative if targets using a pod do not have
|
416
|
+
# the same swift version
|
417
|
+
#
|
418
|
+
def check_pod_target_swift_versions(specs_by_target)
|
419
|
+
targets_by_spec = {}
|
420
|
+
specs_by_target.each do |target, specs|
|
421
|
+
specs.each do |spec|
|
422
|
+
(targets_by_spec[spec] ||= []) << target
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
error_message_for_target = lambda do |target|
|
427
|
+
"#{target.name} (Swift #{target.swift_version})"
|
428
|
+
end
|
429
|
+
|
430
|
+
error_messages = targets_by_spec.map do |spec, targets|
|
431
|
+
swift_targets = targets.reject { |target| target.swift_version.blank? }
|
432
|
+
next if swift_targets.empty? || swift_targets.uniq(&:swift_version).count == 1
|
433
|
+
target_errors = swift_targets.map(&error_message_for_target).join(', ')
|
434
|
+
"- #{spec.name} required by #{target_errors}"
|
435
|
+
end.compact
|
436
|
+
|
437
|
+
unless error_messages.empty?
|
438
|
+
raise Informative, 'The following pods are integrated into targets ' \
|
439
|
+
"that do not have the same Swift version:\n\n#{error_messages.join("\n")}"
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
413
443
|
# Setup the pod targets for an aggregate target. Deduplicates resulting
|
414
444
|
# targets by grouping by platform and subspec by their root
|
415
445
|
# to create a {PodTarget} for each spec.
|
@@ -424,7 +454,7 @@ module Pod
|
|
424
454
|
distinct_targets = specs_by_target.each_with_object({}) do |dependency, hash|
|
425
455
|
target_definition, dependent_specs = *dependency
|
426
456
|
dependent_specs.group_by(&:root).each do |root_spec, specs|
|
427
|
-
pod_variant = PodVariant.new(specs, target_definition.platform, target_definition.uses_frameworks
|
457
|
+
pod_variant = PodVariant.new(specs, target_definition.platform, target_definition.uses_frameworks?)
|
428
458
|
hash[root_spec] ||= {}
|
429
459
|
(hash[root_spec][pod_variant] ||= []) << target_definition
|
430
460
|
end
|
@@ -16,10 +16,6 @@ module Pod
|
|
16
16
|
attr_accessor :requires_frameworks
|
17
17
|
alias_method :requires_frameworks?, :requires_frameworks
|
18
18
|
|
19
|
-
# @return [String] the Swift version
|
20
|
-
#
|
21
|
-
attr_accessor :swift_version
|
22
|
-
|
23
19
|
# @return [Specification] the root specification
|
24
20
|
#
|
25
21
|
def root_spec
|
@@ -32,11 +28,10 @@ module Pod
|
|
32
28
|
# @param [Platform] platform @see #platform
|
33
29
|
# @param [Bool] requires_frameworks @see #requires_frameworks?
|
34
30
|
#
|
35
|
-
def initialize(specs, platform, requires_frameworks = false
|
31
|
+
def initialize(specs, platform, requires_frameworks = false)
|
36
32
|
self.specs = specs
|
37
33
|
self.platform = platform
|
38
34
|
self.requires_frameworks = requires_frameworks
|
39
|
-
self.swift_version = swift_version
|
40
35
|
end
|
41
36
|
|
42
37
|
# @return [Bool] whether the {PodVariant} is equal to another taking all
|
@@ -46,8 +41,7 @@ module Pod
|
|
46
41
|
self.class == other.class &&
|
47
42
|
specs == other.specs &&
|
48
43
|
platform == other.platform &&
|
49
|
-
requires_frameworks == other.requires_frameworks
|
50
|
-
swift_version == other.swift_version
|
44
|
+
requires_frameworks == other.requires_frameworks
|
51
45
|
end
|
52
46
|
alias_method :eql?, :==
|
53
47
|
|
@@ -57,7 +51,7 @@ module Pod
|
|
57
51
|
#
|
58
52
|
# @!visibility private
|
59
53
|
def hash
|
60
|
-
[specs, platform, requires_frameworks
|
54
|
+
[specs, platform, requires_frameworks].hash
|
61
55
|
end
|
62
56
|
end
|
63
57
|
end
|
@@ -25,7 +25,7 @@ module Pod
|
|
25
25
|
# For messages extensions, this only applies if it's embedded in a messages
|
26
26
|
# application.
|
27
27
|
#
|
28
|
-
EMBED_FRAMEWORK_TARGET_TYPES = [:application, :unit_test_bundle, :ui_test_bundle, :watch2_extension, :
|
28
|
+
EMBED_FRAMEWORK_TARGET_TYPES = [:application, :unit_test_bundle, :ui_test_bundle, :watch2_extension, :messages_application].freeze
|
29
29
|
|
30
30
|
# @return [String] the name of the embed frameworks phase
|
31
31
|
#
|
@@ -241,9 +241,9 @@ module Pod
|
|
241
241
|
|
242
242
|
build_phase = native_target.new_shell_script_build_phase('Create Symlinks to Header Folders')
|
243
243
|
build_phase.shell_script = <<-eos.strip_heredoc
|
244
|
-
|
245
|
-
ln -fs ${PUBLIC_HEADERS_FOLDER_PATH\#$WRAPPER_NAME/} ${PUBLIC_HEADERS_FOLDER_PATH\#\$CONTENTS_FOLDER_PATH/}
|
246
|
-
ln -fs ${PRIVATE_HEADERS_FOLDER_PATH\#\$WRAPPER_NAME/} ${PRIVATE_HEADERS_FOLDER_PATH\#\$CONTENTS_FOLDER_PATH/}
|
244
|
+
base="$CONFIGURATION_BUILD_DIR/$WRAPPER_NAME"
|
245
|
+
ln -fs $base/${PUBLIC_HEADERS_FOLDER_PATH\#$WRAPPER_NAME/} $base/${PUBLIC_HEADERS_FOLDER_PATH\#\$CONTENTS_FOLDER_PATH/}
|
246
|
+
ln -fs $base/${PRIVATE_HEADERS_FOLDER_PATH\#\$WRAPPER_NAME/} $base/${PRIVATE_HEADERS_FOLDER_PATH\#\$CONTENTS_FOLDER_PATH/}
|
247
247
|
eos
|
248
248
|
end
|
249
249
|
|
@@ -72,11 +72,11 @@ module Pod
|
|
72
72
|
#
|
73
73
|
def add_files(namespace, relative_header_paths)
|
74
74
|
relative_header_paths.map do |relative_header_path|
|
75
|
-
add_file(namespace, relative_header_path
|
75
|
+
add_file(namespace, relative_header_path)
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
# Adds a header to the directory
|
79
|
+
# Adds a header to the directory.
|
80
80
|
#
|
81
81
|
# @param [Pathname] namespace
|
82
82
|
# the path where the header file should be stored relative to the
|
@@ -86,23 +86,17 @@ module Pod
|
|
86
86
|
# the path of the header file relative to the Pods project
|
87
87
|
# (`PODS_ROOT` variable of the xcconfigs).
|
88
88
|
#
|
89
|
-
# @param [String] final_name
|
90
|
-
# the name under which the file should be available in the
|
91
|
-
# headers directory.
|
92
|
-
#
|
93
89
|
# @note This method does _not_ add the file to the search paths.
|
94
90
|
#
|
95
91
|
# @return [Pathname]
|
96
92
|
#
|
97
|
-
def add_file(namespace, relative_header_path
|
93
|
+
def add_file(namespace, relative_header_path)
|
98
94
|
namespaced_path = root + namespace
|
99
95
|
namespaced_path.mkpath unless File.exist?(namespaced_path)
|
100
96
|
|
101
97
|
absolute_source = (sandbox.root + relative_header_path)
|
102
98
|
source = absolute_source.relative_path_from(namespaced_path)
|
103
|
-
|
104
|
-
FileUtils.ln_sf(source, final_name)
|
105
|
-
end
|
99
|
+
FileUtils.ln_sf(source, namespaced_path)
|
106
100
|
namespaced_path + relative_header_path.basename
|
107
101
|
end
|
108
102
|
|
@@ -51,11 +51,22 @@ module Pod
|
|
51
51
|
raise Informative, "Attempt to read non existent folder `#{root}`."
|
52
52
|
end
|
53
53
|
escaped_root = escape_path_for_glob(root)
|
54
|
-
|
54
|
+
|
55
|
+
absolute_paths = Pathname.glob(escaped_root + '**/*', File::FNM_DOTMATCH).lazy
|
55
56
|
dirs_and_files = absolute_paths.reject { |path| path.basename.to_s =~ /^\.\.?$/ }
|
56
|
-
|
57
|
-
|
58
|
-
|
57
|
+
dirs, files = dirs_and_files.partition { |path| File.directory?(path) }
|
58
|
+
|
59
|
+
root_length = root.cleanpath.to_s.length + File::SEPARATOR.length
|
60
|
+
sorted_relative_paths_from_full_paths = lambda do |paths|
|
61
|
+
relative_paths = paths.lazy.map do |path|
|
62
|
+
path_string = path.to_s
|
63
|
+
path_string.slice(root_length, path_string.length - root_length)
|
64
|
+
end
|
65
|
+
relative_paths.sort_by(&:upcase)
|
66
|
+
end
|
67
|
+
|
68
|
+
@dirs = sorted_relative_paths_from_full_paths.call(dirs)
|
69
|
+
@files = sorted_relative_paths_from_full_paths.call(files)
|
59
70
|
@glob_cache = {}
|
60
71
|
end
|
61
72
|
|
@@ -9,8 +9,6 @@ module Pod
|
|
9
9
|
|
10
10
|
# Product types where the product's frameworks must be embedded in a host target
|
11
11
|
#
|
12
|
-
# @note :messages_extension only applies when it is embedded in an app (as opposed to a messages app)
|
13
|
-
#
|
14
12
|
EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES = [:app_extension, :framework, :messages_extension, :watch_extension].freeze
|
15
13
|
|
16
14
|
# Initialize a new instance
|
@@ -27,21 +25,6 @@ module Pod
|
|
27
25
|
@search_paths_aggregate_targets = []
|
28
26
|
@file_accessors = []
|
29
27
|
@xcconfigs = {}
|
30
|
-
@host_target_types = Set.new # Product types of the host target, if this target is embedded
|
31
|
-
end
|
32
|
-
|
33
|
-
# Adds product type to the list of product types for the host
|
34
|
-
# targets, in which this target will be embedded
|
35
|
-
#
|
36
|
-
# @param [Symbol] product_type Product type (symbol representation)
|
37
|
-
# of a host, in which this target will be embedded
|
38
|
-
#
|
39
|
-
# @note This is important for messages extensions, since a messages
|
40
|
-
# extension has its frameworks embedded in its host when
|
41
|
-
# its host is an app but not when it's a messages app
|
42
|
-
#
|
43
|
-
def add_host_target_product_type(product_type)
|
44
|
-
@host_target_types << product_type
|
45
28
|
end
|
46
29
|
|
47
30
|
# @return [Boolean] True if the user_target's pods are
|
@@ -57,7 +40,7 @@ module Pod
|
|
57
40
|
return false if user_project.nil?
|
58
41
|
symbol_types = user_targets.map(&:symbol_type).uniq
|
59
42
|
raise ArgumentError, "Expected single kind of user_target for #{name}. Found #{symbol_types.join(', ')}." unless symbol_types.count == 1
|
60
|
-
EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES.include?(symbol_types[0])
|
43
|
+
EMBED_FRAMEWORKS_IN_HOST_TARGET_TYPES.include?(symbol_types[0])
|
61
44
|
end
|
62
45
|
|
63
46
|
# @return [String] the label for the target.
|
@@ -47,6 +47,7 @@ module Pod
|
|
47
47
|
@file_accessors = []
|
48
48
|
@resource_bundle_targets = []
|
49
49
|
@dependent_targets = []
|
50
|
+
@build_config_cache = {}
|
50
51
|
end
|
51
52
|
|
52
53
|
# @param [Hash{Array => PodTarget}] cache
|
@@ -141,9 +142,12 @@ module Pod
|
|
141
142
|
# A target should not be build if it has no source files.
|
142
143
|
#
|
143
144
|
def should_build?
|
144
|
-
|
145
|
-
|
146
|
-
|
145
|
+
return @should_build if defined? @should_build
|
146
|
+
@should_build = begin
|
147
|
+
source_files = file_accessors.flat_map(&:source_files)
|
148
|
+
source_files -= file_accessors.flat_map(&:headers)
|
149
|
+
!source_files.empty?
|
150
|
+
end
|
147
151
|
end
|
148
152
|
|
149
153
|
# @return [Array<Specification::Consumer>] the specification consumers for
|
@@ -156,8 +160,11 @@ module Pod
|
|
156
160
|
# @return [Boolean] Whether the target uses Swift code
|
157
161
|
#
|
158
162
|
def uses_swift?
|
159
|
-
|
160
|
-
|
163
|
+
return @uses_swift if defined? @uses_swift
|
164
|
+
@uses_swift = begin
|
165
|
+
file_accessors.any? do |file_accessor|
|
166
|
+
file_accessor.source_files.any? { |sf| sf.extname == '.swift' }
|
167
|
+
end
|
161
168
|
end
|
162
169
|
end
|
163
170
|
|
@@ -216,13 +223,20 @@ module Pod
|
|
216
223
|
# The name of the build configuration.
|
217
224
|
#
|
218
225
|
def include_in_build_config?(target_definition, configuration_name)
|
226
|
+
key = [target_definition.label, configuration_name]
|
227
|
+
if @build_config_cache.key?(key)
|
228
|
+
return @build_config_cache[key]
|
229
|
+
end
|
230
|
+
|
219
231
|
whitelists = target_definition_dependencies(target_definition).map do |dependency|
|
220
232
|
target_definition.pod_whitelisted_for_configuration?(dependency.name, configuration_name)
|
221
233
|
end.uniq
|
222
234
|
|
223
235
|
if whitelists.empty?
|
236
|
+
@build_config_cache[key] = true
|
224
237
|
return true
|
225
238
|
elsif whitelists.count == 1
|
239
|
+
@build_config_cache[key] = whitelists.first
|
226
240
|
whitelists.first
|
227
241
|
else
|
228
242
|
raise Informative, "The subspecs of `#{pod_name}` are linked to " \
|
@@ -237,13 +251,16 @@ module Pod
|
|
237
251
|
# @return [Bool]
|
238
252
|
#
|
239
253
|
def inhibit_warnings?
|
254
|
+
return @inhibit_warnings if defined? @inhibit_warnings
|
240
255
|
whitelists = target_definitions.map do |target_definition|
|
241
256
|
target_definition.inhibits_warnings_for_pod?(root_spec.name)
|
242
257
|
end.uniq
|
243
258
|
|
244
259
|
if whitelists.empty?
|
260
|
+
@inhibit_warnings = false
|
245
261
|
return false
|
246
262
|
elsif whitelists.count == 1
|
263
|
+
@inhibit_warnings = whitelists.first
|
247
264
|
whitelists.first
|
248
265
|
else
|
249
266
|
UI.warn "The pod `#{pod_name}` is linked to different targets " \
|
data/lib/cocoapods/validator.rb
CHANGED
@@ -142,7 +142,15 @@ module Pod
|
|
142
142
|
reasons << 'all results apply only to public specs, but you can use ' \
|
143
143
|
'`--private` to ignore them if linting the specification for a private pod'
|
144
144
|
end
|
145
|
-
|
145
|
+
if dot_swift_version.nil?
|
146
|
+
reasons.to_sentence + ".\n[!] The validator for Swift projects uses " \
|
147
|
+
'Swift 2.3 by default, if you are using a different version of ' \
|
148
|
+
'swift you can use a `.swift-version` file to set the version for ' \
|
149
|
+
"your Pod. For example to use Swift 3.0, run: \n" \
|
150
|
+
' `echo "3.0" > .swift-version`'
|
151
|
+
else
|
152
|
+
reasons.to_sentence
|
153
|
+
end
|
146
154
|
end
|
147
155
|
|
148
156
|
#-------------------------------------------------------------------------#
|
@@ -243,6 +251,10 @@ module Pod
|
|
243
251
|
@swift_version ||= dot_swift_version || '2.3'
|
244
252
|
end
|
245
253
|
|
254
|
+
# Set the SWIFT_VERSION that should be used to validate the pod.
|
255
|
+
#
|
256
|
+
attr_writer :swift_version
|
257
|
+
|
246
258
|
# @return [String] the SWIFT_VERSION in the .swift-version file or nil.
|
247
259
|
#
|
248
260
|
def dot_swift_version
|
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.1.0.rc.
|
4
|
+
version: 1.1.0.rc.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: 2016-
|
14
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: cocoapods-core
|
@@ -19,21 +19,21 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - '='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.1.0.rc.
|
22
|
+
version: 1.1.0.rc.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.1.0.rc.
|
29
|
+
version: 1.1.0.rc.3
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: claide
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 1.0.
|
36
|
+
version: 1.0.1
|
37
37
|
- - "<"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '2.0'
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.0.
|
46
|
+
version: 1.0.1
|
47
47
|
- - "<"
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '2.0'
|
@@ -151,22 +151,16 @@ dependencies:
|
|
151
151
|
name: cocoapods-trunk
|
152
152
|
requirement: !ruby/object:Gem::Requirement
|
153
153
|
requirements:
|
154
|
-
- -
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: 1.0.0
|
157
|
-
- - "<"
|
154
|
+
- - '='
|
158
155
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
156
|
+
version: 1.1.0.beta.1
|
160
157
|
type: :runtime
|
161
158
|
prerelease: false
|
162
159
|
version_requirements: !ruby/object:Gem::Requirement
|
163
160
|
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: 1.0.0
|
167
|
-
- - "<"
|
161
|
+
- - '='
|
168
162
|
- !ruby/object:Gem::Version
|
169
|
-
version:
|
163
|
+
version: 1.1.0.beta.1
|
170
164
|
- !ruby/object:Gem::Dependency
|
171
165
|
name: cocoapods-try
|
172
166
|
requirement: !ruby/object:Gem::Requirement
|
@@ -207,7 +201,7 @@ dependencies:
|
|
207
201
|
requirements:
|
208
202
|
- - ">="
|
209
203
|
- !ruby/object:Gem::Version
|
210
|
-
version: 1.3.
|
204
|
+
version: 1.3.2
|
211
205
|
- - "<"
|
212
206
|
- !ruby/object:Gem::Version
|
213
207
|
version: '2.0'
|
@@ -217,7 +211,7 @@ dependencies:
|
|
217
211
|
requirements:
|
218
212
|
- - ">="
|
219
213
|
- !ruby/object:Gem::Version
|
220
|
-
version: 1.3.
|
214
|
+
version: 1.3.2
|
221
215
|
- - "<"
|
222
216
|
- !ruby/object:Gem::Version
|
223
217
|
version: '2.0'
|
@@ -275,14 +269,14 @@ dependencies:
|
|
275
269
|
requirements:
|
276
270
|
- - "~>"
|
277
271
|
- !ruby/object:Gem::Version
|
278
|
-
version:
|
272
|
+
version: '2.0'
|
279
273
|
type: :runtime
|
280
274
|
prerelease: false
|
281
275
|
version_requirements: !ruby/object:Gem::Requirement
|
282
276
|
requirements:
|
283
277
|
- - "~>"
|
284
278
|
- !ruby/object:Gem::Version
|
285
|
-
version:
|
279
|
+
version: '2.0'
|
286
280
|
- !ruby/object:Gem::Dependency
|
287
281
|
name: gh_inspector
|
288
282
|
requirement: !ruby/object:Gem::Requirement
|