cocoapods 1.5.2 → 1.6.1
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 +365 -1
- data/bin/pod +1 -1
- data/lib/cocoapods/command/cache/clean.rb +1 -1
- data/lib/cocoapods/command/init.rb +4 -2
- data/lib/cocoapods/command/install.rb +7 -0
- data/lib/cocoapods/command/lib/lint.rb +8 -1
- data/lib/cocoapods/command/outdated.rb +4 -9
- data/lib/cocoapods/command/repo/add.rb +1 -1
- data/lib/cocoapods/command/repo/list.rb +1 -1
- data/lib/cocoapods/command/repo/push.rb +17 -12
- data/lib/cocoapods/command/repo/remove.rb +1 -1
- data/lib/cocoapods/command/repo/update.rb +1 -1
- data/lib/cocoapods/command/setup.rb +1 -1
- data/lib/cocoapods/command/spec/create.rb +39 -39
- data/lib/cocoapods/command/spec/lint.rb +8 -1
- data/lib/cocoapods/command.rb +3 -1
- data/lib/cocoapods/config.rb +13 -2
- data/lib/cocoapods/downloader/cache.rb +1 -1
- data/lib/cocoapods/executable.rb +3 -3
- data/lib/cocoapods/external_sources/abstract_external_source.rb +23 -13
- data/lib/cocoapods/external_sources.rb +7 -4
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/acknowledgements/markdown.rb +6 -0
- data/lib/cocoapods/generator/acknowledgements/plist.rb +13 -2
- data/lib/cocoapods/generator/app_target_helper.rb +141 -17
- data/lib/cocoapods/generator/copy_resources_script.rb +14 -3
- data/lib/cocoapods/generator/dummy_source.rb +14 -5
- data/lib/cocoapods/generator/embed_frameworks_script.rb +37 -20
- data/lib/cocoapods/generator/header.rb +1 -1
- data/lib/cocoapods/generator/info_plist_file.rb +12 -4
- data/lib/cocoapods/generator/prefix_header.rb +2 -2
- data/lib/cocoapods/hooks_manager.rb +28 -17
- data/lib/cocoapods/installer/analyzer/analysis_result.rb +52 -22
- data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +14 -6
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +4 -5
- data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +3 -14
- data/lib/cocoapods/installer/analyzer/specs_state.rb +28 -4
- data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +27 -14
- data/lib/cocoapods/installer/analyzer/target_inspector.rb +17 -11
- data/lib/cocoapods/installer/analyzer.rb +391 -284
- data/lib/cocoapods/installer/installation_options.rb +2 -0
- data/lib/cocoapods/installer/pod_source_installer.rb +31 -43
- data/lib/cocoapods/installer/post_install_hooks_context.rb +72 -47
- data/lib/cocoapods/installer/pre_install_hooks_context.rb +22 -13
- data/lib/cocoapods/installer/source_provider_hooks_context.rb +3 -1
- data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +44 -11
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +69 -29
- data/lib/cocoapods/installer/user_project_integrator.rb +6 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +25 -16
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +104 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +23 -50
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +296 -177
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +51 -33
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +93 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +62 -69
- data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +72 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +130 -122
- data/lib/cocoapods/installer/xcode/target_validator.rb +15 -9
- data/lib/cocoapods/installer.rb +140 -63
- data/lib/cocoapods/project.rb +16 -14
- data/lib/cocoapods/resolver/resolver_specification.rb +41 -0
- data/lib/cocoapods/resolver.rb +79 -98
- data/lib/cocoapods/sandbox/file_accessor.rb +11 -6
- data/lib/cocoapods/sandbox/headers_store.rb +9 -8
- data/lib/cocoapods/sandbox/path_list.rb +5 -8
- data/lib/cocoapods/sandbox.rb +31 -43
- data/lib/cocoapods/sources_manager.rb +1 -1
- data/lib/cocoapods/target/aggregate_target.rb +143 -85
- data/lib/cocoapods/target/build_settings.rb +1124 -0
- data/lib/cocoapods/target/framework_paths.rb +36 -0
- data/lib/cocoapods/target/pod_target.rb +198 -295
- data/lib/cocoapods/target.rb +92 -37
- data/lib/cocoapods/user_interface.rb +5 -0
- data/lib/cocoapods/validator.rb +149 -44
- data/lib/cocoapods.rb +0 -1
- metadata +31 -23
- data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +0 -260
- data/lib/cocoapods/generator/xcconfig/pod_xcconfig.rb +0 -87
- data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +0 -558
- data/lib/cocoapods/generator/xcconfig.rb +0 -13
@@ -33,6 +33,8 @@ module Pod
|
|
33
33
|
dependency_graph = Molinillo::DependencyGraph.new
|
34
34
|
|
35
35
|
if lockfile
|
36
|
+
added_dependency_strings = Set.new
|
37
|
+
|
36
38
|
explicit_dependencies = lockfile.dependencies
|
37
39
|
explicit_dependencies.each do |dependency|
|
38
40
|
dependency_graph.add_vertex(dependency.name, dependency, true)
|
@@ -40,7 +42,7 @@ module Pod
|
|
40
42
|
|
41
43
|
pods = lockfile.to_hash['PODS'] || []
|
42
44
|
pods.each do |pod|
|
43
|
-
add_to_dependency_graph(pod, [], dependency_graph, pods_to_unlock)
|
45
|
+
add_to_dependency_graph(pod, [], dependency_graph, pods_to_unlock, added_dependency_strings)
|
44
46
|
end
|
45
47
|
|
46
48
|
pods_to_update = pods_to_update.flat_map do |u|
|
@@ -51,6 +53,11 @@ module Pod
|
|
51
53
|
pods_to_update.each do |u|
|
52
54
|
dependency_graph.detach_vertex_named(u)
|
53
55
|
end
|
56
|
+
|
57
|
+
dependency_graph.each do |vertex|
|
58
|
+
next unless dep = vertex.payload
|
59
|
+
dep.podspec_repo ||= lockfile.spec_repo(dep.root_name)
|
60
|
+
end
|
54
61
|
end
|
55
62
|
|
56
63
|
dependency_graph
|
@@ -67,7 +74,8 @@ module Pod
|
|
67
74
|
|
68
75
|
private
|
69
76
|
|
70
|
-
def self.add_child_vertex_to_graph(dependency_string, parents, dependency_graph, pods_to_unlock)
|
77
|
+
def self.add_child_vertex_to_graph(dependency_string, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
|
78
|
+
return unless added_dependency_strings.add?(dependency_string)
|
71
79
|
dependency = Dependency.from_string(dependency_string)
|
72
80
|
if pods_to_unlock.include?(dependency.root_name)
|
73
81
|
dependency = Dependency.new(dependency.name)
|
@@ -78,14 +86,14 @@ module Pod
|
|
78
86
|
dependency
|
79
87
|
end
|
80
88
|
|
81
|
-
def self.add_to_dependency_graph(object, parents, dependency_graph, pods_to_unlock)
|
89
|
+
def self.add_to_dependency_graph(object, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
|
82
90
|
case object
|
83
91
|
when String
|
84
|
-
add_child_vertex_to_graph(object, parents, dependency_graph, pods_to_unlock)
|
92
|
+
add_child_vertex_to_graph(object, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
|
85
93
|
when Hash
|
86
94
|
object.each do |key, value|
|
87
|
-
dependency = add_child_vertex_to_graph(key, parents, dependency_graph, pods_to_unlock)
|
88
|
-
value.each { |v| add_to_dependency_graph(v, [dependency.name], dependency_graph, pods_to_unlock) }
|
95
|
+
dependency = add_child_vertex_to_graph(key, parents, dependency_graph, pods_to_unlock, added_dependency_strings)
|
96
|
+
value.each { |v| add_to_dependency_graph(v, [dependency.name], dependency_graph, pods_to_unlock, added_dependency_strings) }
|
89
97
|
end
|
90
98
|
end
|
91
99
|
end
|
@@ -38,6 +38,7 @@ module Pod
|
|
38
38
|
@test_specs = test_specs
|
39
39
|
@platform = platform
|
40
40
|
@requires_frameworks = requires_frameworks
|
41
|
+
@hash = [specs, platform, requires_frameworks].hash
|
41
42
|
end
|
42
43
|
|
43
44
|
# @note Test specs are intentionally not included as part of the equality for pod variants since a
|
@@ -48,9 +49,9 @@ module Pod
|
|
48
49
|
#
|
49
50
|
def ==(other)
|
50
51
|
self.class == other.class &&
|
51
|
-
|
52
|
+
requires_frameworks == other.requires_frameworks &&
|
52
53
|
platform == other.platform &&
|
53
|
-
|
54
|
+
specs == other.specs
|
54
55
|
end
|
55
56
|
alias_method :eql?, :==
|
56
57
|
|
@@ -59,9 +60,7 @@ module Pod
|
|
59
60
|
# This adds support to make instances usable as Hash keys.
|
60
61
|
#
|
61
62
|
# @!visibility private
|
62
|
-
|
63
|
-
[specs, platform, requires_frameworks].hash
|
64
|
-
end
|
63
|
+
attr_reader :hash
|
65
64
|
end
|
66
65
|
end
|
67
66
|
end
|
@@ -42,27 +42,16 @@ module Pod
|
|
42
42
|
|
43
43
|
alias_method :update_mode?, :update_mode
|
44
44
|
|
45
|
-
# @return [Lockfile] The lockfile of the installation as a fall-back if
|
46
|
-
# there is no sandbox manifest. This is indented as a temporary
|
47
|
-
# solution to prevent the full re-installation from users which
|
48
|
-
# are upgrading from CP < 0.17.
|
49
|
-
#
|
50
|
-
# @todo Remove for CP 0.18.
|
51
|
-
#
|
52
|
-
attr_reader :lockfile
|
53
|
-
|
54
45
|
# Init a new SandboxAnalyzer
|
55
46
|
#
|
56
47
|
# @param [Sandbox] sandbox @see sandbox
|
57
48
|
# @param [Array<Specifications>] specs @see specs
|
58
49
|
# @param [Bool] update_mode @see update_mode
|
59
|
-
# @param [Lockfile] lockfile @see lockfile
|
60
50
|
#
|
61
|
-
def initialize(sandbox, specs, update_mode
|
51
|
+
def initialize(sandbox, specs, update_mode)
|
62
52
|
@sandbox = sandbox
|
63
53
|
@specs = specs
|
64
54
|
@update_mode = update_mode
|
65
|
-
@lockfile = lockfile
|
66
55
|
end
|
67
56
|
|
68
57
|
# Performs the analysis to the detect the state of the sandbox respect
|
@@ -114,7 +103,7 @@ module Pod
|
|
114
103
|
#
|
115
104
|
def pod_added?(pod)
|
116
105
|
return true if resolved_pods.include?(pod) && !sandbox_pods.include?(pod)
|
117
|
-
return true
|
106
|
+
return true if !folder_exist?(pod) && !sandbox.local?(pod)
|
118
107
|
false
|
119
108
|
end
|
120
109
|
|
@@ -164,7 +153,7 @@ module Pod
|
|
164
153
|
# @return [Lockfile] The manifest to use for the sandbox.
|
165
154
|
#
|
166
155
|
def sandbox_manifest
|
167
|
-
sandbox.manifest
|
156
|
+
sandbox.manifest
|
168
157
|
end
|
169
158
|
|
170
159
|
#--------------------------------------#
|
@@ -59,10 +59,14 @@ module Pod
|
|
59
59
|
# @return [void]
|
60
60
|
#
|
61
61
|
def print
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
states = %i(added deleted changed unchanged)
|
63
|
+
lines(states).each do |line|
|
64
|
+
UI.message(line, '', 2)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_s(states: %i(added deleted changed unchanged))
|
69
|
+
lines(states).join("\n")
|
66
70
|
end
|
67
71
|
|
68
72
|
# Adds the name of a Pod to the give state.
|
@@ -78,6 +82,26 @@ module Pod
|
|
78
82
|
def add_name(name, state)
|
79
83
|
send(state) << Specification.root_name(name)
|
80
84
|
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
# @return [Array<String>] A description of changes for the given states,
|
89
|
+
# one per line
|
90
|
+
#
|
91
|
+
def lines(states)
|
92
|
+
prefixes = {
|
93
|
+
:added => 'A'.green,
|
94
|
+
:deleted => 'R'.red,
|
95
|
+
:changed => 'M'.yellow,
|
96
|
+
:unchanged => '-',
|
97
|
+
}
|
98
|
+
|
99
|
+
states.flat_map do |state|
|
100
|
+
send(state).sort.map do |pod|
|
101
|
+
prefixes[state.to_sym] + " #{pod}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
81
105
|
end
|
82
106
|
end
|
83
107
|
end
|
@@ -5,40 +5,53 @@ module Pod
|
|
5
5
|
# @return [TargetDefinition] the target definition, whose project was
|
6
6
|
# inspected
|
7
7
|
#
|
8
|
-
|
8
|
+
attr_reader :target_definition
|
9
9
|
|
10
|
-
# @return [
|
11
|
-
# #target_definition should integrate
|
10
|
+
# @return [Xcodeproj::Project] the user's Xcode project
|
12
11
|
#
|
13
|
-
|
12
|
+
attr_reader :project
|
14
13
|
|
15
14
|
# @return [Array<String>] the uuid of the user's targets
|
16
15
|
#
|
17
|
-
|
16
|
+
attr_reader :project_target_uuids
|
18
17
|
|
19
18
|
# @return [Hash{String=>Symbol}] A hash representing the user build
|
20
19
|
# configurations where each key corresponds to the name of a
|
21
20
|
# configuration and its value to its type (`:debug` or
|
22
21
|
# `:release`).
|
23
22
|
#
|
24
|
-
|
23
|
+
attr_reader :build_configurations
|
25
24
|
|
26
25
|
# @return [Platform] the platform of the user targets
|
27
26
|
#
|
28
|
-
|
27
|
+
attr_reader :platform
|
29
28
|
|
30
29
|
# @return [Array<String>] the architectures used by user's targets
|
31
30
|
#
|
32
|
-
|
31
|
+
attr_reader :archs
|
33
32
|
|
34
|
-
# @return [
|
35
|
-
# due to the presence of Swift source in the user's targets
|
33
|
+
# @return [Pathname] the path to the root of the project containing the user target
|
36
34
|
#
|
37
|
-
|
35
|
+
attr_reader :client_root
|
38
36
|
|
39
|
-
#
|
40
|
-
#
|
41
|
-
|
37
|
+
# Initialize a new instance
|
38
|
+
#
|
39
|
+
# @param [TargetDefinition] target_definition @see #target_definition
|
40
|
+
# @param [Xcodeproj::Project] project @see #project
|
41
|
+
# @param [Array<String>] project_target_uuids @see #project_target_uuids
|
42
|
+
# @param [Hash{String=>Symbol}] build_configurations @see #build_configurations
|
43
|
+
# @param [Platform] platform @see #platform
|
44
|
+
# @param [Array<String>] archs @see #archs
|
45
|
+
#
|
46
|
+
def initialize(target_definition, project, project_target_uuids, build_configurations, platform, archs)
|
47
|
+
@target_definition = target_definition
|
48
|
+
@project = project
|
49
|
+
@project_target_uuids = project_target_uuids
|
50
|
+
@build_configurations = build_configurations
|
51
|
+
@platform = platform
|
52
|
+
@archs = archs
|
53
|
+
@client_root = project.project_dir.realpath
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
44
57
|
end
|
@@ -32,22 +32,21 @@ module Pod
|
|
32
32
|
#
|
33
33
|
# @raise If no `user_project` is set
|
34
34
|
#
|
35
|
-
# @return [TargetInspectionResult]
|
35
|
+
# @return [TargetInspectionResult] the result of the inspection of the target definition within the user project
|
36
36
|
#
|
37
37
|
def compute_results(user_project)
|
38
38
|
raise ArgumentError, 'Cannot compute results without a user project set' unless user_project
|
39
39
|
|
40
40
|
targets = compute_targets(user_project)
|
41
|
+
project_target_uuids = targets.map(&:uuid)
|
42
|
+
build_configurations = compute_build_configurations(targets)
|
43
|
+
platform = compute_platform(targets)
|
44
|
+
archs = compute_archs(targets)
|
45
|
+
swift_version = compute_swift_version_from_targets(targets)
|
41
46
|
|
42
|
-
result = TargetInspectionResult.new
|
43
|
-
|
44
|
-
result.
|
45
|
-
result.project_target_uuids = targets.map(&:uuid)
|
46
|
-
result.build_configurations = compute_build_configurations(targets)
|
47
|
-
result.platform = compute_platform(targets)
|
48
|
-
result.archs = compute_archs(targets)
|
49
|
-
result.project = user_project
|
50
|
-
result.target_definition.swift_version = compute_swift_version_from_targets(targets)
|
47
|
+
result = TargetInspectionResult.new(target_definition, user_project, project_target_uuids,
|
48
|
+
build_configurations, platform, archs)
|
49
|
+
result.target_definition.swift_version = swift_version
|
51
50
|
result
|
52
51
|
end
|
53
52
|
|
@@ -219,7 +218,14 @@ module Pod
|
|
219
218
|
#
|
220
219
|
def compute_swift_version_from_targets(targets)
|
221
220
|
versions_to_targets = targets.inject({}) do |memo, target|
|
222
|
-
|
221
|
+
# User project may have an xcconfig that specifies the `SWIFT_VERSION`. We first check if that is true and
|
222
|
+
# that the xcconfig file actually exists. After the first integration the xcconfig set is most probably
|
223
|
+
# the one that was generated from CocoaPods. See https://github.com/CocoaPods/CocoaPods/issues/7731 for
|
224
|
+
# more details.
|
225
|
+
resolve_against_xcconfig = target.build_configuration_list.build_configurations.all? do |bc|
|
226
|
+
!bc.base_configuration_reference.nil? && File.exist?(bc.base_configuration_reference.real_path)
|
227
|
+
end
|
228
|
+
versions = target.resolved_build_setting('SWIFT_VERSION', resolve_against_xcconfig).values
|
223
229
|
versions.each do |version|
|
224
230
|
memo[version] = [] if memo[version].nil?
|
225
231
|
memo[version] << target.name unless memo[version].include? target.name
|