我感到被困在迦太基世界和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/