Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Package.swift与Xcode 11项目一起,如何同时使用迦太基和SPM?_Ios_Swift_Xcode_Carthage_Swift Package Manager - Fatal编程技术网

Ios Package.swift与Xcode 11项目一起,如何同时使用迦太基和SPM?

Ios Package.swift与Xcode 11项目一起,如何同时使用迦太基和SPM?,ios,swift,xcode,carthage,swift-package-manager,Ios,Swift,Xcode,Carthage,Swift Package Manager,我觉得自己被卡在迦太基世界和Swift Package Manager(SPM)世界之间,就像被困在炼狱中一样 我正在开发,到目前为止,我一直在使用迦太基作为依赖项。但是由于SPM最终可以与iOS一起使用,我觉得对于希望使用这个库的人来说,能够通过SPM将其包括进来将是一件非常棒的事情 然而,我碰到了一堵墙。我的一个依赖项,即与迦太基合作,但SPM支持被破坏 为了分发我的库,我需要一个包.swift文件和一些其他标准(自述、源代码中的源文件和测试中的测试)。我还需要在所说的Package.swi

我觉得自己被卡在迦太基世界和Swift Package Manager(SPM)世界之间,就像被困在炼狱中一样

我正在开发,到目前为止,我一直在使用迦太基作为依赖项。但是由于SPM最终可以与iOS一起使用,我觉得对于希望使用这个库的人来说,能够通过SPM将其包括进来将是一件非常棒的事情

然而,我碰到了一堵墙。我的一个依赖项,即与迦太基合作,但SPM支持被破坏

为了分发我的库,我需要一个
包.swift
文件和一些其他标准(自述、源代码中的源文件和测试中的测试)。我还需要在所说的
Package.swift
文件中声明我的依赖项,以便SPM recursivley能够解析所有依赖项(当人们通过SPM安装我的库时)。这就是我被卡住的地方

因为我仍然在使用迦太基,所以我需要一个Xcode项目文件来设置这个迦太基依赖项。但是现在我的源文件无法导入SPM依赖项。他们没有找到。似乎我必须使用Xcode和包含SPM包依赖项。这不是我想要的,我想要我的
包.swift
文件声明我的库使用的SPM包的相同版本。为了说明这一点,这个问题的产生是因为我需要一个Xcode项目,因为迦太基

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

那么我有什么选择呢? 1) 等到有人聪明地修复了BitcoinKit中损坏的SPM支持(我自己也尝试过,但失败了),然后删除我的Xcode项目文件,完成到仅SPM的转换,现在继续使用迦太基

2) 尝试在我的库中内部使用通过Xcode
添加包依赖项
功能安装的SPM包,并手动将这些版本与我在
包.swift中声明的版本同步。这行得通吗?呃,无论如何,这是个糟糕的解决办法

3) 希望在SPM支持的情况下,将通过迦太基构建的
BitcoinKit.framework
作为二进制文件包含在内?什么时候可能需要一段时间

4) BitcoinKit也可以与CoCoapod一起使用,但我想这对我来说毫无意义,事实上更糟糕的是,因为CoCoapod创建了一个
.xcworkspace
文件

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


6) 任何其他替代方案,真正的解决方案?

如果不考虑整个“让比特币套件与SPM一起工作”的话,我认为“链接迦太基预先构建的二进制文件”的想法听起来至少是一个临时解决方案

无法链接包清单中的二进制文件(目前),但您可以在构建时链接它: 使用
swift build
从命令行构建SPM包时,如果要链接框架,可以使用
-Xswiftc
-Xlinker
链接二进制文件,以传递args
-F path/to/bitcoinkit
。请记住,每个参数前面必须有一个交叉参数标志。 在Xcode中构建时,您应该能够使用
.xcconfig
解决它,内容如下:

FRAMEWORK_SEARCH_PATHS = path/to/bitcoinkit

您可能需要对其进行一些调整,但我认为这应该会起作用,最坏的情况是由
swift包生成的
.xcodeproj
生成xcodeproj--xconfig覆盖myconfig.xconfig

GitHub上的yenom/BitcoinKit中有一个WalleteExample。它附带了一个工作区和项目


我可以在我的包中包含带有SPM的yenom/BitcoinKit。swift,我不使用任何项目/工作区。

正如一个说明,XCode 12出现了,您现在可以在包中链接一个
二进制文件。