2021年1月3日星期日

How can I enable ABI stability for a SwiftPM package?

Given my bog standard Package Description of

  let package = Package(      name: "MyLib",      products: [          .library(name: "MyLib", targets: ["MyLib"]),      ],      dependencies: [],      targets: [          .target(              name: "MiniRxSwift",              dependencies: [],              swiftSettings: [                  .define("<see below>")              ]),     ...  

I'm trying to get swiftpm to pass the -enable-library-evolution flag through to swiftc, but I've been unsuccessful.

Using swiftSettings of .define("-enable-library-evolution"), I get a compile error which states "error: conditional compilation flags must be valid Swift identifiers (rather than '-enable-library-evolution')"

I get the same error if I omit the leading hyphen e.g. `.define("enable-library-evolution")

I've tried the Xcode setting of .define("BUILD_LIBRARIES_FOR_DISTRIBUTION") which doesn't result in a compile error, but also doesn't result in the flag getting set, it instead results in -DBUILD_LIBRARIES_FOR_DISTRIBUTION on the command line for swiftc, which doesn't do anything.

After a bit more research, I worked out that .define in swiftSettings is hardwired to produce things with -D - hence it's name.

Instead I needed to use unsafeFlags, which does indeed result in the flag getting passed correctly to the swift compiler:

swiftSettings: [      .unsafeFlags(["-enable-library-evolution"])  ]  

BUT then when I attempt to consume this package, Xcode fails to load the package, with the error:

The package product 'MyLib' cannot be used as a dependency of this target because it uses unsafe build flags.

If I can't enable library evolution without unsafe build flags, and I can't use unsafe build flags in a library, then what can I do? What is the point of having unsafeFlags if you can't use any libraries which set them?

https://stackoverflow.com/questions/65556536/how-can-i-enable-abi-stability-for-a-swiftpm-package January 04, 2021 at 09:02AM

没有评论:

发表评论