首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为SwiftPM包启用ABI稳定性?

如何为SwiftPM包启用ABI稳定性?
EN

Stack Overflow用户
提问于 2021-01-04 01:02:03
回答 1查看 359关注 0票数 0

鉴于我的bog标准包描述

代码语言:javascript
复制
let package = Package(
    name: "MyLib",
    products: [
        .library(name: "MyLib", targets: ["MyLib"]),
    ],
    dependencies: [],
    targets: [
        .target(
            name: "MiniRxSwift",
            dependencies: [],
            swiftSettings: [
                .define("<see below>")
            ]),
   ...

我正试着让-enable-library-evolution标志传递给swiftc,但是我没有成功。

使用swiftSettings of .define("-enable-library-evolution"),我得到一个编译错误,它声明" error :条件编译标志必须是有效的Swift标识符(而不是‘-启用-库-进化’)。

如果省略前面的连字符,例如`.define(“启用-库进化”),我会得到同样的错误。

我已经尝试过.define的Xcode设置(“BUILD_LIBRARIES_FOR_DISTRIBUTION”),它不会导致编译错误,但也不会导致设置标志,相反,它会在BUILD_LIBRARIES_FOR_DISTRIBUTION的命令行上产生-DBUILD_LIBRARIES_FOR_DISTRIBUTION,它不会做任何事情。

在进行了更多的研究之后,我发现.define in swiftSettings是用-D来生产东西的硬连线--因此它的名字。

相反,我需要使用unsafeFlags,这确实会导致将标志正确地传递给快速编译器:

代码语言:javascript
复制
swiftSettings: [
    .unsafeFlags(["-enable-library-evolution"])
]

但是,当我尝试使用这个包时,Xcode无法加载包,并出现错误:

包产品'MyLib‘不能用作此目标的依赖项,因为它使用不安全的构建标志.

如果我不能在没有不安全的构建标志的情况下启用库的演化,并且不能在库中使用不安全的构建标志,那么我能做什么呢?如果您不能使用任何设置unsafeFlags的库,那么拥有它们有什么意义呢?

EN

回答 1

Stack Overflow用户

发布于 2021-01-05 23:14:36

如果您可以访问包,为什么需要ABI稳定性?如果可能的话,你应该避免。也就是说,您应该能够在可编辑的包中使用unsafeFlags (那些您已经拖到项目中的包),而不是那些通过URL包含正常方式的包。

如果您需要以二进制的形式提供一个快速包,则需要将您的包构建为一个XCFramework,然后您可以将它放在SwiftPM可以依赖它的地方。这意味着它可以托管在一个静态的地方,您可以在其中提供URL,也可以将它嵌入到give中,其中包含用于销售包的Package.swift清单。我所知道的唯一帮助这个问题的工具是这里,它只适用于我使用过的Swift软件包。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65556536

复制
相关文章

相似问题

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