cocoapods 1.7.0.beta.2 → 1.7.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 +5 -5
- data/CHANGELOG.md +25 -1
- data/lib/cocoapods/command/lib/lint.rb +18 -11
- data/lib/cocoapods/command/update.rb +42 -43
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/installer.rb +5 -4
- data/lib/cocoapods/installer/podfile_validator.rb +1 -1
- data/lib/cocoapods/installer/project_cache/project_cache_analysis_result.rb +2 -2
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +2 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +2 -2
- data/lib/cocoapods/installer/user_project_integrator.rb +63 -30
- data/lib/cocoapods/installer/xcode/multi_pods_project_generator.rb +1 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +2 -2
- data/lib/cocoapods/project.rb +1 -1
- data/lib/cocoapods/validator.rb +26 -1
- data/lib/cocoapods/version_metadata.rb +4 -0
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1ee8d12451f183094a65d40b6e47d8748aa0fa4eea250c41d9c7a5f482f955b1
|
4
|
+
data.tar.gz: 53769ab0555e4c167f0157a9531d0218b920a005363ac53f838a6e0aba13f844
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b5533caea792d552f80b53b9003f1929e6ddb730ea85f53b46572fdc2077088df36ddf1d0e9673f7d8b9c647944ec04c025e2f4b3183930598230da1c8f0834
|
7
|
+
data.tar.gz: 4741c555db345c178def609f871abd490ed023dc88c9ee18e32fa7a6fbb01b4d73a1ffd89e94bf9e98917281d3641dcaa7ff1fc614fc61e99ca946b45d451316
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,25 @@ 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.7.0.beta.3 (2019-03-28)
|
8
|
+
|
9
|
+
##### Enhancements
|
10
|
+
|
11
|
+
* Adds support for referring to other podspecs during validation
|
12
|
+
[Orta Therox](https://github.com/orta)
|
13
|
+
[#8536](https://github.com/CocoaPods/CocoaPods/pull/8536)
|
14
|
+
|
15
|
+
##### Bug Fixes
|
16
|
+
|
17
|
+
* Deintegrate deleted targets even if `incremental_installation` is turned on.
|
18
|
+
[Dimitris Koutsogiorgas](https://github.com/dnkoutso) & [Doug Mead](https://github.com/dmead28)
|
19
|
+
[#8638](https://github.com/CocoaPods/CocoaPods/pull/8638)
|
20
|
+
|
21
|
+
* Reduce the probability of multiple project UUID collisions.
|
22
|
+
[Sebastian Shanus](https://github.com/sebastianv1)
|
23
|
+
[#8636](https://github.com/CocoaPods/CocoaPods/pull/8636)
|
24
|
+
|
25
|
+
|
7
26
|
## 1.7.0.beta.2 (2019-03-08)
|
8
27
|
|
9
28
|
##### Enhancements
|
@@ -42,6 +61,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
42
61
|
[tripleCC](https://github.com/tripleCC)
|
43
62
|
[#7958](https://github.com/CocoaPods/CocoaPods/issues/7958)
|
44
63
|
|
64
|
+
* Fix crash when running `pod update` with `--sources` and `--project-directory`
|
65
|
+
[tripleCC](https://github.com/tripleCC)
|
66
|
+
[#8565](https://github.com/CocoaPods/CocoaPods/issues/8565)
|
67
|
+
|
45
68
|
* Do not use spaces around variable assignment in generated embed framework script
|
46
69
|
[florianbuerger](https://github.com/florianbuerger)
|
47
70
|
[#8548](https://github.com/CocoaPods/CocoaPods/pull/8548)
|
@@ -49,6 +72,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
49
72
|
* Do not link specs into user targets that are only used by app specs.
|
50
73
|
[Samuel Giddins](https://github.com/segiddins)
|
51
74
|
|
75
|
+
|
52
76
|
## 1.7.0.beta.1 (2019-02-22)
|
53
77
|
|
54
78
|
##### Enhancements
|
@@ -57,7 +81,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
|
|
57
81
|
[dacaiguoguogmail](https://github.com/dacaiguoguogmail)
|
58
82
|
[#8461](https://github.com/CocoaPods/CocoaPods/issues/8461)
|
59
83
|
|
60
|
-
* Set the path of development pod groups to root directory of the Pod
|
84
|
+
* Set the path of development pod groups to root directory of the Pod
|
61
85
|
[Eric Amorde](https://github.com/amorde)
|
62
86
|
[#8445](https://github.com/CocoaPods/CocoaPods/pull/8445)
|
63
87
|
[#8503](https://github.com/CocoaPods/CocoaPods/pull/8503)
|
@@ -31,24 +31,29 @@ module Pod
|
|
31
31
|
['--private', 'Lint skips checks that apply only to public specs'],
|
32
32
|
['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
|
33
33
|
'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file.'],
|
34
|
+
['--include-podspecs=**/*.podspec', 'Additional ancillary podspecs which are used for linting via :path.'],
|
35
|
+
['--external-podspecs=**/*.podspec', 'Additional ancillary podspecs which are used for linting '\
|
36
|
+
'via :podspec. If there are --include-podspecs, then these are removed from them.'],
|
34
37
|
['--skip-import-validation', 'Lint skips validating that the pod can be imported'],
|
35
38
|
['--skip-tests', 'Lint skips building and running tests during validation'],
|
36
39
|
].concat(super)
|
37
40
|
end
|
38
41
|
|
39
42
|
def initialize(argv)
|
40
|
-
@quick
|
41
|
-
@allow_warnings
|
42
|
-
@clean
|
43
|
-
@fail_fast
|
44
|
-
@subspecs
|
45
|
-
@only_subspec
|
46
|
-
@use_frameworks
|
43
|
+
@quick = argv.flag?('quick')
|
44
|
+
@allow_warnings = argv.flag?('allow-warnings')
|
45
|
+
@clean = argv.flag?('clean', true)
|
46
|
+
@fail_fast = argv.flag?('fail-fast', false)
|
47
|
+
@subspecs = argv.flag?('subspecs', true)
|
48
|
+
@only_subspec = argv.option('subspec')
|
49
|
+
@use_frameworks = !argv.flag?('use-libraries')
|
47
50
|
@use_modular_headers = argv.flag?('use-modular-headers')
|
48
|
-
@source_urls
|
49
|
-
@platforms
|
50
|
-
@private
|
51
|
-
@swift_version
|
51
|
+
@source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
|
52
|
+
@platforms = argv.option('platforms', '').split(',')
|
53
|
+
@private = argv.flag?('private', false)
|
54
|
+
@swift_version = argv.option('swift-version', nil)
|
55
|
+
@include_podspecs = argv.option('include-podspecs', nil)
|
56
|
+
@external_podspecs = argv.option('external-podspecs', nil)
|
52
57
|
@skip_import_validation = argv.flag?('skip-import-validation', false)
|
53
58
|
@skip_tests = argv.flag?('skip-tests', false)
|
54
59
|
@podspecs_paths = argv.arguments!
|
@@ -76,6 +81,8 @@ module Pod
|
|
76
81
|
validator.swift_version = @swift_version
|
77
82
|
validator.skip_import_validation = @skip_import_validation
|
78
83
|
validator.skip_tests = @skip_tests
|
84
|
+
validator.include_podspecs = @include_podspecs
|
85
|
+
validator.external_podspecs = @external_podspecs
|
79
86
|
validator.validate
|
80
87
|
|
81
88
|
unless @clean
|
@@ -29,47 +29,45 @@ module Pod
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def initialize(argv)
|
32
|
-
@pods = argv.arguments!
|
32
|
+
@pods = argv.arguments!
|
33
33
|
|
34
|
-
source_urls = argv.option('sources', '').split(',')
|
35
|
-
excluded_pods = argv.option('exclude-pods', '').split(',')
|
34
|
+
@source_urls = argv.option('sources', '').split(',')
|
35
|
+
@excluded_pods = argv.option('exclude-pods', '').split(',')
|
36
36
|
@clean_install = argv.flag?('clean-install', false)
|
37
|
-
|
38
|
-
source_pods = source_urls.flat_map { |url| config.sources_manager.source_with_name_or_url(url).pods }
|
39
|
-
unless source_pods.empty?
|
40
|
-
source_pods = source_pods.select { |pod| config.lockfile.pod_names.include?(pod) }
|
41
|
-
if @pods
|
42
|
-
@pods += source_pods
|
43
|
-
else
|
44
|
-
@pods = source_pods unless source_pods.empty?
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
37
|
+
@source_pods = @source_urls.flat_map { |url| config.sources_manager.source_with_name_or_url(url).pods }
|
48
38
|
|
49
|
-
|
50
|
-
|
39
|
+
super
|
40
|
+
end
|
51
41
|
|
52
|
-
|
53
|
-
|
54
|
-
pluralized_words = non_installed_pods.length > 1 ? %w(Pods are) : %w(Pod is)
|
55
|
-
message = "Trying to skip `#{non_installed_pods.join('`, `')}` #{pluralized_words.first} " \
|
56
|
-
"which #{pluralized_words.last} not installed"
|
57
|
-
raise Informative, message
|
58
|
-
end
|
42
|
+
def run
|
43
|
+
verify_podfile_exists!
|
59
44
|
|
60
|
-
|
61
|
-
|
45
|
+
installer = installer_for_config
|
46
|
+
installer.repo_update = repo_update?(:default => true)
|
47
|
+
installer.clean_install = @clean_install
|
48
|
+
if @pods.any? || @excluded_pods.any? || @source_pods.any?
|
49
|
+
verify_lockfile_exists!
|
50
|
+
verify_pods_are_installed!
|
51
|
+
verify_excluded_pods_are_installed!
|
62
52
|
|
63
|
-
|
53
|
+
@pods += @source_pods.select { |pod| config.lockfile.pod_names.include?(pod) }
|
54
|
+
@pods = config.lockfile.pod_names.dup if @pods.empty?
|
55
|
+
@pods -= @excluded_pods
|
56
|
+
|
57
|
+
installer.update = { :pods => @pods }
|
58
|
+
else
|
59
|
+
UI.puts 'Update all pods'.yellow
|
60
|
+
installer.update = true
|
61
|
+
end
|
62
|
+
installer.install!
|
64
63
|
end
|
65
64
|
|
65
|
+
private
|
66
|
+
|
66
67
|
# Check if all given pods are installed
|
67
68
|
#
|
68
69
|
def verify_pods_are_installed!
|
69
|
-
|
70
|
-
missing_pods = @pods.map { |p| Specification.root_name(p) }.select do |pod|
|
71
|
-
!lockfile_roots.include?(pod)
|
72
|
-
end
|
70
|
+
missing_pods = lockfile_missing_pods(@pods)
|
73
71
|
|
74
72
|
unless missing_pods.empty?
|
75
73
|
message = if missing_pods.length > 1
|
@@ -83,21 +81,22 @@ module Pod
|
|
83
81
|
end
|
84
82
|
end
|
85
83
|
|
86
|
-
|
87
|
-
|
84
|
+
# Check if excluded pods are installed
|
85
|
+
#
|
86
|
+
def verify_excluded_pods_are_installed!
|
87
|
+
missing_pods = lockfile_missing_pods(@excluded_pods)
|
88
88
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
verify_pods_are_installed!
|
95
|
-
installer.update = { :pods => @pods }
|
96
|
-
else
|
97
|
-
UI.puts 'Update all pods'.yellow
|
98
|
-
installer.update = true
|
89
|
+
unless missing_pods.empty?
|
90
|
+
pluralized_words = missing_pods.length > 1 ? %w(Pods are) : %w(Pod is)
|
91
|
+
message = "Trying to skip `#{missing_pods.join('`, `')}` #{pluralized_words.first} " \
|
92
|
+
"which #{pluralized_words.last} not installed"
|
93
|
+
raise Informative, message
|
99
94
|
end
|
100
|
-
|
95
|
+
end
|
96
|
+
|
97
|
+
def lockfile_missing_pods(pods)
|
98
|
+
lockfile_roots = config.lockfile.pod_names.map { |pod| Specification.root_name(pod) }
|
99
|
+
pods.map { |pod| Specification.root_name(pod) }.uniq - lockfile_roots
|
101
100
|
end
|
102
101
|
end
|
103
102
|
end
|
data/lib/cocoapods/installer.rb
CHANGED
@@ -179,7 +179,7 @@ module Pod
|
|
179
179
|
@metadata_cache = ProjectCache::ProjectMetadataCache.from_file(sandbox.project_metadata_cache_path)
|
180
180
|
@project_cache_version = ProjectCache::ProjectCacheVersion.from_file(sandbox.project_version_cache_path)
|
181
181
|
|
182
|
-
force_clean_install = clean_install || project_cache_version.version != Version.create(VersionMetadata.
|
182
|
+
force_clean_install = clean_install || project_cache_version.version != Version.create(VersionMetadata.project_cache_version)
|
183
183
|
cache_result = ProjectCache::ProjectCacheAnalyzer.new(sandbox, installation_cache, analysis_result.all_user_build_configurations,
|
184
184
|
object_version, pod_targets, aggregate_targets, :clean_install => force_clean_install).analyze
|
185
185
|
aggregate_targets_to_generate = cache_result.aggregate_targets_to_generate || []
|
@@ -459,7 +459,7 @@ module Pod
|
|
459
459
|
new_lockfile = generate_lockfile
|
460
460
|
return if new_lockfile == lockfile
|
461
461
|
|
462
|
-
diff = Xcodeproj::Differ.hash_diff(lockfile.to_hash, new_lockfile.to_hash, :key_1 => 'Old Lockfile', :key_2 => 'New Lockfile')
|
462
|
+
return unless diff = Xcodeproj::Differ.hash_diff(lockfile.to_hash, new_lockfile.to_hash, :key_1 => 'Old Lockfile', :key_2 => 'New Lockfile')
|
463
463
|
pretty_diff = YAMLHelper.convert_hash(diff, Lockfile::HASH_KEY_ORDER, "\n\n")
|
464
464
|
pretty_diff.gsub!(':diff:', 'diff:'.yellow)
|
465
465
|
|
@@ -761,7 +761,7 @@ module Pod
|
|
761
761
|
target_installation_results.aggregate_target_installation_results || {})
|
762
762
|
metadata_cache.save_as(sandbox.project_metadata_cache_path)
|
763
763
|
|
764
|
-
cache_version = ProjectCache::ProjectCacheVersion.new(VersionMetadata.
|
764
|
+
cache_version = ProjectCache::ProjectCacheVersion.new(VersionMetadata.project_cache_version)
|
765
765
|
cache_version.save_as(sandbox.project_version_cache_path)
|
766
766
|
end
|
767
767
|
|
@@ -775,7 +775,8 @@ module Pod
|
|
775
775
|
def integrate_user_project
|
776
776
|
UI.section "Integrating client #{'project'.pluralize(aggregate_targets.map(&:user_project_path).uniq.count)}" do
|
777
777
|
installation_root = config.installation_root
|
778
|
-
integrator = UserProjectIntegrator.new(podfile, sandbox, installation_root, generated_aggregate_targets,
|
778
|
+
integrator = UserProjectIntegrator.new(podfile, sandbox, installation_root, aggregate_targets, generated_aggregate_targets,
|
779
|
+
:use_input_output_paths => !installation_options.disable_input_output_paths?)
|
779
780
|
integrator.integrate!
|
780
781
|
end
|
781
782
|
end
|
@@ -138,7 +138,7 @@ module Pod
|
|
138
138
|
@podfile_dependency_cache.target_definition_list.group_by { |td| [td.name, td.user_project_path] }.
|
139
139
|
each do |(name, project), definitions|
|
140
140
|
next unless definitions.size > 1
|
141
|
-
error = "The target `#{name}` is declared
|
141
|
+
error = "The target `#{name}` is declared multiple times"
|
142
142
|
error << " for the project `#{project}`" if project
|
143
143
|
add_error(error << '.')
|
144
144
|
end
|
@@ -26,7 +26,7 @@ module Pod
|
|
26
26
|
#
|
27
27
|
attr_reader :build_configurations
|
28
28
|
|
29
|
-
# @return [
|
29
|
+
# @return [Integer]
|
30
30
|
# The project object version to install with each target.
|
31
31
|
#
|
32
32
|
attr_reader :project_object_version
|
@@ -37,7 +37,7 @@ module Pod
|
|
37
37
|
# @param [Array<AggregateTarget] aggregate_targets_to_generate @see #aggregate_targets_to_generate
|
38
38
|
# @param [Hash{String => TargetCacheKey}] cache_key_by_target_label @see #cache_key_by_target_label
|
39
39
|
# @param [Hash{String => Symbol}] build_configurations @see #build_configurations
|
40
|
-
# @param [
|
40
|
+
# @param [Integer] project_object_version @see #project_object_version
|
41
41
|
#
|
42
42
|
def initialize(pod_targets_to_generate, aggregate_targets_to_generate, cache_key_by_target_label,
|
43
43
|
build_configurations, project_object_version)
|
@@ -18,7 +18,7 @@ module Pod
|
|
18
18
|
#
|
19
19
|
attr_reader :build_configurations
|
20
20
|
|
21
|
-
# @return [
|
21
|
+
# @return [Integer] The object version from the user project.
|
22
22
|
#
|
23
23
|
attr_reader :project_object_version
|
24
24
|
|
@@ -39,7 +39,7 @@ module Pod
|
|
39
39
|
# @param [Sandbox] sandbox @see #sandbox
|
40
40
|
# @param [ProjectInstallationCache] cache @see #cache
|
41
41
|
# @param [Hash{String => Symbol}] build_configurations @see #build_configurations
|
42
|
-
# @param [
|
42
|
+
# @param [Integer] project_object_version @see #project_object_version
|
43
43
|
# @param [Array<PodTarget>] pod_targets @see #pod_targets
|
44
44
|
# @param [Array<AggregateTarget>] aggregate_targets @see #aggregate_targets
|
45
45
|
# @param [Bool] clean_install @see #clean_install
|
@@ -16,7 +16,7 @@ module Pod
|
|
16
16
|
#
|
17
17
|
attr_reader :build_configurations
|
18
18
|
|
19
|
-
# @return [
|
19
|
+
# @return [Integer]
|
20
20
|
# Project object stored in the cache.
|
21
21
|
#
|
22
22
|
attr_reader :project_object_version
|
@@ -25,7 +25,7 @@ module Pod
|
|
25
25
|
#
|
26
26
|
# @param [Hash{String => TargetCacheKey}] cache_key_by_target_label @see #cache_key_by_target_label
|
27
27
|
# @param [Hash{String => Symbol}] build_configurations @see #build_configurations
|
28
|
-
# @param [
|
28
|
+
# @param [Integer] project_object_version @see #project_object_version
|
29
29
|
#
|
30
30
|
def initialize(cache_key_by_target_label = {}, build_configurations = nil, project_object_version = nil)
|
31
31
|
@cache_key_by_target_label = cache_key_by_target_label
|
@@ -18,11 +18,8 @@ module Pod
|
|
18
18
|
#
|
19
19
|
attr_reader :podfile
|
20
20
|
|
21
|
-
# @return [
|
22
|
-
# integrate.
|
21
|
+
# @return [Sandbox] The sandbox used for this installation.
|
23
22
|
#
|
24
|
-
# attr_reader :pods_project
|
25
|
-
|
26
23
|
attr_reader :sandbox
|
27
24
|
|
28
25
|
# @return [Pathname] the path of the installation.
|
@@ -37,23 +34,31 @@ module Pod
|
|
37
34
|
#
|
38
35
|
attr_reader :targets
|
39
36
|
|
37
|
+
# @return [Array<AggregateTarget>] the targets that require integration. This will always be equal or a smaller
|
38
|
+
# subset of #targets.
|
39
|
+
#
|
40
|
+
attr_reader :targets_to_integrate
|
41
|
+
|
40
42
|
# @return [Boolean] whether to use input/output paths for build phase scripts
|
41
43
|
#
|
42
44
|
attr_reader :use_input_output_paths
|
43
45
|
alias use_input_output_paths? use_input_output_paths
|
44
46
|
|
45
|
-
#
|
47
|
+
# Initialize a new instance
|
46
48
|
#
|
47
|
-
# @param [Podfile]
|
48
|
-
# @param [Sandbox]
|
49
|
+
# @param [Podfile] podfile @see #podfile
|
50
|
+
# @param [Sandbox] sandbox @see #sandbox
|
49
51
|
# @param [Pathname] installation_root @see #installation_root
|
50
52
|
# @param [Array<AggregateTarget>] targets @see #targets
|
53
|
+
# @param [Array<AggregateTarget>] targets_to_integrate @see #targets_to_integrate
|
54
|
+
# @param [Boolean] use_input_output_paths @see #use_input_output_paths
|
51
55
|
#
|
52
|
-
def initialize(podfile, sandbox, installation_root, targets, use_input_output_paths: true)
|
56
|
+
def initialize(podfile, sandbox, installation_root, targets, targets_to_integrate, use_input_output_paths: true)
|
53
57
|
@podfile = podfile
|
54
58
|
@sandbox = sandbox
|
55
59
|
@installation_root = installation_root
|
56
60
|
@targets = targets
|
61
|
+
@targets_to_integrate = targets_to_integrate
|
57
62
|
@use_input_output_paths = use_input_output_paths
|
58
63
|
end
|
59
64
|
|
@@ -64,9 +69,11 @@ module Pod
|
|
64
69
|
#
|
65
70
|
def integrate!
|
66
71
|
create_workspace
|
72
|
+
deintegrated_projects = deintegrate_removed_targets
|
67
73
|
integrate_user_targets
|
68
74
|
warn_about_xcconfig_overrides
|
69
|
-
|
75
|
+
projects_to_save = (user_projects_to_integrate + deintegrated_projects).uniq
|
76
|
+
save_projects(projects_to_save)
|
70
77
|
end
|
71
78
|
|
72
79
|
#-----------------------------------------------------------------------#
|
@@ -85,7 +92,7 @@ module Pod
|
|
85
92
|
# @return [void]
|
86
93
|
#
|
87
94
|
def create_workspace
|
88
|
-
all_projects =
|
95
|
+
all_projects = user_project_paths_to_integrate.sort.push(sandbox.project_path).uniq
|
89
96
|
file_references = all_projects.map do |path|
|
90
97
|
relative_path = path.relative_path_from(workspace_path.dirname).to_s
|
91
98
|
Xcodeproj::Workspace::FileReference.new(relative_path, 'group')
|
@@ -106,6 +113,23 @@ module Pod
|
|
106
113
|
end
|
107
114
|
end
|
108
115
|
|
116
|
+
# Deintegrates the targets of the user projects that are no longer part of the installation.
|
117
|
+
#
|
118
|
+
# @return [Array<Xcodeproj::PBXProject>] The list of projects that were deintegrated.
|
119
|
+
#
|
120
|
+
def deintegrate_removed_targets
|
121
|
+
Config.instance.with_changes(:silent => true) do
|
122
|
+
deintegrator = Deintegrator.new
|
123
|
+
all_project_targets = user_projects.flat_map(&:native_targets).uniq
|
124
|
+
all_native_targets = targets.flat_map(&:user_targets).uniq
|
125
|
+
targets_to_deintegrate = all_project_targets - all_native_targets
|
126
|
+
targets_to_deintegrate.each do |target|
|
127
|
+
deintegrator.deintegrate_target(target)
|
128
|
+
end
|
129
|
+
return targets_to_deintegrate.map(&:project).select(&:dirty?).uniq
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
109
133
|
# Integrates the targets of the user projects with the libraries
|
110
134
|
# generated from the {Podfile}.
|
111
135
|
#
|
@@ -119,26 +143,17 @@ module Pod
|
|
119
143
|
target_integrators = targets_to_integrate.sort_by(&:name).map do |target|
|
120
144
|
TargetIntegrator.new(target, :use_input_output_paths => use_input_output_paths?)
|
121
145
|
end
|
122
|
-
|
123
|
-
Config.instance.with_changes(:silent => true) do
|
124
|
-
deintegrator = Deintegrator.new
|
125
|
-
all_project_targets = user_projects.flat_map(&:native_targets).uniq
|
126
|
-
all_native_targets = targets_to_integrate.flat_map(&:user_targets).uniq
|
127
|
-
targets_to_deintegrate = all_project_targets - all_native_targets
|
128
|
-
targets_to_deintegrate.each do |target|
|
129
|
-
deintegrator.deintegrate_target(target)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
146
|
target_integrators.each(&:integrate!)
|
134
147
|
end
|
135
148
|
|
136
149
|
# Save all user projects.
|
137
150
|
#
|
151
|
+
# @param [Array<Xcodeproj::PBXProject>] projects The projects to save.
|
152
|
+
#
|
138
153
|
# @return [void]
|
139
154
|
#
|
140
|
-
def save_projects
|
141
|
-
|
155
|
+
def save_projects(projects)
|
156
|
+
projects.each do |project|
|
142
157
|
if project.dirty?
|
143
158
|
project.save
|
144
159
|
else
|
@@ -163,7 +178,7 @@ module Pod
|
|
163
178
|
# warning to inform the user if needed.
|
164
179
|
#
|
165
180
|
def warn_about_xcconfig_overrides
|
166
|
-
|
181
|
+
targets_to_integrate.each do |aggregate_target|
|
167
182
|
aggregate_target.user_targets.each do |user_target|
|
168
183
|
user_target.build_configurations.each do |config|
|
169
184
|
xcconfig = aggregate_target.xcconfigs[config.name]
|
@@ -207,20 +222,38 @@ module Pod
|
|
207
222
|
end
|
208
223
|
|
209
224
|
# @return [Array<Pathname>] the paths of all the user projects referenced
|
210
|
-
# by the
|
225
|
+
# by the targets that require integration.
|
211
226
|
#
|
212
227
|
# @note Empty target definitions are ignored.
|
213
228
|
#
|
214
|
-
def
|
215
|
-
|
229
|
+
def user_project_paths_to_integrate
|
230
|
+
targets_to_integrate.map(&:user_project_path).compact.uniq
|
231
|
+
end
|
232
|
+
|
233
|
+
# @return [Array<Xcodeproj::Project>] the projects of all the targets that require integration.
|
234
|
+
#
|
235
|
+
# @note Empty target definitions are ignored.
|
236
|
+
#
|
237
|
+
def user_projects_to_integrate
|
238
|
+
targets_to_integrate.map(&:user_project).compact.uniq
|
216
239
|
end
|
217
240
|
|
241
|
+
# @return [Array<Xcodeproj::Project>] the projects of all the targets regardless of whether they are integrated
|
242
|
+
# or not.
|
243
|
+
#
|
244
|
+
# @note Empty target definitions are ignored.
|
245
|
+
#
|
218
246
|
def user_projects
|
219
247
|
targets.map(&:user_project).compact.uniq
|
220
248
|
end
|
221
249
|
|
222
|
-
|
223
|
-
|
250
|
+
# @return [Array<Pathname>] the paths of all the user projects from all targets regardless of whether they are
|
251
|
+
# integrated or not.
|
252
|
+
#
|
253
|
+
# @note Empty target definitions are ignored.
|
254
|
+
#
|
255
|
+
def user_project_paths
|
256
|
+
targets.map(&:user_project_path).compact.uniq
|
224
257
|
end
|
225
258
|
|
226
259
|
# Prints a warning informing the user that a build configuration of
|
@@ -229,7 +262,7 @@ module Pod
|
|
229
262
|
# @param [Target::AggregateTarget] aggregate_target
|
230
263
|
# The umbrella target.
|
231
264
|
#
|
232
|
-
# @param [
|
265
|
+
# @param [Xcodeproj::PBXNativeTarget] user_target
|
233
266
|
# The native target.
|
234
267
|
#
|
235
268
|
# @param [Xcodeproj::XCBuildConfiguration] config
|
@@ -40,8 +40,7 @@ module Pod
|
|
40
40
|
|
41
41
|
def create_pods_project(pod_targets, path, parent_project)
|
42
42
|
platforms = pod_targets.map(&:platform)
|
43
|
-
project = ProjectGenerator.new(sandbox, path,
|
44
|
-
pod_targets, build_configurations, platforms,
|
43
|
+
project = ProjectGenerator.new(sandbox, path, pod_targets, build_configurations, platforms,
|
45
44
|
project_object_version, false, :pod_target_subproject => true).generate!
|
46
45
|
# Instead of saving every subproject to disk, we can optimize this by creating a temporary folder
|
47
46
|
# the file reference can use so that we only have to call `save` once for all projects.
|
@@ -43,7 +43,7 @@ module Pod
|
|
43
43
|
#
|
44
44
|
attr_reader :config
|
45
45
|
|
46
|
-
# @return [
|
46
|
+
# @return [Integer] the object version for the projects we will generate.
|
47
47
|
#
|
48
48
|
attr_reader :project_object_version
|
49
49
|
|
@@ -59,7 +59,7 @@ module Pod
|
|
59
59
|
# @param [Hash{String => Symbol}] build_configurations @see #build_configurations
|
60
60
|
# @param [InstallationOptions] installation_options @see #installation_options
|
61
61
|
# @param [Config] config @see #config
|
62
|
-
# @param [
|
62
|
+
# @param [Integer] project_object_version @see #project_object_version
|
63
63
|
# @param [ProjectMetadataCache] metadata_cache @see #metadata_cache
|
64
64
|
#
|
65
65
|
def initialize(sandbox, aggregate_targets, pod_targets, build_configurations, installation_options, config,
|
data/lib/cocoapods/project.rb
CHANGED
@@ -69,7 +69,7 @@ module Pod
|
|
69
69
|
#
|
70
70
|
def generate_available_uuid_list(count = 100)
|
71
71
|
start = @generated_uuids.size
|
72
|
-
uniques = Array.new(count) { |i| format('%.
|
72
|
+
uniques = Array.new(count) { |i| format('%.6s%07X0', @uuid_prefix, start + i) }
|
73
73
|
@generated_uuids += uniques
|
74
74
|
@available_uuids += uniques
|
75
75
|
end
|
data/lib/cocoapods/validator.rb
CHANGED
@@ -197,7 +197,7 @@ module Pod
|
|
197
197
|
|
198
198
|
#-------------------------------------------------------------------------#
|
199
199
|
|
200
|
-
#
|
200
|
+
# @!group Configuration
|
201
201
|
|
202
202
|
# @return [Bool] whether the validation should skip the checks that
|
203
203
|
# requires the download of the library.
|
@@ -252,6 +252,16 @@ module Pod
|
|
252
252
|
#
|
253
253
|
attr_accessor :ignore_public_only_results
|
254
254
|
|
255
|
+
# @return [String] A glob for podspecs to be used during building of
|
256
|
+
# the local Podfile via :path.
|
257
|
+
#
|
258
|
+
attr_accessor :include_podspecs
|
259
|
+
|
260
|
+
# @return [String] A glob for podspecs to be used during building of
|
261
|
+
# the local Podfile via :podspec.
|
262
|
+
#
|
263
|
+
attr_accessor :external_podspecs
|
264
|
+
|
255
265
|
attr_accessor :skip_import_validation
|
256
266
|
alias_method :skip_import_validation?, :skip_import_validation
|
257
267
|
|
@@ -894,6 +904,10 @@ module Pod
|
|
894
904
|
podspec = file.realpath
|
895
905
|
local = local?
|
896
906
|
urls = source_urls
|
907
|
+
|
908
|
+
additional_podspec_pods = external_podspecs ? Dir.glob(external_podspecs) : []
|
909
|
+
additional_path_pods = (include_podspecs ? Dir.glob(include_podspecs) : []) .select { |path| spec.name != Specification.from_file(path).name } - additional_podspec_pods
|
910
|
+
|
897
911
|
Pod::Podfile.new do
|
898
912
|
install! 'cocoapods', :deterministic_uuids => false
|
899
913
|
# By default inhibit warnings for all pods, except the one being validated.
|
@@ -908,6 +922,17 @@ module Pod
|
|
908
922
|
else
|
909
923
|
pod name, :podspec => podspec.to_s, :inhibit_warnings => false
|
910
924
|
end
|
925
|
+
|
926
|
+
additional_path_pods.each do |podspec_path|
|
927
|
+
podspec_name = File.basename(podspec_path, '.*')
|
928
|
+
pod podspec_name, :path => File.dirname(podspec_path)
|
929
|
+
end
|
930
|
+
|
931
|
+
additional_podspec_pods.each do |podspec_path|
|
932
|
+
podspec_name = File.basename(podspec_path, '.*')
|
933
|
+
pod podspec_name, :podspec => podspec_path
|
934
|
+
end
|
935
|
+
|
911
936
|
test_spec_names.each do |test_spec_name|
|
912
937
|
if local
|
913
938
|
pod test_spec_name, :path => podspec.dirname.to_s, :inhibit_warnings => false
|
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.7.0.beta.
|
4
|
+
version: 1.7.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: 2019-03-
|
14
|
+
date: 2019-03-27 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.7.0.beta.
|
22
|
+
version: 1.7.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.7.0.beta.
|
29
|
+
version: 1.7.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.8.
|
210
|
+
version: 1.8.2
|
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.8.
|
220
|
+
version: 1.8.2
|
221
221
|
- - "<"
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '2.0'
|
@@ -557,8 +557,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
557
557
|
- !ruby/object:Gem::Version
|
558
558
|
version: '0'
|
559
559
|
requirements: []
|
560
|
-
|
561
|
-
rubygems_version: 2.6.14
|
560
|
+
rubygems_version: 3.0.1
|
562
561
|
signing_key:
|
563
562
|
specification_version: 3
|
564
563
|
summary: The Cocoa library package manager.
|