cocoapods-spm 0.1.7 → 0.1.9

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: c4fe180c87aca4c93c0309f995109ef39507f5e5f82183a1e6e15d247e153a3b
4
- data.tar.gz: 8f913beccd589a820ec92b4a5ef6af7c0373f3b878cd3e78eac18720e3383b8b
3
+ metadata.gz: 24612d253fbaf74d473abe53ca7b3293e06b5dda91b1ef52fd2795f96d5a3a97
4
+ data.tar.gz: 1394cfc0a85d5378fab7929926f1f65acd7635a9236f427e2f746b4bc973a145
5
5
  SHA512:
6
- metadata.gz: '064788c5e4bbc60ebbcf3bb3f9334c8f30a75d1102c26181299978894e42554f9430adda3d1e7c8b17c9572f146e9a6fa3a0179f20db7be7cf1f95e9c31601b8'
7
- data.tar.gz: 53adc8060fe965e1ef8566a8fbf1844ac9adbf3adddd93fcab6e52afd4750adb97273379247bbb3d13e5c5492622b2763c9b7e4682ee365cf96f706076ed7180
6
+ metadata.gz: b9a897b591b5265b2ab5fc760261fd4d2bc319d26e23a4dcf603e51f8dd40103b0d67c3ee6fbc53749727373d748ae8b0252ad2b2e74d4d972ed6f0716cc7267
7
+ data.tar.gz: 062b87214c04d88dc26fbc871951006eb69c65055410a7537c03c5f7177e039adf2cf93f6ece2d718e51dd8eec66d392acd8462157dbd5634ef6f4347d587221
@@ -9,6 +9,17 @@ module Pod
9
9
  def macro_pods
10
10
  pod_config.podfile.macro_pods
11
11
  end
12
+
13
+ def local_macro_pod?(name)
14
+ !local_macro_pod_dir(name).nil?
15
+ end
16
+
17
+ def local_macro_pod_dir(name)
18
+ opts = macro_pods.fetch(name, {})
19
+ return Path(opts[:podspec]).dirname if opts.key?(:podspec)
20
+
21
+ Pathname(opts[:path]) if opts.key?(:path)
22
+ end
12
23
  end
13
24
 
14
25
  attr_accessor :dsl_config, :cli_config
@@ -0,0 +1,7 @@
1
+ module Pod
2
+ class Installer
3
+ def native_targets
4
+ pods_project.targets + pod_target_subprojects.flat_map(&:targets)
5
+ end
6
+ end
7
+ end
@@ -7,7 +7,7 @@ module Pod
7
7
  attr_accessor :spm_resolver
8
8
 
9
9
  def config_cocoapods_spm(options)
10
- SPM::Config.instance.dsl_config = options
10
+ SPM::Config.instance.dsl_config.merge!(options)
11
11
  end
12
12
 
13
13
  def macro_pods
@@ -56,7 +56,7 @@ module Pod
56
56
  private
57
57
 
58
58
  def prepare_macro_pod_dir(name, requirement)
59
- link = requirement[:git]
59
+ link = requirement[:git] || "N/A"
60
60
  podspec_content = <<~HEREDOC
61
61
  Pod::Spec.new do |s|
62
62
  s.name = "#{name}"
@@ -6,6 +6,7 @@ module Pod
6
6
 
7
7
  src = Pathname.new(src) unless src.is_a?(Pathname)
8
8
  dst = Pathname.new(dst) unless dst.is_a?(Pathname)
9
+ dst.dirname.mkpath unless dst.dirname.exist?
9
10
  dst.delete if dst.exist?
10
11
  File.symlink(src.absolute? ? src : src.realpath, dst)
11
12
  end
@@ -30,6 +30,14 @@ module Pod
30
30
  @analysis_result.targets
31
31
  end
32
32
 
33
+ def pod_target_subprojects
34
+ @context.pod_target_subprojects
35
+ end
36
+
37
+ def projects_to_integrate
38
+ [pods_project] + pod_target_subprojects
39
+ end
40
+
33
41
  def user_build_configurations
34
42
  @user_build_configurations ||= (pod_targets + aggregate_targets)[0].user_build_configurations
35
43
  end
@@ -8,37 +8,21 @@ module Pod
8
8
  def run
9
9
  return if @spm_resolver.result.spm_pkgs.empty?
10
10
 
11
- add_spm_pkg_refs_to_project
12
- add_spm_products_to_targets
13
- pods_project.save
14
- end
15
-
16
- private
17
-
18
- def spm_pkg_refs
19
- @spm_pkg_refs ||= {}
20
- end
21
-
22
- def add_spm_pkg_refs_to_project
23
- @spm_pkg_refs = @spm_resolver.result.spm_pkgs.to_h do |pkg|
24
- pkg_ref = pkg.create_pkg_ref(pods_project)
25
- pods_project.root_object.package_references << pkg_ref
26
- [pkg.name, pkg_ref]
27
- end
28
- end
29
-
30
- def spm_pkgs_by_target
31
- @spm_pkgs_by_target ||= {}
32
- end
33
-
34
- def add_spm_products_to_targets
35
- pods_project.targets.each do |target|
36
- @spm_resolver.result.spm_dependencies_for(target).each do |dep|
37
- pkg_ref = spm_pkg_refs[dep.pkg.name]
38
- target_dep_ref = pkg_ref.create_target_dependency_ref(dep.product)
39
- target.dependencies << target_dep_ref
40
- target.package_product_dependencies << target_dep_ref.product_ref if dep.pkg.use_default_xcode_linking?
11
+ projects_to_integrate.compact.each do |project|
12
+ spm_pkg_refs = {}
13
+ project.targets.each do |target|
14
+ @spm_resolver.result.spm_dependencies_for(target).each do |dep|
15
+ pkg_ref = dep.pkg.create_pkg_ref(project)
16
+ target_dep_ref = pkg_ref.create_target_dependency_ref(dep.product)
17
+ target.dependencies << target_dep_ref
18
+ target.package_product_dependencies << target_dep_ref.product_ref if dep.pkg.use_default_xcode_linking?
19
+ spm_pkg_refs.store(dep.pkg.name, pkg_ref)
20
+ end
21
+ end
22
+ spm_pkg_refs.each_value do |pkg_ref|
23
+ project.root_object.package_references << pkg_ref
41
24
  end
25
+ project.save
42
26
  end
43
27
  end
44
28
  end
@@ -1,3 +1,4 @@
1
+ require "cocoapods-spm/helpers/io"
1
2
  require "cocoapods-spm/macro/metadata"
2
3
  require_relative "config"
3
4
 
@@ -16,8 +17,7 @@ module Pod
16
17
  end
17
18
 
18
19
  def run
19
- UI.puts "Fetching macro #{name}...".magenta
20
- download_macro_source
20
+ prepare_macro_source
21
21
  macro_dir = spm_config.macro_root_dir / name
22
22
  macro_downloaded_dir = spm_config.macro_downloaded_root_dir / name
23
23
  FileUtils.copy_entry(
@@ -29,6 +29,10 @@ module Pod
29
29
 
30
30
  private
31
31
 
32
+ def local?
33
+ local_macro_pod?(name)
34
+ end
35
+
32
36
  def generate_metadata
33
37
  raise "Package.swift not exist in #{macro_downloaded_dir}" \
34
38
  unless (macro_downloaded_dir / "Package.swift").exist?
@@ -37,7 +41,23 @@ module Pod
37
41
  metadata_path.write(raw)
38
42
  end
39
43
 
44
+ def prepare_macro_source
45
+ if local?
46
+ symlink_local_macro_source
47
+ else
48
+ download_macro_source
49
+ end
50
+ end
51
+
52
+ def symlink_local_macro_source
53
+ UI.message "Creating symlink to local macro source: #{name}..."
54
+ # For local macro pod, just need to copy local pod dir to downloaded sandbox,
55
+ # or create a symlink .spm.pods/macros/.downloaded/FOO -> LocalPods/FOO
56
+ IOUtils.symlink(local_macro_pod_dir(name), macro_downloaded_dir)
57
+ end
58
+
40
59
  def download_macro_source
60
+ UI.puts "Downloading source for macro: #{name}...".magenta
41
61
  @specs_by_platform ||= @podfile.root_target_definitions.to_h do |definition|
42
62
  spec = Pod::Spec.from_file(spm_config.macro_root_dir / name / "#{name}.podspec")
43
63
  [definition.platform, [spec]]
@@ -27,7 +27,7 @@ module Pod
27
27
  end
28
28
 
29
29
  def install_macro_pod!
30
- fetcher.run
30
+ fetcher.run if local_macro_pod?(name) || !fetcher.metadata_path.exist?
31
31
  prebuilder.run
32
32
  end
33
33
  end
@@ -23,17 +23,25 @@ module Pod
23
23
  config = spm_config.macro_config
24
24
  impl_module_name = metadata.macro_impl_name
25
25
  prebuilt_binary = macro_prebuilt_dir / "#{impl_module_name}-#{config}"
26
- return if spm_config.dont_prebuild_macros_if_exist? && prebuilt_binary.exist?
26
+ if spm_config.dont_prebuild_macros_if_exist? && prebuilt_binary.exist?
27
+ return UI.message "Macro binary exists at #{prebuilt_binary} -> Skip prebuilding macro"
28
+ end
27
29
 
28
30
  UI.section "Building macro implementation: #{impl_module_name} (#{config})...".green do
29
31
  Dir.chdir(macro_downloaded_dir) do
32
+ swift! ["--version"]
30
33
  swift! ["build", "-c", config, "--product", impl_module_name]
31
34
  end
32
35
  end
33
36
 
34
37
  prebuilt_binary.parent.mkpath
38
+ macro_downloaded_build_config_dir = macro_downloaded_dir / ".build" / config
39
+ macro_build_binary_file_path = macro_downloaded_build_config_dir / impl_module_name
40
+ unless macro_build_binary_file_path.exist?
41
+ macro_build_binary_file_path = macro_downloaded_build_config_dir / "#{impl_module_name}-tool"
42
+ end
35
43
  FileUtils.copy_entry(
36
- macro_downloaded_dir / ".build" / config / impl_module_name,
44
+ macro_build_binary_file_path,
37
45
  prebuilt_binary
38
46
  )
39
47
  end
@@ -1,8 +1,10 @@
1
+ require "pry" if ENV["COCOAPODS_IMPORT_PRY"] == "true"
1
2
  require "cocoapods-spm/compatibility/all"
2
3
  require "cocoapods-spm/helpers/io"
3
4
  require "cocoapods-spm/helpers/patch"
4
5
  require "cocoapods-spm/config"
5
6
  require "cocoapods-spm/executables"
7
+ require "cocoapods-spm/def/installer"
6
8
  require "cocoapods-spm/def/target_definition"
7
9
  require "cocoapods-spm/def/podfile"
8
10
  require "cocoapods-spm/def/spec"
@@ -34,6 +34,17 @@ module Pod
34
34
  run_spm_post_integrate_hooks
35
35
  end
36
36
 
37
+ patch_method :sandbox_state do
38
+ state = origin_sandbox_state
39
+ # NOTE: For macro pods, we force-trigger their source installers even in incremental installations.
40
+ # This is done by altering the `sandbox_state` & marking them as `added`
41
+ spm_config.all_macros.each do |name|
42
+ %i[unchanged changed deleted].each { |key| state.send(key).delete(name) }
43
+ state.added << (name)
44
+ end
45
+ state
46
+ end
47
+
37
48
  private
38
49
 
39
50
  def hook_options
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.7
4
+ version: 0.1.9
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-25 00:00:00.000000000 Z
11
+ date: 2024-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -44,6 +44,7 @@ files:
44
44
  - lib/cocoapods-spm/config/pod.rb
45
45
  - lib/cocoapods-spm/config/project.rb
46
46
  - lib/cocoapods-spm/config/spm.rb
47
+ - lib/cocoapods-spm/def/installer.rb
47
48
  - lib/cocoapods-spm/def/podfile.rb
48
49
  - lib/cocoapods-spm/def/spec.rb
49
50
  - lib/cocoapods-spm/def/spm_dependency.rb