cocoapods 1.1.0.rc.2 → 1.1.0.rc.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|