cocoapods-spm 0.1.3 → 0.1.5
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/lib/cocoapods-spm/command/clean.rb +31 -0
- data/lib/cocoapods-spm/command/macro/deprecated.rb +35 -0
- data/lib/cocoapods-spm/command/macro/fetch.rb +33 -0
- data/lib/cocoapods-spm/command/macro/prebuild.rb +37 -0
- data/lib/cocoapods-spm/command/macro.rb +14 -0
- data/lib/cocoapods-spm/command/spm.rb +2 -2
- data/lib/cocoapods-spm/config/spm.rb +11 -3
- data/lib/cocoapods-spm/def/podfile.rb +9 -5
- data/lib/cocoapods-spm/def/spm_dependency.rb +3 -1
- data/lib/cocoapods-spm/def/spm_package.rb +3 -1
- data/lib/cocoapods-spm/helpers/io.rb +13 -0
- data/lib/cocoapods-spm/helpers/patch.rb +14 -0
- data/lib/cocoapods-spm/hooks/helpers/update_script.rb +61 -0
- data/lib/cocoapods-spm/hooks/post_integrate/5.update_settings.rb +24 -35
- data/lib/cocoapods-spm/hooks/post_integrate/6.update_embed_frameworks_script.rb +14 -36
- data/lib/cocoapods-spm/hooks/post_integrate/7.update_copy_resources_script.rb +33 -0
- data/lib/cocoapods-spm/macro/metadata.rb +11 -0
- data/lib/cocoapods-spm/macro/prebuilder.rb +7 -6
- data/lib/cocoapods-spm/main.rb +2 -1
- data/lib/cocoapods-spm/patch/aggregate_target.rb +15 -3
- data/lib/cocoapods-spm/patch/installer.rb +6 -7
- data/lib/cocoapods-spm/resolver/recursive_target_resolver.rb +37 -0
- data/lib/cocoapods-spm/resolver/result.rb +27 -23
- data/lib/cocoapods-spm/resolver/umbrella_package.rb +9 -4
- data/lib/cocoapods-spm/resolver.rb +6 -8
- data/lib/cocoapods-spm/swift/package/base.rb +54 -0
- data/lib/cocoapods-spm/swift/package/dependency.rb +27 -0
- data/lib/cocoapods-spm/swift/package/description.rb +76 -0
- data/lib/cocoapods-spm/swift/package/product.rb +17 -0
- data/lib/cocoapods-spm/swift/package/project_packages.rb +58 -0
- data/lib/cocoapods-spm/swift/package/resources.rb +17 -0
- data/lib/cocoapods-spm/swift/package/target.rb +154 -0
- metadata +20 -7
- data/lib/cocoapods-spm/command/fetch.rb +0 -31
- data/lib/cocoapods-spm/command/prebuild.rb +0 -35
- data/lib/cocoapods-spm/metadata.rb +0 -50
- data/lib/cocoapods-spm/resolver/product.rb +0 -31
- data/lib/cocoapods-spm/resolver/product_dep_resolver.rb +0 -134
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-spm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thuyen Trinh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -32,8 +32,11 @@ extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
34
|
- lib/cocoapods-spm.rb
|
35
|
-
- lib/cocoapods-spm/command/
|
36
|
-
- lib/cocoapods-spm/command/
|
35
|
+
- lib/cocoapods-spm/command/clean.rb
|
36
|
+
- lib/cocoapods-spm/command/macro.rb
|
37
|
+
- lib/cocoapods-spm/command/macro/deprecated.rb
|
38
|
+
- lib/cocoapods-spm/command/macro/fetch.rb
|
39
|
+
- lib/cocoapods-spm/command/macro/prebuild.rb
|
37
40
|
- lib/cocoapods-spm/command/spm.rb
|
38
41
|
- lib/cocoapods-spm/config.rb
|
39
42
|
- lib/cocoapods-spm/config/pod.rb
|
@@ -46,24 +49,34 @@ files:
|
|
46
49
|
- lib/cocoapods-spm/def/target_definition.rb
|
47
50
|
- lib/cocoapods-spm/def/xcodeproj.rb
|
48
51
|
- lib/cocoapods-spm/executables.rb
|
52
|
+
- lib/cocoapods-spm/helpers/io.rb
|
53
|
+
- lib/cocoapods-spm/helpers/patch.rb
|
49
54
|
- lib/cocoapods-spm/hooks/base.rb
|
55
|
+
- lib/cocoapods-spm/hooks/helpers/update_script.rb
|
50
56
|
- lib/cocoapods-spm/hooks/post_integrate/1.add_spm_pkgs.rb
|
51
57
|
- lib/cocoapods-spm/hooks/post_integrate/5.update_settings.rb
|
52
58
|
- lib/cocoapods-spm/hooks/post_integrate/6.update_embed_frameworks_script.rb
|
59
|
+
- lib/cocoapods-spm/hooks/post_integrate/7.update_copy_resources_script.rb
|
53
60
|
- lib/cocoapods-spm/macro/fetcher.rb
|
61
|
+
- lib/cocoapods-spm/macro/metadata.rb
|
54
62
|
- lib/cocoapods-spm/macro/pod_installer.rb
|
55
63
|
- lib/cocoapods-spm/macro/prebuilder.rb
|
56
64
|
- lib/cocoapods-spm/main.rb
|
57
|
-
- lib/cocoapods-spm/metadata.rb
|
58
65
|
- lib/cocoapods-spm/patch/aggregate_target.rb
|
59
66
|
- lib/cocoapods-spm/patch/installer.rb
|
60
67
|
- lib/cocoapods-spm/resolver.rb
|
61
|
-
- lib/cocoapods-spm/resolver/
|
62
|
-
- lib/cocoapods-spm/resolver/product_dep_resolver.rb
|
68
|
+
- lib/cocoapods-spm/resolver/recursive_target_resolver.rb
|
63
69
|
- lib/cocoapods-spm/resolver/result.rb
|
64
70
|
- lib/cocoapods-spm/resolver/target_dep_resolver.rb
|
65
71
|
- lib/cocoapods-spm/resolver/umbrella_package.rb
|
66
72
|
- lib/cocoapods-spm/resolver/validator.rb
|
73
|
+
- lib/cocoapods-spm/swift/package/base.rb
|
74
|
+
- lib/cocoapods-spm/swift/package/dependency.rb
|
75
|
+
- lib/cocoapods-spm/swift/package/description.rb
|
76
|
+
- lib/cocoapods-spm/swift/package/product.rb
|
77
|
+
- lib/cocoapods-spm/swift/package/project_packages.rb
|
78
|
+
- lib/cocoapods-spm/swift/package/resources.rb
|
79
|
+
- lib/cocoapods-spm/swift/package/target.rb
|
67
80
|
- lib/cocoapods_plugin.rb
|
68
81
|
homepage: https://github.com/trinhngocthuyen/cocoapods-spm
|
69
82
|
licenses:
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "cocoapods-spm/macro/fetcher"
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
class Command
|
5
|
-
class Spm < Command
|
6
|
-
class Fetch < Spm
|
7
|
-
self.summary = "Fetch macros"
|
8
|
-
def self.options
|
9
|
-
[
|
10
|
-
["--all", "Prebuild all macros"],
|
11
|
-
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
12
|
-
].concat(super)
|
13
|
-
end
|
14
|
-
|
15
|
-
def initialize(argv)
|
16
|
-
super
|
17
|
-
update_cli_config(
|
18
|
-
all: argv.flag?("all"),
|
19
|
-
macros: argv.option("macros", "").split(",")
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
def run
|
24
|
-
spm_config.macros.each do |name|
|
25
|
-
SPM::MacroFetcher.new(name: name, can_cache: true).run
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "cocoapods-spm/macro/prebuilder"
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
class Command
|
5
|
-
class Spm < Command
|
6
|
-
class Prebuild < Spm
|
7
|
-
self.summary = "Prebuild macros"
|
8
|
-
def self.options
|
9
|
-
[
|
10
|
-
["--all", "Prebuild all macros"],
|
11
|
-
["--macros=foo", "Macros to prebuild, separated by comma (,)"],
|
12
|
-
["--config=foo", "Config (debug/release) to prebuild macros"],
|
13
|
-
].concat(super)
|
14
|
-
end
|
15
|
-
|
16
|
-
def initialize(argv)
|
17
|
-
super
|
18
|
-
update_cli_config(
|
19
|
-
all: argv.flag?("all"),
|
20
|
-
macros: argv.option("macros", "").split(","),
|
21
|
-
config: argv.option("config"),
|
22
|
-
dont_prebuild_macros: false,
|
23
|
-
dont_prebuild_macros_if_exist: false
|
24
|
-
)
|
25
|
-
end
|
26
|
-
|
27
|
-
def run
|
28
|
-
spm_config.macros.each do |name|
|
29
|
-
SPM::MacroPrebuilder.new(name: name).run
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require "json"
|
2
|
-
|
3
|
-
module Pod
|
4
|
-
module SPM
|
5
|
-
class Metadata
|
6
|
-
attr_reader :raw
|
7
|
-
|
8
|
-
def initialize(raw)
|
9
|
-
@raw = raw
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.from_s(str)
|
13
|
-
new(JSON.parse(str))
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.from_file(path)
|
17
|
-
from_s(File.read(path))
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.for_pod(name)
|
21
|
-
from_file(Config.instance.macro_root_dir / name / "metadata.json")
|
22
|
-
end
|
23
|
-
|
24
|
-
def [](key)
|
25
|
-
raw[key]
|
26
|
-
end
|
27
|
-
|
28
|
-
def targets
|
29
|
-
raw["targets"]
|
30
|
-
end
|
31
|
-
|
32
|
-
def products
|
33
|
-
raw["products"]
|
34
|
-
end
|
35
|
-
|
36
|
-
def product_names_of_target(name)
|
37
|
-
names = products.select { |h| h["targets"].include?(name) }.map { |h| h["name"] }
|
38
|
-
names.empty? ? [name] : names
|
39
|
-
end
|
40
|
-
|
41
|
-
def targets_of_type(type)
|
42
|
-
targets.select { |t| t["type"] == type }
|
43
|
-
end
|
44
|
-
|
45
|
-
def macro_impl_name
|
46
|
-
targets_of_type("macro").first&.fetch("name")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
module SPM
|
3
|
-
class Resolver
|
4
|
-
class Product
|
5
|
-
attr_reader :pkg, :name, :linkage, :headers_path, :binary
|
6
|
-
|
7
|
-
alias binary? binary
|
8
|
-
|
9
|
-
def initialize(options = {})
|
10
|
-
@pkg = options[:pkg]
|
11
|
-
@name = options[:name]
|
12
|
-
@linkage = options.fetch(:linkage, :static)
|
13
|
-
@headers_path = options[:headers_path]
|
14
|
-
@binary = options[:binary]
|
15
|
-
end
|
16
|
-
|
17
|
-
def inspect
|
18
|
-
"#<#{self.class} #{pkg}/#{name}>"
|
19
|
-
end
|
20
|
-
|
21
|
-
def dynamic?
|
22
|
-
@linkage == :dynamic
|
23
|
-
end
|
24
|
-
|
25
|
-
def linked_as_framework?
|
26
|
-
dynamic? || binary?
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
module Pod
|
2
|
-
module SPM
|
3
|
-
class Resolver
|
4
|
-
class ProductDependencyResolver
|
5
|
-
require "cocoapods-spm/resolver/product"
|
6
|
-
|
7
|
-
include Config::Mixin
|
8
|
-
|
9
|
-
def initialize(podfile, result)
|
10
|
-
@podfile = podfile
|
11
|
-
@result = result
|
12
|
-
end
|
13
|
-
|
14
|
-
def resolve
|
15
|
-
generate_metadata
|
16
|
-
resolve_dynamic_products
|
17
|
-
resolve_binary_targets
|
18
|
-
resolve_headers_path_by_target
|
19
|
-
resolve_product_deps
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def generate_metadata
|
25
|
-
spm_config.pkg_checkouts_dir.glob("*").each do |dir|
|
26
|
-
next if dir.glob("Package*.swift").empty?
|
27
|
-
|
28
|
-
raw = Dir.chdir(dir) { `swift package dump-package` }
|
29
|
-
metadata = Metadata.from_s(raw)
|
30
|
-
write_metadata = lambda do |name|
|
31
|
-
(spm_config.pkg_metadata_dir / "#{name}.json").write(raw)
|
32
|
-
@result.metadata_cache[name] = metadata
|
33
|
-
end
|
34
|
-
|
35
|
-
pkg_name = metadata["name"]
|
36
|
-
pkg_slug = dir.basename.to_s
|
37
|
-
write_metadata.call(pkg_name)
|
38
|
-
write_metadata.call(pkg_slug) unless pkg_name == pkg_slug
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def resolve_dynamic_products
|
43
|
-
@dynamic_products ||= Set.new
|
44
|
-
@result.metadata_cache.each_value do |metadata|
|
45
|
-
metadata.products.each do |h|
|
46
|
-
library_types = h.fetch("type", {}).fetch("library", [])
|
47
|
-
@dynamic_products << h["name"] if library_types.include?("dynamic")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def resolve_binary_targets
|
53
|
-
@binary_targets ||= Set.new
|
54
|
-
@result.metadata_cache.each_value do |metadata|
|
55
|
-
metadata.targets.each do |h|
|
56
|
-
@binary_targets << h["name"] if h["type"] == "binary"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def resolve_headers_path_by_target
|
62
|
-
@headers_path_by_product ||= {}
|
63
|
-
@result.metadata_cache.each_value do |metadata|
|
64
|
-
metadata.targets.each do |h|
|
65
|
-
next unless h.key?("publicHeadersPath")
|
66
|
-
|
67
|
-
metadata.product_names_of_target(h["name"]).each do |name|
|
68
|
-
@headers_path_by_product[name] = h["publicHeadersPath"]
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def resolve_product_deps
|
75
|
-
@result.spm_dependencies_by_target.values.flatten.uniq(&:product).each do |dep|
|
76
|
-
next if dep.pkg.use_default_xcode_linking?
|
77
|
-
|
78
|
-
verify_product_exists_in_pkg(dep.pkg.name, dep.product)
|
79
|
-
product = create_product(dep.pkg.name, dep.product)
|
80
|
-
recursive_products_of(product)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def verify_product_exists_in_pkg(pkg, name)
|
85
|
-
return unless @result.metadata_of(pkg).products.find { |h| h["name"] == name }.nil?
|
86
|
-
|
87
|
-
raise Informative, "Package `#{pkg}` does not contain product named `#{name}`"
|
88
|
-
end
|
89
|
-
|
90
|
-
def recursive_products_of(product)
|
91
|
-
products = [product] + direct_products_of(product).flat_map do |child|
|
92
|
-
[child] + recursive_products_of(child)
|
93
|
-
end.uniq(&:name)
|
94
|
-
@result.spm_products[product.name] = products
|
95
|
-
products
|
96
|
-
end
|
97
|
-
|
98
|
-
def direct_products_of(product)
|
99
|
-
metadata = @result.metadata_of(product.pkg)
|
100
|
-
metadata
|
101
|
-
.products
|
102
|
-
.find { |h| h["name"] == product.name }
|
103
|
-
.to_h
|
104
|
-
.fetch("targets", [product.name])
|
105
|
-
.flat_map do |t|
|
106
|
-
metadata
|
107
|
-
.targets
|
108
|
-
.find { |h| h["name"] == t }
|
109
|
-
.fetch("dependencies", [])
|
110
|
-
.map { |h| product_from_hash(h, metadata) }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def product_from_hash(hash, metadata)
|
115
|
-
type = ["byName", "target", "product"].find { |k| hash.key?(k) }
|
116
|
-
name = hash[type][0] unless type.nil?
|
117
|
-
pkg = metadata["name"]
|
118
|
-
pkg = hash["product"][1] if hash.key?("product")
|
119
|
-
create_product(pkg, name)
|
120
|
-
end
|
121
|
-
|
122
|
-
def create_product(pkg, name)
|
123
|
-
Product.new(
|
124
|
-
pkg: pkg,
|
125
|
-
name: name,
|
126
|
-
linkage: @dynamic_products.include?(name) ? :dynamic : :static,
|
127
|
-
headers_path: @headers_path_by_product[name],
|
128
|
-
binary: @binary_targets.include?(name)
|
129
|
-
)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|