cocoapods-spm 0.0.2.rc7194768598 → 0.0.3
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/podfile.rb +15 -0
- data/lib/cocoapods-spm/def/spm_dependency.rb +9 -0
- data/lib/cocoapods-spm/def/spm_package.rb +2 -1
- data/lib/cocoapods-spm/def/xcodeproj.rb +7 -0
- data/lib/cocoapods-spm/hooks/post_integrate/add_spm_pkgs.rb +2 -2
- data/lib/cocoapods-spm/hooks/post_integrate/update_embed_frameworks_script.rb +58 -0
- data/lib/cocoapods-spm/hooks/pre_integrate/update_settings.rb +11 -4
- data/lib/cocoapods-spm/installer/analyzer.rb +8 -5
- data/lib/cocoapods-spm/main.rb +1 -0
- data/lib/cocoapods-spm/patch/aggregate_target.rb +13 -0
- data/lib/cocoapods-spm/patch/installer.rb +5 -2
- metadata +10 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43e96257dc89796c000a5115e81d36fc9ef9df8208eba676a2fd1b6961864b84
|
4
|
+
data.tar.gz: 1aafa45b40759edbcb3e3ceee7a699038ca2638f8d6c432bd8a4dce2a5321783
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6673bab5c9be9aef9834c835fa6f732e7107cd19dedee9fade7674a11da5e08a59456e829a867e5dc5bc683a7506009bd947178f3b1184ed4e2d8f3100798e8
|
7
|
+
data.tar.gz: db59493b90243638c878ed6d9140155c9059f147ee3dda1c826ea2d2c0739329d10ddf2e5c6c5b53968b6cb85ba9159421e3405fae66d5f2ba340869f13bf5cf
|
@@ -3,6 +3,8 @@ require "cocoapods-spm/config"
|
|
3
3
|
module Pod
|
4
4
|
class Podfile
|
5
5
|
module DSL
|
6
|
+
attr_accessor :spm_analyzer
|
7
|
+
|
6
8
|
alias origin_pod pod
|
7
9
|
def config_cocoapods_spm(options)
|
8
10
|
SPM::Config.instance.dsl_config = options
|
@@ -26,6 +28,19 @@ module Pod
|
|
26
28
|
current_target_definition.store_spm_pkg(name, options)
|
27
29
|
end
|
28
30
|
|
31
|
+
def spm_pkgs_for(target)
|
32
|
+
spm_pkgs_by_aggregate_target[target.to_s]
|
33
|
+
end
|
34
|
+
|
35
|
+
def spm_pkgs_by_aggregate_target
|
36
|
+
@spm_pkgs_by_aggregate_target ||= begin
|
37
|
+
common_spm_pkgs = root_target_definitions.flat_map(&:spm_pkgs)
|
38
|
+
target_definition_list.reject(&:abstract?).to_h do |target|
|
39
|
+
[target.to_s, (common_spm_pkgs + target.spm_pkgs).uniq(&:name)]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
29
44
|
private
|
30
45
|
|
31
46
|
def prepare_macro_pod_dir(name, requirement)
|
@@ -14,6 +14,15 @@ module Pod
|
|
14
14
|
@pkg = pkg
|
15
15
|
end
|
16
16
|
|
17
|
+
def linkage
|
18
|
+
# TODO: How to detect the linkage of an SPM library?
|
19
|
+
@pkg.linkage.is_a?(Hash) ? @pkg.linkage[@product] : @pkg.linkage
|
20
|
+
end
|
21
|
+
|
22
|
+
def dynamic?
|
23
|
+
linkage == :dynamic
|
24
|
+
end
|
25
|
+
|
17
26
|
def inspect
|
18
27
|
"#<#{self.class} name=#{name} product=#{product} pkg=#{pkg}>"
|
19
28
|
end
|
@@ -4,7 +4,7 @@ require "cocoapods-spm/def/spm_dependency"
|
|
4
4
|
module Pod
|
5
5
|
module SPM
|
6
6
|
class Package
|
7
|
-
attr_reader :name, :requirement, :url, :relative_path
|
7
|
+
attr_reader :name, :requirement, :url, :relative_path, :linkage
|
8
8
|
|
9
9
|
def initialize(name, options = {})
|
10
10
|
@name = name
|
@@ -12,6 +12,7 @@ module Pod
|
|
12
12
|
@requirement = requirement_from(options)
|
13
13
|
@url = options[:url]
|
14
14
|
@relative_path = options[:relative_path]
|
15
|
+
@linkage = options[:linkage]
|
15
16
|
end
|
16
17
|
|
17
18
|
def inspect
|
@@ -12,6 +12,13 @@ module Pod
|
|
12
12
|
ref.product_name = product
|
13
13
|
ref
|
14
14
|
end
|
15
|
+
|
16
|
+
def create_target_dependency_ref(product)
|
17
|
+
ref = project.new(BaseObject::PBXTargetDependency)
|
18
|
+
ref.name = product
|
19
|
+
ref.product_ref = create_pkg_product_dependency_ref(product)
|
20
|
+
ref
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
24
|
BaseObject = Xcodeproj::Project::Object
|
@@ -35,8 +35,8 @@ module Pod
|
|
35
35
|
pods_project.targets.each do |target|
|
36
36
|
@spm_analyzer.spm_dependencies_by_target[target.name].to_a.each do |dep|
|
37
37
|
pkg_ref = spm_pkg_refs[dep.pkg.name]
|
38
|
-
|
39
|
-
target.
|
38
|
+
target_dep_ref = pkg_ref.create_target_dependency_ref(dep.product)
|
39
|
+
target.dependencies << target_dep_ref
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require "cocoapods-spm/hooks/base"
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
module SPM
|
5
|
+
class Hook
|
6
|
+
class UpdateEmbedFrameworksScript < Hook
|
7
|
+
def run
|
8
|
+
aggregate_targets.each do |target|
|
9
|
+
next if framework_paths_for(target).empty?
|
10
|
+
|
11
|
+
update_embed_frameworks_script(target)
|
12
|
+
user_build_configurations.each_key do |config|
|
13
|
+
update_embed_frameworks_script_files_path(target, config)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def framework_paths_for(target)
|
21
|
+
@dynamic_deps_by_target ||=
|
22
|
+
@spm_analyzer
|
23
|
+
.spm_dependencies_by_target
|
24
|
+
.transform_values { |deps| deps.select(&:dynamic?) }
|
25
|
+
@dynamic_deps_by_target[target.to_s].map do |d|
|
26
|
+
"${BUILT_PRODUCTS_DIR}/PackageFrameworks/#{d.product}.framework"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def update_embed_frameworks_script(target)
|
31
|
+
lines = framework_paths_for(target).map { |p| "install_framework \"#{p}\"" }
|
32
|
+
target.embed_frameworks_script_path.open("a") do |f|
|
33
|
+
f << "\n" << <<~SH
|
34
|
+
# --------------------------------------------------------
|
35
|
+
# Added by `cocoapods-spm` to embed SPM package frameworks
|
36
|
+
# --------------------------------------------------------
|
37
|
+
#{lines.join("\n")}
|
38
|
+
# --------------------------------------------------------
|
39
|
+
SH
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def update_embed_frameworks_script_files_path(target, config)
|
44
|
+
input_paths = framework_paths_for(target)
|
45
|
+
output_paths = input_paths.map do |p|
|
46
|
+
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/#{File.basename(p)}"
|
47
|
+
end
|
48
|
+
target.embed_frameworks_script_input_files_path(config).open("a") do |f|
|
49
|
+
input_paths.each { |p| f << "\n" << p }
|
50
|
+
end
|
51
|
+
target.embed_frameworks_script_output_files_path(config).open("a") do |f|
|
52
|
+
output_paths.each { |p| f << "\n" << p }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -47,14 +47,21 @@ module Pod
|
|
47
47
|
|
48
48
|
# For packages to work in the main target
|
49
49
|
perform_settings_update(
|
50
|
-
|
51
|
-
|
52
|
-
flags = spm_deps.map { |d| "-l\"#{d.product}.o\"" }
|
53
|
-
{ "OTHER_LDFLAGS" => flags }
|
50
|
+
update_targets: lambda do |target, _, _|
|
51
|
+
{ "OTHER_LDFLAGS" => linker_flags_for(target) }
|
54
52
|
end
|
55
53
|
)
|
56
54
|
end
|
57
55
|
|
56
|
+
def linker_flags_for(target)
|
57
|
+
spm_deps = @spm_analyzer.spm_dependencies_by_target[target.to_s].to_a
|
58
|
+
framework_flags = spm_deps.select(&:dynamic?).map { |d| "-framework \"#{d.product}\"" }
|
59
|
+
framework_flags << '-F"${PODS_CONFIGURATION_BUILD_DIR}/PackageFrameworks"' unless framework_flags.empty?
|
60
|
+
library_flags = spm_deps.reject(&:dynamic?).map { |d| "-l\"#{d.product}.o\"" }
|
61
|
+
library_flags << '-L"${PODS_CONFIGURATION_BUILD_DIR}"' unless library_flags.empty?
|
62
|
+
framework_flags + library_flags
|
63
|
+
end
|
64
|
+
|
58
65
|
def update_swift_include_paths
|
59
66
|
return unless @spm_analyzer.spm_pkgs
|
60
67
|
|
@@ -15,6 +15,10 @@ module Pod
|
|
15
15
|
analyze_spm_dependencies_by_target
|
16
16
|
end
|
17
17
|
|
18
|
+
def spm_dependencies_for(target)
|
19
|
+
@spm_dependencies_by_target[target.to_s]
|
20
|
+
end
|
21
|
+
|
18
22
|
private
|
19
23
|
|
20
24
|
def analyze_spm_pkgs
|
@@ -40,11 +44,10 @@ module Pod
|
|
40
44
|
@spm_dependencies_by_target[target.to_s] = merge_spm_dependencies(spm_dependencies)
|
41
45
|
end
|
42
46
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
@spm_dependencies_by_target[target.label] = merge_spm_dependencies(existing + spm_dependencies)
|
47
|
+
@podfile.spm_pkgs_by_aggregate_target.each do |target, pkgs|
|
48
|
+
existing = @spm_dependencies_by_target[target].to_a
|
49
|
+
spm_dependencies = pkgs.flat_map(&:to_dependencies)
|
50
|
+
@spm_dependencies_by_target[target] = merge_spm_dependencies(existing + spm_dependencies)
|
48
51
|
end
|
49
52
|
end
|
50
53
|
|
data/lib/cocoapods-spm/main.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Pod
|
2
|
+
class AggregateTarget
|
3
|
+
alias origin_includes_frameworks? includes_frameworks?
|
4
|
+
|
5
|
+
def includes_frameworks?
|
6
|
+
origin_includes_frameworks? || includes_dynamic_spm_dependencies?
|
7
|
+
end
|
8
|
+
|
9
|
+
def includes_dynamic_spm_dependencies?
|
10
|
+
podfile.spm_analyzer.spm_dependencies_for(self).any?(&:dynamic)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -56,8 +56,11 @@ module Pod
|
|
56
56
|
|
57
57
|
def resolve_spm_dependencies
|
58
58
|
# TODO: convert aggregate_targets to umbrella_targets?
|
59
|
-
|
60
|
-
|
59
|
+
UI.section "Analyzing SPM dependencies" do
|
60
|
+
@spm_analyzer ||= Pod::Installer::SPMAnalyzer.new(podfile, aggregate_targets)
|
61
|
+
@spm_analyzer.analyze
|
62
|
+
podfile.spm_analyzer = @spm_analyzer
|
63
|
+
end
|
61
64
|
end
|
62
65
|
end
|
63
66
|
end
|
metadata
CHANGED
@@ -1,57 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-spm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thuyen Trinh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.3'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.3'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rubocop
|
14
|
+
name: xcodeproj
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
44
16
|
requirements:
|
45
17
|
- - ">="
|
46
18
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
19
|
+
version: 1.23.0
|
20
|
+
type: :runtime
|
49
21
|
prerelease: false
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
24
|
- - ">="
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
26
|
+
version: 1.23.0
|
55
27
|
description: CocoaPods plugin to add SPM dependencies to CocoaPods targets
|
56
28
|
email:
|
57
29
|
- trinhngocthuyen@gmail.com
|
@@ -72,6 +44,7 @@ files:
|
|
72
44
|
- lib/cocoapods-spm/def/xcodeproj.rb
|
73
45
|
- lib/cocoapods-spm/hooks/base.rb
|
74
46
|
- lib/cocoapods-spm/hooks/post_integrate/add_spm_pkgs.rb
|
47
|
+
- lib/cocoapods-spm/hooks/post_integrate/update_embed_frameworks_script.rb
|
75
48
|
- lib/cocoapods-spm/hooks/pre_integrate/update_settings.rb
|
76
49
|
- lib/cocoapods-spm/installer/analyzer.rb
|
77
50
|
- lib/cocoapods-spm/macro/fetcher.rb
|
@@ -79,6 +52,7 @@ files:
|
|
79
52
|
- lib/cocoapods-spm/macro/prebuilder.rb
|
80
53
|
- lib/cocoapods-spm/main.rb
|
81
54
|
- lib/cocoapods-spm/metadata.rb
|
55
|
+
- lib/cocoapods-spm/patch/aggregate_target.rb
|
82
56
|
- lib/cocoapods-spm/patch/installer.rb
|
83
57
|
- lib/cocoapods_plugin.rb
|
84
58
|
homepage: https://github.com/trinhngocthuyen/cocoapods-spm
|
@@ -96,9 +70,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
70
|
version: '0'
|
97
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
72
|
requirements:
|
99
|
-
- - "
|
73
|
+
- - ">="
|
100
74
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
75
|
+
version: '0'
|
102
76
|
requirements: []
|
103
77
|
rubygems_version: 3.1.6
|
104
78
|
signing_key:
|