鉴于我的bog标准包描述
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,这确实会导致将标志正确地传递给快速编译器:
swiftSettings: [
.unsafeFlags(["-enable-library-evolution"])
]但是,当我尝试使用这个包时,Xcode无法加载包,并出现错误:
包产品'MyLib‘不能用作此目标的依赖项,因为它使用不安全的构建标志.
如果我不能在没有不安全的构建标志的情况下启用库的演化,并且不能在库中使用不安全的构建标志,那么我能做什么呢?如果您不能使用任何设置unsafeFlags的库,那么拥有它们有什么意义呢?
发布于 2021-01-05 23:14:36
如果您可以访问包,为什么需要ABI稳定性?如果可能的话,你应该避免。也就是说,您应该能够在可编辑的包中使用unsafeFlags (那些您已经拖到项目中的包),而不是那些通过URL包含正常方式的包。
如果您需要以二进制的形式提供一个快速包,则需要将您的包构建为一个XCFramework,然后您可以将它放在SwiftPM可以依赖它的地方。这意味着它可以托管在一个静态的地方,您可以在其中提供URL,也可以将它嵌入到give中,其中包含用于销售包的Package.swift清单。我所知道的唯一帮助这个问题的工具是这里,它只适用于我使用过的Swift软件包。
https://stackoverflow.com/questions/65556536
复制相似问题