我有一个包含2个库的本地SPM包,我想在另一个本地SPM包中导入其中一个库:文件,其中包含库:
let package = Package(
name: "LocationService",
platforms: [.iOS(.v13)],
products: [
.library(
name: "LocationService",
type: .dynamic,
targets: ["LocationService"]),
.library(
name: "LocationLiveClient",
type: .dynamic,
targets: ["LocationLiveClient"]),
],
targets: [
.target(
name: "LocationService",
dependencies: []),
.target(
name: "LocationLiveClient",
dependencies: ["LocationService"],
path: "Sources/LocationLiveClient"),
]
)导入库的文件:
let package = Package(
name: "HomePage",
products: [
.library(
name: "HomePage",
type: .dynamic,
targets: ["HomePage"])
],
dependencies: [
.package(path: "../RouterService"),
.package(path: "../LocationService/Sources/LocationLiveClient"),
],
targets: [
.target(
name: "HomePage",
dependencies: ["RouterService", "LocationLiveClient"])
]
)发布于 2021-03-03 13:02:24
这里有几个问题要解决。
(如果您的设计要求是使用“动态”链接,那么这种方法可能不适合您。)
type: .dynamic除非您绝对需要保证如何实现库链接,否则建议将其保留为nil的默认值(只需删除行)。这允许快速包管理器确定如何最好地链接库(默认为“静态”)。
.package(path: "../LocationService/Sources/LocationLiveClient"),LocationLiveClient是LocationService包的产品和目标。在这里的依赖项中,应该对整个包进行引用。所以把这个改为.package(path: "../LocationService"),
dependencies: ["RouterService", "LocationLiveClient"])一旦要依赖于整个位置服务包的更改,编译器需要一些额外的信息。您可以更新目标依赖项以具体使用LocationService包中的LocationService库:.product(name: "LocationLiveClient", package: "LocationService")。
在进行了这些更改之后,您将得到如下的包定义:
let package = Package(
name: "HomePage",
products: [
.library(
name: "HomePage",
targets: ["HomePage"]),
],
dependencies: [
.package(path: "../RouterService"),
.package(path: "../LocationService"),
],
targets: [
.target(
name: "HomePage",
dependencies: [
"RouterService",
.product(name: "LocationLiveClient", package: "LocationService")
]
),
]
)然后,您应该能够像预期的那样进行import LocationLiveClient。
附带注意:假设您的“LocationService”包具有以下文件夹结构,那么您可以安全地从LocationLiveClient目标定义中删除path: "Sources/LocationLiveClient"。
LocationService
-> Sources
-> LocationService
-> LocationLiveClienthttps://stackoverflow.com/questions/66433875
复制相似问题