我感到被困在迦太基世界和Swift Package Manager(SPM)世界之间,就像被困在炼狱中一样。

我正在开发a Swift library/SDK,直到现在,我一直在使用Carthage作为依赖项。但是由于SPM终于可以在iOS上使用,所以我认为对于希望使用此库的人来说,可以通过SPM包含它会很棒。

但是,我碰壁了。我的依赖项之一,即BitcoinKit可与迦太基一起使用,但SPM支持已被破坏。

为了分发我的库,我需要有一个Package.swift文件和一些其他标签(自述文件,源文件在Sources中,测试在Tests中)。我还需要在所说的Package.swift文件中声明我的依赖关系,以便SPM recursivley可以解析所有依赖关系(当人们通过SPM安装我的库时)。这就是我被困住的地方...

由于我仍在使用Carthage,因此我需要一个Xcode Project文件来设置此Carthage依赖项。但是现在我的源文件无法导入SPM依赖项。找不到它们。似乎我必须使用Xcode和 Add Package Dependency feature (Apple doc here)包括SPM软件包依赖项。这不是我想要的,我希望Package.swift文件声明我的库使用的SPM软件包的相同版本。为了清楚起见,由于迦太基,我需要一个Xcode项目,从而引起了这个问题。

所以我想也许我可以用Carthage构建BitcoinKit(就像我现在所做的那样),并将构建好的二进制文件(.Carthage/Build/iOS/BitcoinKit.framework)包含在我的库中,并在Package.swift中引用它,但这不起作用,因为SPM还不支持二进制文件。 (relevant Swift Forum Thread)。

那我有什么选择呢?

1)等到有人聪明地修复了BitcoinKit中 splinter 的SPM支持(我已经尝试过并失败),然后删除我的Xcode项目文件并完成到仅SPM的过渡,现在坚持使用迦太基...

2)尝试在通过Xcode Add Package Dependency功能安装的库中内部使用SPM软件包,并手动将这些版本与我在Package.swift中声明的版本同步。那行得通吗?无论如何,糟糕的解决方案。

3)希望在SPM支持时将通过迦太基构建的BitcoinKit.framework包含为二进制文件吗?什么时候?可能要花点时间吗?

4)BitcoinKit也可以与Cocoapods一起使用,但是我想这让我无处可走,甚至更糟,因为Cocoapods创建了.xcworkspace文件。

5)等到苹果公司希望改变(有人知道是否有任何计划吗?),以便即使与Xcode项目文件一起使用时,我们也可以通过Package.swift文件包含Swift软件包?我可以继续通过迦太基继续使用Bitcoinkit并只在一个地方声明我的SPM软件包,我猜SPM/Xcode/Swift将负责将依赖项集成到我的Xcode项目中,但是可以通过Package.swift文件进行更新和管理... ?

6)还有其他替代方案吗?

最佳答案

在没有研究整个“使比特币套件与SPM一起工作”的情况下,我认为“链接迦太基预先构建的二进制文件”的想法作为临时解决方案至少听起来最好。

尚不可能在程序包 list 中链接二进制文件(但),但是在构建时可以链接它:
在使用swift build从命令行构建SPM软件包时,如果要链接框架,则可以使用-Xswiftc-Xlinker链接二进制文件以传递args -F path/to/bitcoinkit。请记住,每个参数都必须在其前面有一个交叉参数标志。
在Xcode中进行构建时,您应该可以使用带有内容的.xcconfig来解决该问题:

FRAMEWORK_SEARCH_PATHS = path/to/bitcoinkit

您可能需要稍微调整一下,但我想这应该可以工作,最糟糕的情况是,由.xcodeproj生成一个单独的swift package generate-xcodeproj --xcconfig-overrides myconfig.xcconfig

关于ios - Package.swift与Xcode 11 Project一起,如何与Carthage和SPM一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58504112/

10-09 16:24