let package = Package(
name: "BaseCommon",
// ...
dependencies: [
.package(path: "../BaseCore") // 👈 这里声明:BaseCommon 依赖 BaseCore 这个包
],
targets: [
.target(
name: "BaseCommon",
dependencies: [
.product(name: "BaseCore", package: "BaseCore") // 👈 这里使用:BaseCommon Target 使用 BaseCore 这个 product
]
)
]
)
dependencies: [
.package(path: "../BaseCore") // 告诉 Swift Package Manager:BaseCommon 这个包依赖 BaseCore 包
]
作用:
../BaseCore)targets: [
.target(
name: "BaseCommon",
dependencies: [
.product(name: "BaseCore", package: "BaseCore") // 告诉编译器:BaseCommon Target 需要使用 BaseCore 这个 product
]
)
]
作用:
import BaseCore在 BaseCommon/Sources/BaseCommon/Common/Network/NetworkHelper.swift 中:
import Foundation
import BaseCore // ✅ 可以导入,因为 Package.swift 中配置了依赖
public class NetworkHelper {
private let networkManager: NetworkManager // ✅ NetworkManager 来自 BaseCore
public init(networkManager: NetworkManager = NetworkManager.shared) {
self.networkManager = networkManager
}
}
为什么可以 import BaseCore?
Package.swift 中配置了依赖当 A 依赖 B,B 依赖 C 时,A 会自动获得对 C 的访问权限。
xdz 项目
└── 依赖 BaseCommon
└── 依赖 BaseCore ✅ (自动传递)
xdz 项目添加 BaseCommon 依赖
../BaseCommon 包Swift Package Manager 自动解析
xdz 需要 BaseCommon
→ 读取 BaseCommon/Package.swift
→ 发现 dependencies: [.package(path: "../BaseCore")]
→ 自动将 BaseCore 也添加到依赖树中
结果
// xdz/xdz/xdzApp.swift
import SwiftUI
import BaseCommon // 只导入 BaseCommon
@main
struct xdzApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
init() {
// 使用 BaseCommon 的 NetworkHelper
let helper = NetworkHelper.shared // ✅ 来自 BaseCommon
// NetworkHelper 内部使用了 BaseCore 的 NetworkManager
// 虽然我们没有直接 import BaseCore,但传递依赖让它可用
}
}
1. xdz 导入 BaseCommon
↓
2. Swift Package Manager 检查 BaseCommon/Package.swift
↓
3. 发现 dependencies: [.package(path: "../BaseCore")]
↓
4. 自动将 BaseCore 添加到编译依赖中
↓
5. xdz 可以访问 BaseCommon 和 BaseCore ✅
┌─────────────┐
│ BaseCore │ (基础层,不依赖其他)
│ │
│ Package.swift: │
│ dependencies: [] │
└──────┬──────┘
│
│ .package(path: "../BaseCore")
│
┌──────▼──────────┐
│ BaseCommon │ (业务封装层)
│ │
│ Package.swift: │
│ dependencies: [ │
│ .package( │
│ path: │
│ "../BaseCore"│
│ ) │
│ ] │
│ │
│ targets: [ │
│ .target( │
│ dependencies:│
│ [.product( │
│ name: │
│ "BaseCore"│
│ )] │
│ ) │
│ ] │
└──────┬──────────┘
│
│ 传递依赖
│
┌──────▼──────┐
│ xdz │ (业务项目)
│ │ - 添加 BaseCommon 依赖
│ │ - 自动获得 BaseCore ✅
└─────────────┘
cat BaseCommon/Package.swift
你会看到:
dependencies: [.package(path: "../BaseCore")] ✅targets[].dependencies: [.product(name: "BaseCore", package: "BaseCore")] ✅grep -r "import BaseCore" BaseCommon/Sources/
你会看到多个文件都 import BaseCore,说明依赖配置成功。
BaseCommon 依赖 BaseCore 的配置:
Package.swift 的 dependencies:声明包依赖
dependencies: [
.package(path: "../BaseCore")
]
Package.swift 的 targets[].dependencies:在 Target 中使用
targets: [
.target(
name: "BaseCommon",
dependencies: [
.product(name: "BaseCore", package: "BaseCore")
]
)
]
代码中使用:import BaseCore
传递依赖机制: