cocoapods-spm 0.1.5 → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 815b5b5db4530e4fd685d421cd33fb1cde41b29abfa667aa0ba9d3c1b61f8ef0
4
- data.tar.gz: 6befd92a1d7528b4da4a5f62a1f8676c8bfb8be0dd5cc65d8c134a7df01d5b01
3
+ metadata.gz: e1e1e2bd492fb8080c1d1d0ab60b4abe580d3540559ba11085b0b2a93826de54
4
+ data.tar.gz: 1a30fc92b2e7cdc5082f6fea26635f55345a9ae08d835450e66041028b862036
5
5
  SHA512:
6
- metadata.gz: abf5bf865306d931a1fbe53d230d17d80f62a1813a96b199c902c9f7da9dfc7ecbfff44eac5a3c7043ca73f856d66225c94f38d6ca5cf634f3b475d29f4a5476
7
- data.tar.gz: 87e9e3935e947420740e3bdbd2d4c8ca0f36c8ad955a9ab15b2d7756c6bf58dc37aa7a3b9378df75b4db60b30c2e1e1a8b666b19d547cbe5216c907a0f89607a
6
+ metadata.gz: f7941760c3ec1e4be209ba35108e80db527218f6862f1fd4ffa87cbfde60688bd9e1aa735193f2018abd77593d0e8c47bfe652a60c577391a758cff7b47c8ccb
7
+ data.tar.gz: 21df8075d35796d309ed868cbfe7f07b53c57c325c3e3a298b7eabab3239d658805a54d291ed6f9fdf3bc06605210940f55f636c6e362e1932e828e72ad77985
@@ -0,0 +1 @@
1
+ require_relative "rb26"
@@ -0,0 +1,14 @@
1
+ module Enumerable
2
+ unless method_defined?(:filter_map)
3
+ def filter_map
4
+ return enum_for(:filter_map) unless block_given?
5
+
6
+ result = []
7
+ each do |element|
8
+ value = yield(element)
9
+ result << value if value
10
+ end
11
+ result
12
+ end
13
+ end
14
+ end
@@ -49,6 +49,10 @@ module Pod
49
49
  end
50
50
  end
51
51
 
52
+ def platforms
53
+ @platforms ||= target_definition_list.filter_map { |d| d.platform&.name }.uniq || [:ios]
54
+ end
55
+
52
56
  private
53
57
 
54
58
  def prepare_macro_pod_dir(name, requirement)
@@ -55,6 +55,10 @@ module Pod
55
55
  @linking_opts.fetch(:use_default_xcode_linking, false)
56
56
  end
57
57
 
58
+ def should_exclude_from_target?(target_name)
59
+ @linking_opts.fetch(:exclude_from_targets, []).include?(target_name.delete_prefix('Pods-'))
60
+ end
61
+
58
62
  def linker_flags
59
63
  @linking_opts[:linker_flags] || []
60
64
  end
@@ -33,7 +33,7 @@ module Pod
33
33
 
34
34
  def add_spm_products_to_targets
35
35
  pods_project.targets.each do |target|
36
- @spm_resolver.result.spm_dependencies_by_target[target.name].to_a.each do |dep|
36
+ @spm_resolver.result.spm_dependencies_for(target).each do |dep|
37
37
  pkg_ref = spm_pkg_refs[dep.pkg.name]
38
38
  target_dep_ref = pkg_ref.create_target_dependency_ref(dep.product)
39
39
  target.dependencies << target_dep_ref
@@ -47,7 +47,7 @@ module Pod
47
47
  perform_settings_update(
48
48
  update_targets: lambda do |target, _, _|
49
49
  {
50
- "SOURCE_PACKAGES_CHECKOUTS_DIR" => "${PODS_CONFIGURATION_BUILD_DIR}/../../../SourcePackages/checkouts",
50
+ "SOURCE_PACKAGES_CHECKOUTS_DIR" => "${BUILD_ROOT}/../../SourcePackages/checkouts",
51
51
  "FRAMEWORK_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}/PackageFrameworks\"",
52
52
  "LIBRARY_SEARCH_PATHS" => "\"${PODS_CONFIGURATION_BUILD_DIR}\"",
53
53
  "SWIFT_INCLUDE_PATHS" => "$(PODS_CONFIGURATION_BUILD_DIR)",
@@ -1,3 +1,4 @@
1
+ require "cocoapods-spm/compatibility/all"
1
2
  require "cocoapods-spm/helpers/io"
2
3
  require "cocoapods-spm/helpers/patch"
3
4
  require "cocoapods-spm/config"
@@ -28,7 +28,9 @@ module Pod
28
28
  @result.spm_dependencies_by_target.values.flatten.uniq(&:product).each do |dep|
29
29
  next if dep.pkg.use_default_xcode_linking?
30
30
 
31
- project_pkgs.resolve_recursive_targets_of(dep.pkg.name, dep.product)
31
+ @podfile.platforms.each do |platform|
32
+ project_pkgs.resolve_recursive_targets_of(dep.pkg.name, dep.product, platform: platform)
33
+ end
32
34
  end
33
35
  end
34
36
  end
@@ -31,12 +31,15 @@ module Pod
31
31
  end
32
32
 
33
33
  def spm_dependencies_for(target)
34
- @spm_dependencies_by_target[target.to_s].to_a
34
+ filtered_dependencies = @spm_dependencies_by_target[spec_name_of(target)]&.reject do |dep|
35
+ dep.pkg&.should_exclude_from_target?(target.name)
36
+ end
37
+ filtered_dependencies.to_a
35
38
  end
36
39
 
37
40
  def spm_targets_for(target, exclude_default_xcode_linking: true)
38
41
  targets = spm_dependencies_for(target).flat_map do |d|
39
- project_pkgs.resolve_recursive_targets_of(d.pkg.name, d.product)
42
+ project_pkgs.resolve_recursive_targets_of(d.pkg.name, d.product, platform: target.platform.name)
40
43
  end.uniq(&:name)
41
44
  return targets.reject(&:use_default_xcode_linking?) if exclude_default_xcode_linking
42
45
 
@@ -49,6 +52,21 @@ module Pod
49
52
  spm_pkgs_for(target).flat_map(&:linker_flags)
50
53
  ).uniq
51
54
  end
55
+
56
+ private
57
+
58
+ def spec_name_of(target)
59
+ # In case of multi-platforms, the target name might contains the platform (ex. Logger-iOS, Logger-macOS)
60
+ # We need to strip the platform suffix out
61
+ return target.name if @spm_dependencies_by_target.key?(target.name)
62
+ return target.root_spec.name if target.is_a?(Pod::PodTarget)
63
+ return target.name if target.is_a?(Pod::AggregateTarget)
64
+
65
+ cmps = target.name.split("-")
66
+ return cmps[...-1].join("-") if ["iOS", "macOS", "watchOS", "tvOS"].include?(cmps[-1])
67
+
68
+ target.name
69
+ end
52
70
  end
53
71
  end
54
72
  end
@@ -16,7 +16,7 @@ module Pod
16
16
  private
17
17
 
18
18
  def resolve_spm_pkgs
19
- @result.spm_pkgs = @podfile.target_definition_list.flat_map(&:spm_pkgs).uniq
19
+ @result.spm_pkgs = @podfile.target_definition_list.flat_map(&:spm_pkgs).uniq(&:name)
20
20
  end
21
21
 
22
22
  def resolve_spm_dependencies_by_target
@@ -5,7 +5,7 @@ module Pod
5
5
 
6
6
  def initialize(podfile)
7
7
  @podfile = podfile
8
- @spm_pkgs = @podfile.target_definition_list.flat_map(&:spm_pkgs).uniq
8
+ @spm_pkgs = @podfile.target_definition_list.flat_map(&:spm_pkgs).uniq(&:name)
9
9
  end
10
10
 
11
11
  def prepare
@@ -12,9 +12,10 @@ module Pod
12
12
  load
13
13
  end
14
14
 
15
- def resolve_recursive_targets_of(pkg_name, product_name)
15
+ def resolve_recursive_targets_of(pkg_name, product_name, platform: nil)
16
16
  @recursive_targets_cache ||= {}
17
- return @recursive_targets_cache[product_name] if @recursive_targets_cache.key(product_name)
17
+ @recursive_targets_cache[platform] ||= {}
18
+ return @recursive_targets_cache[platform][product_name] if @recursive_targets_cache[platform].key(product_name)
18
19
 
19
20
  res = []
20
21
  to_visit = pkg_desc_of(pkg_name).targets_of_product(product_name)
@@ -23,9 +24,9 @@ module Pod
23
24
  res << target
24
25
  # Exclude macros as they wont be linked to the project's binary
25
26
  # https://github.com/trinhngocthuyen/cocoapods-spm/issues/107
26
- to_visit += target.resolve_dependencies(@pkg_desc_cache).reject(&:macro?)
27
+ to_visit += target.resolve_dependencies(@pkg_desc_cache, platform: platform).reject(&:macro?)
27
28
  end
28
- @recursive_targets_cache[product_name] = res.uniq(&:name)
29
+ @recursive_targets_cache[platform][product_name] = res.uniq(&:name)
29
30
  end
30
31
 
31
32
  def pkg_desc_of(name)
@@ -102,12 +102,13 @@ module Pod
102
102
  end
103
103
  end
104
104
 
105
- def resolve_dependencies(pkg_desc_cache)
105
+ def resolve_dependencies(pkg_desc_cache, platform: nil)
106
106
  raw.fetch("dependencies", []).flat_map do |hash|
107
107
  type = ["byName", "target", "product"].find { |k| hash.key?(k) }
108
108
  if type.nil?
109
109
  raise Informative, "Unexpected dependency type. Must be either `byName`, `target`, or `product`."
110
110
  end
111
+ next [] unless match_platform?(hash[type][-1], platform)
111
112
 
112
113
  name = hash[type][0]
113
114
  pkg_name = hash.key?("product") ? hash["product"][1] : self.pkg_name
@@ -148,6 +149,17 @@ module Pod
148
149
  def use_default_xcode_linking?
149
150
  root.use_default_xcode_linking?
150
151
  end
152
+
153
+ private
154
+
155
+ def match_platform?(condition, platform)
156
+ # Consider matching if there's no condition
157
+ return true if condition.nil? || !condition.key?("platformNames")
158
+
159
+ # macos is called osx in Cocoapods.
160
+ platform_name = platform.to_s == 'osx' ? 'macos' : platform.to_s
161
+ condition["platformNames"].include?(platform_name)
162
+ end
151
163
  end
152
164
  end
153
165
  end
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.5
4
+ version: 0.1.6
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-08-31 00:00:00.000000000 Z
11
+ date: 2024-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -38,6 +38,8 @@ files:
38
38
  - lib/cocoapods-spm/command/macro/fetch.rb
39
39
  - lib/cocoapods-spm/command/macro/prebuild.rb
40
40
  - lib/cocoapods-spm/command/spm.rb
41
+ - lib/cocoapods-spm/compatibility/all.rb
42
+ - lib/cocoapods-spm/compatibility/rb26.rb
41
43
  - lib/cocoapods-spm/config.rb
42
44
  - lib/cocoapods-spm/config/pod.rb
43
45
  - lib/cocoapods-spm/config/project.rb