首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在本地SPM包中导入本地SPM库

在本地SPM包中导入本地SPM库
EN

Stack Overflow用户
提问于 2021-03-02 05:39:02
回答 1查看 615关注 0票数 1

我有一个包含2个库的本地SPM包,我想在另一个本地SPM包中导入其中一个库:文件,其中包含库:

代码语言:javascript
复制
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"),
    ]
)

导入库的文件:

代码语言:javascript
复制
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"])
    ]
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 13:02:24

这里有几个问题要解决。

(如果您的设计要求是使用“动态”链接,那么这种方法可能不适合您。)

  • type: .dynamic

除非您绝对需要保证如何实现库链接,否则建议将其保留为nil的默认值(只需删除行)。这允许快速包管理器确定如何最好地链接库(默认为“静态”)。

  • .package(path: "../LocationService/Sources/LocationLiveClient"),

LocationLiveClientLocationService包的产品和目标。在这里的依赖项中,应该对整个包进行引用。所以把这个改为.package(path: "../LocationService"),

  • dependencies: ["RouterService", "LocationLiveClient"])

一旦要依赖于整个位置服务包的更改,编译器需要一些额外的信息。您可以更新目标依赖项以具体使用LocationService包中的LocationService库:.product(name: "LocationLiveClient", package: "LocationService")

在进行了这些更改之后,您将得到如下的包定义:

代码语言:javascript
复制
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"

代码语言:javascript
复制
LocationService
-> Sources
  -> LocationService
  -> LocationLiveClient
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66433875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档