cocoapods-spm 0.0.4 → 0.1.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/lib/cocoapods-spm/def/spm_package.rb +27 -10
- data/lib/cocoapods-spm/executables.rb +9 -0
- data/lib/cocoapods-spm/hooks/base.rb +6 -2
- data/lib/cocoapods-spm/hooks/{pre_integrate → post_integrate}/update_settings.rb +3 -3
- data/lib/cocoapods-spm/installer/analyzer.rb +14 -6
- data/lib/cocoapods-spm/installer/validator.rb +32 -0
- data/lib/cocoapods-spm/macro/prebuilder.rb +14 -8
- data/lib/cocoapods-spm/main.rb +3 -0
- data/lib/cocoapods-spm/metadata.rb +5 -1
- data/lib/cocoapods-spm/patch/installer.rb +0 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b31c9b35087187bc68aa7537abeb5fec4fb45e496c767382b8b8300ebadebf30
|
4
|
+
data.tar.gz: fa9dcb1a770f7aeb42db04739bc81ae9ff52c9e0fffe0368e7769f36e1b99977
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e644e4b8ba131f6eac0694ee25548e85f0782fadc794d68c944a18c969671f175aa14baaa0928b31cbbdbea0a8b3e14cd8ca01fb78022d8b4db1a66f676758e7
|
7
|
+
data.tar.gz: ea77387bf7c1e8ecb35fc00693450d0456b3535490561c4012397ab347127381719038d3ce6de88b529ba3966645d40d9d42adc8e5481763006f731f0c4e82d2
|
@@ -8,11 +8,28 @@ module Pod
|
|
8
8
|
|
9
9
|
def initialize(name, options = {})
|
10
10
|
@name = name
|
11
|
-
@
|
12
|
-
@
|
13
|
-
@
|
14
|
-
@
|
11
|
+
@_options = options
|
12
|
+
@relative_path = nil
|
13
|
+
@linkage = nil
|
14
|
+
@url = nil
|
15
|
+
@requirement = nil
|
16
|
+
parse_options(options)
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_options(options)
|
20
|
+
@url = options[:url] || options[:git]
|
15
21
|
@linkage = options[:linkage]
|
22
|
+
@relative_path = relative_path_from(options)
|
23
|
+
@requirement = requirement_from(options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def relative_path_from(options)
|
27
|
+
if (relative_path = options[:relative_path])
|
28
|
+
relative_path
|
29
|
+
elsif (path = options[:path])
|
30
|
+
path = Pathname(path).expand_path
|
31
|
+
path.relative_path_from(File.absolute_path("Pods")).to_s
|
32
|
+
end
|
16
33
|
end
|
17
34
|
|
18
35
|
def inspect
|
@@ -24,7 +41,7 @@ module Pod
|
|
24
41
|
end
|
25
42
|
|
26
43
|
def to_dependencies
|
27
|
-
if (products = @
|
44
|
+
if (products = @_options[:products])
|
28
45
|
products.map { |product| Dependency.new(@name, product: product, pkg: self) }
|
29
46
|
else
|
30
47
|
[Dependency.new(@name, pkg: self)]
|
@@ -47,16 +64,16 @@ module Pod
|
|
47
64
|
private
|
48
65
|
|
49
66
|
def requirement_from(options)
|
50
|
-
if
|
51
|
-
|
52
|
-
|
67
|
+
return if @relative_path
|
68
|
+
|
69
|
+
if (requirement = options[:requirement])
|
70
|
+
requirement
|
71
|
+
elsif (version = options.delete(:version) || options.delete(:tag))
|
53
72
|
{ :kind => "exactVersion", :version => version }
|
54
73
|
elsif (branch = options.delete(:branch))
|
55
74
|
{ :kind => "branch", :branch => branch }
|
56
75
|
elsif (revision = options.delete(:commit))
|
57
76
|
{ :kind => "revision", :revision => revision }
|
58
|
-
elsif options[:relative_path]
|
59
|
-
nil
|
60
77
|
else
|
61
78
|
raise "Missing requirement for SPM package: #{name}"
|
62
79
|
end
|
@@ -45,8 +45,9 @@ module Pod
|
|
45
45
|
require f
|
46
46
|
id = File.basename(f, ".*")
|
47
47
|
cls_name = "Pod::SPM::Hook::#{id.camelize}"
|
48
|
-
UI.message "Running hook: #{cls_name}"
|
49
|
-
|
48
|
+
UI.message "- Running hook: #{cls_name}" do
|
49
|
+
cls_name.constantize.new(context, options).run
|
50
|
+
end
|
50
51
|
end
|
51
52
|
end
|
52
53
|
|
@@ -61,6 +62,9 @@ module Pod
|
|
61
62
|
hash = update.call(target, setting, config)
|
62
63
|
setting.xcconfig.merge!(hash)
|
63
64
|
setting.generate.merge!(hash)
|
65
|
+
Installer::Xcode::PodsProjectGenerator::TargetInstallerHelper.update_changed_file(
|
66
|
+
setting, target.xcconfig_path(config)
|
67
|
+
)
|
64
68
|
end
|
65
69
|
|
66
70
|
pod_targets.each do |target|
|
@@ -32,7 +32,7 @@ module Pod
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def update_other_swift_flags
|
35
|
-
return
|
35
|
+
return if spm_config.all_macros.empty?
|
36
36
|
|
37
37
|
# For prebuilt macros
|
38
38
|
perform_settings_update(
|
@@ -43,7 +43,7 @@ module Pod
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def update_linker_flags
|
46
|
-
return
|
46
|
+
return if @spm_analyzer.spm_pkgs.empty?
|
47
47
|
|
48
48
|
# For packages to work in the main target
|
49
49
|
perform_settings_update(
|
@@ -65,7 +65,7 @@ module Pod
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def update_swift_include_paths
|
68
|
-
return
|
68
|
+
return if @spm_analyzer.spm_pkgs.empty?
|
69
69
|
|
70
70
|
# For macro packages
|
71
71
|
perform_settings_update(
|
@@ -1,11 +1,13 @@
|
|
1
|
+
require "cocoapods-spm/installer/validator"
|
2
|
+
|
1
3
|
module Pod
|
2
4
|
class Installer
|
3
5
|
class SPMAnalyzer
|
4
6
|
attr_reader :spm_pkgs, :spm_dependencies_by_target
|
5
7
|
|
6
|
-
def initialize(podfile,
|
8
|
+
def initialize(podfile, aggregate_targets)
|
7
9
|
@podfile = podfile
|
8
|
-
@
|
10
|
+
@aggregate_targets = aggregate_targets
|
9
11
|
@spm_pkgs = []
|
10
12
|
@spm_dependencies_by_target = {}
|
11
13
|
end
|
@@ -13,6 +15,7 @@ module Pod
|
|
13
15
|
def analyze
|
14
16
|
analyze_spm_pkgs
|
15
17
|
analyze_spm_dependencies_by_target
|
18
|
+
validate!
|
16
19
|
end
|
17
20
|
|
18
21
|
def spm_dependencies_for(target)
|
@@ -27,19 +30,19 @@ module Pod
|
|
27
30
|
|
28
31
|
def analyze_spm_dependencies_by_target
|
29
32
|
analyze_dependencies_for_targets
|
30
|
-
|
33
|
+
analyze_dependencies_for_aggregate_targets
|
31
34
|
@spm_dependencies_by_target.values.flatten.each { |d| d.pkg = spm_pkg_for(d.name) }
|
32
35
|
end
|
33
36
|
|
34
37
|
def analyze_dependencies_for_targets
|
35
|
-
specs = @
|
38
|
+
specs = @aggregate_targets.flat_map(&:specs).uniq
|
36
39
|
specs.each do |spec|
|
37
40
|
@spm_dependencies_by_target[spec.name] = spec.spm_dependencies
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
41
|
-
def
|
42
|
-
@
|
44
|
+
def analyze_dependencies_for_aggregate_targets
|
45
|
+
@aggregate_targets.each do |target|
|
43
46
|
spm_dependencies = target.specs.flat_map(&:spm_dependencies)
|
44
47
|
@spm_dependencies_by_target[target.to_s] = merge_spm_dependencies(spm_dependencies)
|
45
48
|
end
|
@@ -64,6 +67,11 @@ module Pod
|
|
64
67
|
@_spm_pkgs_by_name ||= @spm_pkgs.to_h { |pkg| [pkg.name, pkg] }
|
65
68
|
@_spm_pkgs_by_name[name]
|
66
69
|
end
|
70
|
+
|
71
|
+
def validate!
|
72
|
+
validator = SPMValidator.new(@aggregate_targets, @spm_pkgs, @spm_dependencies_by_target)
|
73
|
+
validator.validate!
|
74
|
+
end
|
67
75
|
end
|
68
76
|
end
|
69
77
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Pod
|
2
|
+
class Installer
|
3
|
+
class SPMValidator
|
4
|
+
def initialize(aggregate_targets, spm_pkgs, spm_dependencies_by_target)
|
5
|
+
@aggregate_targets = aggregate_targets
|
6
|
+
@spm_pkgs = spm_pkgs
|
7
|
+
@spm_dependencies_by_target = spm_dependencies_by_target
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate!
|
11
|
+
verify_no_missing_pkgs
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def dependents_of_pkg(name)
|
17
|
+
@specs ||= @aggregate_targets.flat_map(&:specs).uniq
|
18
|
+
@specs.select { |s| s.spm_dependencies.any? { |d| d.name == name } }.map(&:name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def verify_no_missing_pkgs
|
22
|
+
missing_pkgs = @spm_dependencies_by_target.values.flatten.select { |d| d.pkg.nil? }.map(&:name).uniq
|
23
|
+
return if missing_pkgs.empty?
|
24
|
+
|
25
|
+
messages = ["The following packages were not declared in Podfile:"]
|
26
|
+
messages += missing_pkgs.map { |pkg| " • #{pkg}: used by #{dependents_of_pkg(pkg).join(', ')}" }
|
27
|
+
messages << "Use the `spm_pkg` method to declare those packages in Podfile."
|
28
|
+
raise Informative, messages.join("\n")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -4,6 +4,7 @@ module Pod
|
|
4
4
|
module SPM
|
5
5
|
class MacroPrebuilder
|
6
6
|
include Config::Mixin
|
7
|
+
include Executables
|
7
8
|
|
8
9
|
attr_reader :name
|
9
10
|
|
@@ -36,12 +37,13 @@ module Pod
|
|
36
37
|
raise "Package.swift not exist in #{macro_downloaded_dir}" \
|
37
38
|
unless (macro_downloaded_dir / "Package.swift").exist?
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
UI.message "Generating metadata at: #{metadata_path}" do
|
41
|
+
raw = Dir.chdir(macro_downloaded_dir) do
|
42
|
+
swift! ["package", "dump-package"]
|
43
|
+
end
|
44
|
+
metadata_path.write(raw)
|
45
|
+
@metadata = Metadata.from_s(raw)
|
46
|
+
end
|
45
47
|
end
|
46
48
|
|
47
49
|
def prebuild_macro_impl
|
@@ -51,8 +53,12 @@ module Pod
|
|
51
53
|
impl_module_name = @metadata.macro_impl_name
|
52
54
|
return if spm_config.dont_prebuild_macros_if_exist? && (macro_prebuilt_dir / config / impl_module_name).exist?
|
53
55
|
|
54
|
-
UI.
|
55
|
-
|
56
|
+
UI.section "Building macro implementation: #{impl_module_name} (#{config})...".green do
|
57
|
+
Dir.chdir(macro_downloaded_dir) do
|
58
|
+
swift! ["build", "-c", config, "--product", impl_module_name]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
56
62
|
(macro_prebuilt_dir / config).mkpath
|
57
63
|
FileUtils.copy_entry(
|
58
64
|
macro_downloaded_dir / ".build" / config / impl_module_name,
|
data/lib/cocoapods-spm/main.rb
CHANGED
@@ -55,7 +55,6 @@ module Pod
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def resolve_spm_dependencies
|
58
|
-
# TODO: convert aggregate_targets to umbrella_targets?
|
59
58
|
UI.section "Analyzing SPM dependencies" do
|
60
59
|
@spm_analyzer ||= Pod::Installer::SPMAnalyzer.new(podfile, aggregate_targets)
|
61
60
|
@spm_analyzer.analyze
|
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.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thuyen Trinh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -42,11 +42,13 @@ files:
|
|
42
42
|
- lib/cocoapods-spm/def/spm_package.rb
|
43
43
|
- lib/cocoapods-spm/def/target_definition.rb
|
44
44
|
- lib/cocoapods-spm/def/xcodeproj.rb
|
45
|
+
- lib/cocoapods-spm/executables.rb
|
45
46
|
- lib/cocoapods-spm/hooks/base.rb
|
46
47
|
- lib/cocoapods-spm/hooks/post_integrate/add_spm_pkgs.rb
|
47
48
|
- lib/cocoapods-spm/hooks/post_integrate/update_embed_frameworks_script.rb
|
48
|
-
- lib/cocoapods-spm/hooks/
|
49
|
+
- lib/cocoapods-spm/hooks/post_integrate/update_settings.rb
|
49
50
|
- lib/cocoapods-spm/installer/analyzer.rb
|
51
|
+
- lib/cocoapods-spm/installer/validator.rb
|
50
52
|
- lib/cocoapods-spm/macro/fetcher.rb
|
51
53
|
- lib/cocoapods-spm/macro/pod_installer.rb
|
52
54
|
- lib/cocoapods-spm/macro/prebuilder.rb
|
@@ -74,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
76
|
- !ruby/object:Gem::Version
|
75
77
|
version: '0'
|
76
78
|
requirements: []
|
77
|
-
rubygems_version: 3.
|
79
|
+
rubygems_version: 3.2.33
|
78
80
|
signing_key:
|
79
81
|
specification_version: 4
|
80
82
|
summary: CocoaPods plugin to add SPM dependencies to CocoaPods targets
|