我感到被困在迦太基世界和Swift Package Manager(SPM)世界之间,就像被困在炼狱中一样。
我正在开发a Swift library/SDK,直到现在,我一直在使用迦太基作为依赖项。但是,既然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不起作用,因为SPM还不支持二进制文件(relevant Swift Forum Thread)。
1)等到有人聪明地修复了BitcoinKit中破碎的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 Packages?我可以继续通过迦太基继续使用Bitcoinkit,只在一个地方声明我的SPM软件包,我想SPM / Xcode / Swift将负责将依赖项集成到我的Xcode项目中,但是可以通过Package.swift
进行更新和管理文件...?
6)还有其他替代方案吗?
答案 0 :(得分:0)
在没有研究整个“使比特币套件与SPM一起工作”的情况下,我认为“链接迦太基预先构建的二进制文件”的想法至少作为临时解决方案听起来最好。
尚无法在包清单中链接二进制文件(但),但是在构建时可以链接它:
使用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
。
答案 1 :(得分:0)
GitHub上的yenom / BitcoinKit中有一个WalletExample。它带有一个工作区和一个项目。
我能够在Package.swift中将yenom / BitcoinKit与SPM一起包含在内,并且我不使用任何项目/工作区。