cocoapods 1.8.4 → 1.9.0.beta.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 +4 -4
- data/CHANGELOG.md +69 -1
- data/lib/cocoapods.rb +1 -0
- data/lib/cocoapods/command/setup.rb +1 -0
- data/lib/cocoapods/executable.rb +1 -1
- data/lib/cocoapods/gem_version.rb +1 -1
- data/lib/cocoapods/generator/embed_frameworks_script.rb +36 -6
- data/lib/cocoapods/generator/prepare_artifacts_script.rb +244 -0
- data/lib/cocoapods/installer.rb +6 -5
- data/lib/cocoapods/installer/analyzer.rb +137 -59
- data/lib/cocoapods/installer/analyzer/pod_variant.rb +27 -12
- data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +11 -2
- data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +10 -2
- data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +15 -2
- data/lib/cocoapods/installer/project_cache/target_cache_key.rb +7 -5
- data/lib/cocoapods/installer/user_project_integrator.rb +1 -10
- data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +100 -19
- data/lib/cocoapods/installer/xcode/pods_project_generator.rb +3 -0
- data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +29 -4
- data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +7 -2
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +106 -45
- data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +68 -1
- data/lib/cocoapods/installer/xcode/pods_project_generator/pods_project_writer.rb +29 -14
- data/lib/cocoapods/sandbox/file_accessor.rb +32 -21
- data/lib/cocoapods/sources_manager.rb +9 -2
- data/lib/cocoapods/target.rb +11 -14
- data/lib/cocoapods/target/aggregate_target.rb +78 -18
- data/lib/cocoapods/target/build_settings.rb +64 -31
- data/lib/cocoapods/target/pod_target.rb +236 -87
- data/lib/cocoapods/user_interface/error_report.rb +14 -4
- data/lib/cocoapods/validator.rb +2 -0
- data/lib/cocoapods/xcode.rb +7 -0
- data/lib/cocoapods/{target → xcode}/framework_paths.rb +14 -1
- data/lib/cocoapods/xcode/linkage_analyzer.rb +22 -0
- data/lib/cocoapods/xcode/xcframework.rb +81 -0
- data/lib/cocoapods/xcode/xcframework/xcframework_slice.rb +51 -0
- metadata +12 -8
- data/lib/cocoapods/target/build_type.rb +0 -139
@@ -175,10 +175,8 @@ EOS
|
|
175
175
|
if source.is_a?(Pod::CDNSource)
|
176
176
|
"#{repo.basename} - CDN - #{source.url}"
|
177
177
|
elsif source.git?
|
178
|
-
|
179
|
-
|
180
|
-
"#{repo.basename} - git - #{source.url} @ #{sha}"
|
181
|
-
end
|
178
|
+
sha = git_hash(source)
|
179
|
+
"#{repo.basename} - git - #{source.url} @ #{sha}"
|
182
180
|
else
|
183
181
|
"#{repo.basename} - #{source.type}"
|
184
182
|
end
|
@@ -188,6 +186,18 @@ EOS
|
|
188
186
|
def original_command
|
189
187
|
"#{$PROGRAM_NAME} #{ARGV.join(' ')}"
|
190
188
|
end
|
189
|
+
|
190
|
+
private
|
191
|
+
|
192
|
+
# @param [Source] source
|
193
|
+
# a git source
|
194
|
+
#
|
195
|
+
# @return [String] the current git SHA
|
196
|
+
def git_hash(source)
|
197
|
+
Dir.chdir(source.repo) do
|
198
|
+
`git rev-parse HEAD 2>&1`
|
199
|
+
end
|
200
|
+
end
|
191
201
|
end
|
192
202
|
end
|
193
203
|
end
|
data/lib/cocoapods/validator.rb
CHANGED
@@ -39,6 +39,7 @@ module Pod
|
|
39
39
|
# the platforms to lint.
|
40
40
|
#
|
41
41
|
def initialize(spec_or_path, source_urls, platforms = [])
|
42
|
+
@use_frameworks = true
|
42
43
|
@linter = Specification::Linter.new(spec_or_path)
|
43
44
|
@source_urls = if @linter.spec && @linter.spec.dependencies.empty? && @linter.spec.recursive_subspecs.all? { |s| s.dependencies.empty? }
|
44
45
|
[]
|
@@ -57,6 +58,7 @@ module Pod
|
|
57
58
|
end
|
58
59
|
result
|
59
60
|
end
|
61
|
+
@use_frameworks = true
|
60
62
|
end
|
61
63
|
|
62
64
|
#-------------------------------------------------------------------------#
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Pod
|
2
|
-
|
2
|
+
module Xcode
|
3
3
|
class FrameworkPaths
|
4
4
|
# @return [String] the path to the .framework
|
5
5
|
#
|
@@ -36,6 +36,19 @@ module Pod
|
|
36
36
|
def all_paths
|
37
37
|
[source_path, dsym_path, bcsymbolmap_paths].flatten.compact
|
38
38
|
end
|
39
|
+
|
40
|
+
# @param [Pathname] path the path to the `.framework` bundle
|
41
|
+
#
|
42
|
+
# @return [FrameworkPaths] the path of the framework with dsym & bcsymbolmap paths, if found
|
43
|
+
#
|
44
|
+
def self.from_path(path)
|
45
|
+
dsym_name = "#{path.basename}.dSYM"
|
46
|
+
dsym_path = Pathname.new("#{path.dirname}/#{dsym_name}")
|
47
|
+
dsym_path = nil unless dsym_path.exist?
|
48
|
+
bcsymbolmap_paths = Pathname.glob(path.dirname, '*.bcsymbolmap')
|
49
|
+
|
50
|
+
FrameworkPaths.new(path, dsym_path, bcsymbolmap_paths)
|
51
|
+
end
|
39
52
|
end
|
40
53
|
end
|
41
54
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'macho'
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
module Xcode
|
5
|
+
class LinkageAnalyzer
|
6
|
+
# @param [Pathname] binary
|
7
|
+
# The file to be checked for being a dynamic Mach-O binary.
|
8
|
+
#
|
9
|
+
# @return [Boolean] Whether `binary` can be dynamically linked.
|
10
|
+
#
|
11
|
+
def self.dynamic_binary?(binary)
|
12
|
+
@cached_dynamic_binary_results ||= {}
|
13
|
+
return @cached_dynamic_binary_results[binary] unless @cached_dynamic_binary_results[binary].nil?
|
14
|
+
return false unless binary.file?
|
15
|
+
|
16
|
+
@cached_dynamic_binary_results[binary] = MachO.open(binary).dylib?
|
17
|
+
rescue MachO::MachOError
|
18
|
+
@cached_dynamic_binary_results[binary] = false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'cocoapods/xcode/xcframework/xcframework_slice'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
module Xcode
|
7
|
+
class XCFramework
|
8
|
+
# @return [Pathname] path the path to the .xcframework on disk
|
9
|
+
#
|
10
|
+
attr_reader :path
|
11
|
+
|
12
|
+
# @return [Pod::Version] the format version of the .xcframework
|
13
|
+
#
|
14
|
+
attr_reader :format_version
|
15
|
+
|
16
|
+
# @return [Array<XCFramework::Slice>] the slices contained inside this .xcframework
|
17
|
+
#
|
18
|
+
attr_reader :slices
|
19
|
+
|
20
|
+
# @return [Hash] the contents of the parsed plist
|
21
|
+
#
|
22
|
+
attr_reader :plist
|
23
|
+
|
24
|
+
# Initializes an XCFramework instance with a path on disk
|
25
|
+
#
|
26
|
+
# @param [Pathname, String] path
|
27
|
+
# The path to the .xcframework on disk
|
28
|
+
#
|
29
|
+
# @return [XCFramework] the xcframework at the given path
|
30
|
+
#
|
31
|
+
def initialize(path)
|
32
|
+
@path = Pathname.new(path).tap do |p|
|
33
|
+
raise 'Absolute path is required' unless p.absolute?
|
34
|
+
end
|
35
|
+
|
36
|
+
@plist = Xcodeproj::Plist.read_from_path(plist_path)
|
37
|
+
parse_plist_contents
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Pathname] the path to the Info.plist
|
41
|
+
#
|
42
|
+
def plist_path
|
43
|
+
path + 'Info.plist'
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [String] the basename of the framework
|
47
|
+
#
|
48
|
+
def name
|
49
|
+
File.basename(path, '.xcframework')
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Boolean] true if any slices use dynamic linkage
|
53
|
+
#
|
54
|
+
def includes_dynamic_slices?
|
55
|
+
slices.any? { |slice| Xcode::LinkageAnalyzer.dynamic_binary?(slice.binary_path) }
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Boolean] true if any slices use dynamic linkage
|
59
|
+
#
|
60
|
+
def includes_static_slices?
|
61
|
+
slices.any? { |slice| !Xcode::LinkageAnalyzer.dynamic_binary?(slice.binary_path) }
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def parse_plist_contents
|
67
|
+
@format_version = Pod::Version.new(plist['XCFrameworkFormatVersion'])
|
68
|
+
@slices = plist['AvailableLibraries'].map do |library|
|
69
|
+
identifier = library['LibraryIdentifier']
|
70
|
+
relative_path = library['LibraryPath']
|
71
|
+
archs = library['SupportedArchitectures']
|
72
|
+
platform_name = library['SupportedPlatform']
|
73
|
+
platform_variant = library['SupportedPlatformVariant']
|
74
|
+
|
75
|
+
slice_path = path.join(identifier).join(relative_path)
|
76
|
+
XCFramework::Slice.new(slice_path, identifier, archs, platform_name, platform_variant)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Pod
|
2
|
+
module Xcode
|
3
|
+
class XCFramework
|
4
|
+
class Slice
|
5
|
+
# @return [Pathname] the path to the .framework root of this framework slice
|
6
|
+
#
|
7
|
+
attr_reader :path
|
8
|
+
|
9
|
+
# @return [Array<String>] list of supported architectures
|
10
|
+
#
|
11
|
+
attr_reader :supported_archs
|
12
|
+
|
13
|
+
# @return [String] the framework identifier
|
14
|
+
#
|
15
|
+
attr_reader :identifier
|
16
|
+
|
17
|
+
# @return [Platform] the supported platform
|
18
|
+
#
|
19
|
+
attr_reader :platform
|
20
|
+
|
21
|
+
# @return [Symbol] the platform variant. Either :simulator or nil
|
22
|
+
#
|
23
|
+
attr_reader :platform_variant
|
24
|
+
|
25
|
+
def initialize(path, identifier, archs, platform, platform_variant = nil)
|
26
|
+
@path = path
|
27
|
+
@identifier = identifier
|
28
|
+
@supported_archs = archs
|
29
|
+
@platform = Pod::Platform.new(platform)
|
30
|
+
@platform_variant = platform_variant.to_sym unless platform_variant.nil?
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String] the name of the framework
|
34
|
+
#
|
35
|
+
def name
|
36
|
+
@name ||= File.basename(path, '.framework')
|
37
|
+
end
|
38
|
+
|
39
|
+
def simulator_variant?
|
40
|
+
@platform_variant == :simulator
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Pathname] the path to the bundled binary
|
44
|
+
#
|
45
|
+
def binary_path
|
46
|
+
path + name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
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.
|
4
|
+
version: 1.9.0.beta.1
|
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-
|
14
|
+
date: 2019-12-16 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.
|
22
|
+
version: 1.9.0.beta.1
|
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.
|
29
|
+
version: 1.9.0.beta.1
|
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.
|
210
|
+
version: 1.14.0
|
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.
|
220
|
+
version: 1.14.0
|
221
221
|
- - "<"
|
222
222
|
- !ruby/object:Gem::Version
|
223
223
|
version: '2.0'
|
@@ -460,6 +460,7 @@ files:
|
|
460
460
|
- lib/cocoapods/generator/info_plist_file.rb
|
461
461
|
- lib/cocoapods/generator/module_map.rb
|
462
462
|
- lib/cocoapods/generator/prefix_header.rb
|
463
|
+
- lib/cocoapods/generator/prepare_artifacts_script.rb
|
463
464
|
- lib/cocoapods/generator/umbrella_header.rb
|
464
465
|
- lib/cocoapods/hooks_manager.rb
|
465
466
|
- lib/cocoapods/installer.rb
|
@@ -529,14 +530,17 @@ files:
|
|
529
530
|
- lib/cocoapods/target.rb
|
530
531
|
- lib/cocoapods/target/aggregate_target.rb
|
531
532
|
- lib/cocoapods/target/build_settings.rb
|
532
|
-
- lib/cocoapods/target/build_type.rb
|
533
|
-
- lib/cocoapods/target/framework_paths.rb
|
534
533
|
- lib/cocoapods/target/pod_target.rb
|
535
534
|
- lib/cocoapods/user_interface.rb
|
536
535
|
- lib/cocoapods/user_interface/error_report.rb
|
537
536
|
- lib/cocoapods/user_interface/inspector_reporter.rb
|
538
537
|
- lib/cocoapods/validator.rb
|
539
538
|
- lib/cocoapods/version_metadata.rb
|
539
|
+
- lib/cocoapods/xcode.rb
|
540
|
+
- lib/cocoapods/xcode/framework_paths.rb
|
541
|
+
- lib/cocoapods/xcode/linkage_analyzer.rb
|
542
|
+
- lib/cocoapods/xcode/xcframework.rb
|
543
|
+
- lib/cocoapods/xcode/xcframework/xcframework_slice.rb
|
540
544
|
homepage: https://github.com/CocoaPods/CocoaPods
|
541
545
|
licenses:
|
542
546
|
- MIT
|
@@ -1,139 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
class Target
|
3
|
-
class BuildType
|
4
|
-
# @return [Array<Symbol>] known packaging options.
|
5
|
-
#
|
6
|
-
KNOWN_PACKAGING_OPTIONS = %i(library framework).freeze
|
7
|
-
|
8
|
-
# @return [Array<Symbol>] known linking options.
|
9
|
-
#
|
10
|
-
KNOWN_LINKAGE_OPTIONS = %i(static dynamic).freeze
|
11
|
-
|
12
|
-
# @return [Symbol] the packaging for this build type, one of KNOWN_PACKAGING_OPTIONS
|
13
|
-
#
|
14
|
-
attr_reader :packaging
|
15
|
-
|
16
|
-
# @return [Symbol] the linkage for this build type, one of KNOWN_LINKAGE_OPTIONS
|
17
|
-
#
|
18
|
-
attr_reader :linkage
|
19
|
-
|
20
|
-
attr_reader :hash
|
21
|
-
|
22
|
-
def initialize(linkage: :static, packaging: :library)
|
23
|
-
raise ArgumentError, "Invalid linkage option #{linkage.inspect}, valid options are #{KNOWN_LINKAGE_OPTIONS.inspect}" unless KNOWN_LINKAGE_OPTIONS.include?(linkage)
|
24
|
-
raise ArgumentError, "Invalid packaging option #{packaging.inspect}, valid options are #{KNOWN_PACKAGING_OPTIONS.inspect}" unless KNOWN_PACKAGING_OPTIONS.include?(packaging)
|
25
|
-
|
26
|
-
@packaging = packaging
|
27
|
-
@linkage = linkage
|
28
|
-
@hash = packaging.hash ^ linkage.hash
|
29
|
-
end
|
30
|
-
|
31
|
-
# @param [Specification] spec
|
32
|
-
# the specification to infer the build type from
|
33
|
-
#
|
34
|
-
# @param [Boolean] host_requires_frameworks
|
35
|
-
# whether the host target definition specified `use_frameworks!`
|
36
|
-
#
|
37
|
-
# @return [BuildType] the appropriate build type for the given spec,
|
38
|
-
# based on whether the host target definition requires frameworks.
|
39
|
-
#
|
40
|
-
def self.infer_from_spec(spec, host_requires_frameworks: false)
|
41
|
-
if host_requires_frameworks
|
42
|
-
root_spec = spec && spec.root
|
43
|
-
if root_spec && root_spec.static_framework
|
44
|
-
static_framework
|
45
|
-
else
|
46
|
-
dynamic_framework
|
47
|
-
end
|
48
|
-
else
|
49
|
-
static_library
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# @return [BuildType] the build type for a dynamic library
|
54
|
-
#
|
55
|
-
def self.dynamic_library
|
56
|
-
new(:linkage => :dynamic, :packaging => :library)
|
57
|
-
end
|
58
|
-
|
59
|
-
# @return [BuildType] the build type for a static library
|
60
|
-
#
|
61
|
-
def self.static_library
|
62
|
-
new(:linkage => :static, :packaging => :library)
|
63
|
-
end
|
64
|
-
|
65
|
-
# @return [BuildType] the build type for a dynamic framework
|
66
|
-
#
|
67
|
-
def self.dynamic_framework
|
68
|
-
new(:linkage => :dynamic, :packaging => :framework)
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [BuildType] the build type for a static framework
|
72
|
-
#
|
73
|
-
def self.static_framework
|
74
|
-
new(:linkage => :static, :packaging => :framework)
|
75
|
-
end
|
76
|
-
|
77
|
-
# @return [Boolean] whether the target is built dynamically
|
78
|
-
#
|
79
|
-
def dynamic?
|
80
|
-
linkage == :dynamic
|
81
|
-
end
|
82
|
-
|
83
|
-
# @return [Boolean] whether the target is built statically
|
84
|
-
#
|
85
|
-
def static?
|
86
|
-
linkage == :static
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [Boolean] whether the target is built as a framework
|
90
|
-
#
|
91
|
-
def framework?
|
92
|
-
packaging == :framework
|
93
|
-
end
|
94
|
-
|
95
|
-
# @return [Boolean] whether the target is built as a library
|
96
|
-
#
|
97
|
-
def library?
|
98
|
-
packaging == :library
|
99
|
-
end
|
100
|
-
|
101
|
-
# @return [Boolean] whether the target is built as a dynamic framework
|
102
|
-
#
|
103
|
-
def dynamic_framework?
|
104
|
-
dynamic? && framework?
|
105
|
-
end
|
106
|
-
|
107
|
-
# @return [Boolean] whether the target is built as a dynamic library
|
108
|
-
#
|
109
|
-
def dynamic_library?
|
110
|
-
dynamic? && library?
|
111
|
-
end
|
112
|
-
|
113
|
-
# @return [Boolean] whether the target is built as a static framework
|
114
|
-
#
|
115
|
-
def static_framework?
|
116
|
-
static? && framework?
|
117
|
-
end
|
118
|
-
|
119
|
-
# @return [Boolean] whether the target is built as a static library
|
120
|
-
#
|
121
|
-
def static_library?
|
122
|
-
static? && library?
|
123
|
-
end
|
124
|
-
|
125
|
-
def to_s
|
126
|
-
"#{linkage} #{packaging}"
|
127
|
-
end
|
128
|
-
|
129
|
-
def inspect
|
130
|
-
"#<#{self.class} linkage=#{linkage} packaging=#{packaging}>"
|
131
|
-
end
|
132
|
-
|
133
|
-
def ==(other)
|
134
|
-
linkage == other.linkage &&
|
135
|
-
packaging == other.packaging
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|