如何在一个项目中同时使用 Swift Package Manager(SPM)和 CocoaPods?

48

我有一个已经使用了Cocoapods的项目,但是我想要转换到SPM;不幸的是,我仍然有一些依赖项在SPM中没有。

现在我想尽可能多地将依赖项迁移到SPM,并在必要时将其他依赖项保留在Cocoapods中 - 这是否可行?同时拥有Cocoapods和SPM?


2
你解决了吗?我也遇到了同样的问题。 - Adam
5个回答

31

我刚刚在我的iOS项目中尝试了CocoaPods和SPM的结合,它可以正常工作。
我正在使用CocoaPods添加Firebase和其他Google库,剩下的则使用Swift Package Manager添加。

当添加SPM依赖时,请在您的项目上打勾,而不是在Pods项目上打勾。

Xcode 11.5,
CocoaPods 1.9.3。


1
有没有一个你可以上传到公共场所的版本?我对你是如何做到的很感兴趣... - swalkner
2
如果您的私有包依赖于CocoaPod库,您有办法链接到它吗? - ShaLi Shaltiel
4
您应该提供答案,而不仅仅是说明它是如何工作的... - Paul
2
@Paul,我使用 pod install 添加了 CocoaPods,然后使用“文件”→“Swift Packages”→“添加包依赖项”,并选中我的项目(而不是 Pods 项目)来添加 SPM 依赖项。 - Pavel Alexeev
1
@PavelAlexeev 谢谢,我已经完成了。非常感谢您的回复。我只是在同一个项目中使用 SPM 添加了一个包,而我之前已经使用了 CocoaPods/其他包,没有任何问题。 - Paul

2
从XCode 14.2和CocoaPods 1.13开始,你绝对可以继续在CocoaPods旁边使用Swift Package Manager,这对于逐步迁移依赖项非常有帮助。
自2020年以来,这个过程有些变化,所以这里是更新后的版本。
  1. 点击文件,然后在列表顶部点击添加包

  2. 一个窗口应该会打开,列出了您可以添加为依赖项的苹果包。右上角有一个搜索栏,您可以在其中粘贴您需要的依赖项的 Github 包 URL。这样做将从 Github 获取该包,并允许您在添加之前设置依赖项。

  3. 一旦获取了您需要的依赖项,请输入您想要的版本以及您希望 XCode 更新的程度(因为它会自动为您更新包)。通常情况下,选择最新主要版本是可以的,因为它会将您输入版本为 1.1 的包一直更新到 1.99,而不会跳到可能引入破坏性变更的 2.0 版本。

  4. 最重要的部分是,在添加包之前,请确保使用添加到项目下拉菜单选择您特定项目的名称,而不是使用 Cocoapods 在使用时为您创建的 Pods 项目。

  5. 一旦您确定设置正确,点击添加包,您就可以完成设置了。

除了这些步骤之外,值得注意的是,您应该提交将要构建的swiftpm文件夹,更具体地说,Package.resolved文件应该包含在您的源代码控制/git中。
此外,如果在添加SPM依赖后项目无法正确构建,请转到项目并点击清理构建文件夹。然后尝试重新构建您的应用程序。如果遇到任何其他构建问题,请在实际将import TheNewDependencyName添加到您的项目或测试中时重复此过程。您还可以尝试在清理完成后关闭并重新打开XCode,这有时似乎有助于常常棘手的XCode。
如果始终使用Cocoapods,则必须继续使用在项目的根文件夹中创建的xcworkspace文件打开项目。

1

试用后,我发现你实际上可以让SPM和Cocoapods很好地配合使用。在.xcodeproj上安装SPM库,同时在.xcworkspace上进行开发。这一切都有效(至少对我来说是这样的lol)。

如果您正在使用CI,或者从xcodebuild命令手动启动一些调整,可以使用-clonedSourcePackagesDirPath标志。


0

我一开始使用了Swift包管理器,并在我的项目中添加了4个软件包。当我不得不集成admob sdk时,我向我的项目中添加了CocoaPod。 但是,在打开.xcworkspace文件后,软件包的状态显示为“缺失”。我不得不逐个从SPM添加它们。在重新添加了所有4个软件包后,项目可以再次构建和执行。


-8

5
这个问题不是关于SPM的优缺点。 - Roman Podymov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接