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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cocoapods-spm/command/clean.rb +31 -0
  3. data/lib/cocoapods-spm/command/macro/deprecated.rb +35 -0
  4. data/lib/cocoapods-spm/command/macro/fetch.rb +33 -0
  5. data/lib/cocoapods-spm/command/macro/prebuild.rb +37 -0
  6. data/lib/cocoapods-spm/command/macro.rb +14 -0
  7. data/lib/cocoapods-spm/command/spm.rb +2 -2
  8. data/lib/cocoapods-spm/config/spm.rb +11 -3
  9. data/lib/cocoapods-spm/def/podfile.rb +9 -5
  10. data/lib/cocoapods-spm/def/spm_dependency.rb +3 -1
  11. data/lib/cocoapods-spm/def/spm_package.rb +3 -1
  12. data/lib/cocoapods-spm/helpers/io.rb +13 -0
  13. data/lib/cocoapods-spm/helpers/patch.rb +14 -0
  14. data/lib/cocoapods-spm/hooks/helpers/update_script.rb +61 -0
  15. data/lib/cocoapods-spm/hooks/post_integrate/5.update_settings.rb +24 -35
  16. data/lib/cocoapods-spm/hooks/post_integrate/6.update_embed_frameworks_script.rb +14 -36
  17. data/lib/cocoapods-spm/hooks/post_integrate/7.update_copy_resources_script.rb +33 -0
  18. data/lib/cocoapods-spm/macro/metadata.rb +11 -0
  19. data/lib/cocoapods-spm/macro/prebuilder.rb +7 -6
  20. data/lib/cocoapods-spm/main.rb +2 -1
  21. data/lib/cocoapods-spm/patch/aggregate_target.rb +15 -3
  22. data/lib/cocoapods-spm/patch/installer.rb +6 -7
  23. data/lib/cocoapods-spm/resolver/recursive_target_resolver.rb +37 -0
  24. data/lib/cocoapods-spm/resolver/result.rb +27 -23
  25. data/lib/cocoapods-spm/resolver/umbrella_package.rb +9 -4
  26. data/lib/cocoapods-spm/resolver.rb +6 -8
  27. data/lib/cocoapods-spm/swift/package/base.rb +54 -0
  28. data/lib/cocoapods-spm/swift/package/dependency.rb +27 -0
  29. data/lib/cocoapods-spm/swift/package/description.rb +76 -0
  30. data/lib/cocoapods-spm/swift/package/product.rb +17 -0
  31. data/lib/cocoapods-spm/swift/package/project_packages.rb +58 -0
  32. data/lib/cocoapods-spm/swift/package/resources.rb +17 -0
  33. data/lib/cocoapods-spm/swift/package/target.rb +154 -0
  34. metadata +20 -7
  35. data/lib/cocoapods-spm/command/fetch.rb +0 -31
  36. data/lib/cocoapods-spm/command/prebuild.rb +0 -35
  37. data/lib/cocoapods-spm/metadata.rb +0 -50
  38. data/lib/cocoapods-spm/resolver/product.rb +0 -31
  39. 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.3
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-04-20 00:00:00.000000000 Z
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/fetch.rb
36
- - lib/cocoapods-spm/command/prebuild.rb
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/product.rb
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