【发布时间】:2020-02-18 14:16:19
【问题描述】:
我感觉夹在 Carthage 世界和 Swift Package Manager (SPM) 世界之间,就像被困在了炼狱中。
我正在开发a Swift library/SDK,到目前为止,我一直在使用 Carthage 进行依赖。但是由于 SPM 最终可以与 iOS 一起使用,我觉得对于想要使用这个库的人来说,能够通过 SPM 包含它会很棒。
但是,我碰壁了。我的依赖项之一,即 BitcoinKit 与 Carthage 一起使用,但 SPM 支持已损坏。
为了分发我的库,我需要有一个 Package.swift 文件和一些其他标准(自述文件、Sources 中的源文件和Tests 中的测试)。我还需要在上述Package.swift 文件中声明我的依赖项,以便 SPM recursivley 可以解决所有依赖项(当人们通过 SPM 安装我的库时)。这就是我卡住的地方...
由于我仍在使用 Carthage,我需要一个 Xcode 项目文件来设置这个 Carthage 依赖项。但现在我的源文件无法导入 SPM 依赖项。他们没有被发现。似乎我必须使用 Xcode 和Add Package Dependency feature (Apple doc here) 包含 SPM 包依赖项。这不是我想要的,我希望我的Package.swift 文件声明我的库使用的相同版本的 SPM 包。说清楚,这个问题的出现是因为我需要一个 Xcode 项目,由于 Carthage。
所以我想也许我可以用 Carthage 构建 BitcoinKit(就像我现在正在做的那样),并将构建的二进制文件 (.Carthage/Build/iOS/BitcoinKit.framework) 包含在我的库中,在 Package.swift 中引用它,但这不起作用,因为 SPM 确实如此不(还?)支持二进制文件 (relevant Swift Forum Thread)。
那么我有哪些选择?
1) 等到有人聪明地修复了 BitcoinKit 中损坏的 SPM 支持(我自己尝试过但失败了),然后删除我的 Xcode 项目文件并完成向仅 SPM 的过渡,现在坚持使用 Carthage...
2) 尝试在通过 Xcode Add Package Dependency 功能安装的库中内部使用 SPM 包,并手动将这些版本与我在 Package.swift 中声明的版本同步。这甚至会起作用吗?呃,无论如何,糟糕的解决方案。
3) 希望在 SPM 支持时将通过 Carthage 构建的 BitcoinKit.framework 包含为二进制文件?什么时候?可能需要一段时间?
4) BitcoinKit 也适用于 Cocoapods,但我想这让我无处可去,实际上更糟糕的是,因为 Cocoapods 创建了一个.xcworkspace 文件。
5) 等到 Apple 希望(有人知道是否有任何计划吗?)进行更改,以便我们通过 Package.swift 文件包含 Swift 包,即使与 Xcode 项目文件一起使用?我们可以通过 Carthage 继续使用 Bitcoinkit,并且只在一个地方声明我的 SPM 包,我猜 SPM/Xcode/Swift 将负责将依赖项集成到我的 Xcode 项目中,但通过Package.swift 文件进行更新和管理。 ..?
6) 任何其他替代方案,真正的解决方案?
【问题讨论】:
标签: ios swift xcode carthage swift-package-manager