我正在开发一个闭源框架,将以SPM方式分发为XCFramework。这得益于Swift工具5.3中提供的新的binaryTarget(name:path:)和binaryTarget(name:url:checksum:)方法。在没有依赖的情况下,这个方法运行良好。
WWDC 2019的Swift二进制框架演讲指出“二进制框架不能依赖于包”,但这是在5.3之前,而且根本不可能有二进制目标。在Swift论坛上有一个建议的解决方法,基本上是围绕添加一个虚拟目标来列出依赖项(
解决方法在依赖项有自己的依赖项之前有效。例如,没有任何依赖项的Lottie可以正常工作,但是有很多依赖项的Auth0会出现错误
这是我的Package.swift文件,部分工作正常。
有没有可能让一个二进制框架依赖于一个包?如果不行,那么正确的方式是如何为一个二进制框架分发依赖项呢?
WWDC 2019的Swift二进制框架演讲指出“二进制框架不能依赖于包”,但这是在5.3之前,而且根本不可能有二进制目标。在Swift论坛上有一个建议的解决方法,基本上是围绕添加一个虚拟目标来列出依赖项(
binaryTarget(...)
方法没有dependencies
参数)。解决方法在依赖项有自己的依赖项之前有效。例如,没有任何依赖项的Lottie可以正常工作,但是有很多依赖项的Auth0会出现错误
Missing required modules: 'Auth0ObjectiveC', 'SimpleKeychain'
。即使使用SPM直接将Auth0添加到客户端项目中,也无法解决这些错误。这是我的Package.swift文件,部分工作正常。
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "MyFramework",
platforms: [
.iOS(.v13)
],
products: [
.library(name: "MyFramework", targets: ["MyFramework", "MyFramework-Dependencies"])
],
dependencies: [
.package(name: "Auth0", url: "https://github.com/auth0/Auth0.swift.git", from: "1.30.1")
],
targets: [
.binaryTarget(name: "MyFramework", path: "MyFramework.xcframework"),
.target(name: "MyFramework-Dependencies", dependencies: ["Auth0"], path: "MyFramework-Dependencies")
])
有没有可能让一个二进制框架依赖于一个包?如果不行,那么正确的方式是如何为一个二进制框架分发依赖项呢?