pod更新后出现许多构建错误

4

我在项目中安装了许多pod。自从最近一次pod更新后,一切都很正常。但是在最近的pod更新后,我遇到了28个构建错误,以“无法构建模块xxx”开头。

enter image description here

这是我的Podfile:

target 'projectXXX' do
use_frameworks!
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'
pod 'Firebase/Messaging'
pod 'Firebase/Crash'
pod 'TwitterKit'
pod 'Fabric'
pod 'Crashlytics' end
  • 我尝试卸载-安装cocoapods。
  • 我尝试从项目中删除pod,安装,删除.workspace文件和deriveData文件夹...仍然出现这些错误。

我已经没有更多的想法了。请问还有其他解决方案吗? 非常感谢

编辑

我刚刚发现我的Pods.framework处于红色状态,如下图所示。也许这可以帮助解决问题?

enter image description here


你的 Podfile 文件顶部是否有这一行代码 source 'https://github.com/CocoaPods/Specs.git' - zombie
@the4kman 是的,我尝试清理构建文件夹并删除派生数据文件夹。 - GrayFox
@zombie 我从来没有见过我们需要添加这行代码!不过我尝试了一下,但结果没有改变。 - GrayFox
@GrayFox,你在项目中如何导入 FBSDKLoginKit 依赖呢? - Massimiliano Del Maestro
你的 Swift 版本是多少?所有的 pods 都兼容你当前的 Swift 版本吗?你应该为你的 pods “block” 版本(使用 '~> 3.0')。如果你使用 Git(或任何版本控制系统),你应该能够看到 Podfile.lock 文件,其中列出了所有之前的版本,并找到那些已被更新但不支持的罪魁祸首。 - Larme
显示剩余11条评论
5个回答

1

首先尝试完全移除 CocoaPods

gem install cocoapods-deintegrate
pod deintegrate
gem install cocoapods-clean
pod clean

然后像这样重新安装。
pod setup
open -a Xcode Podfile

在 Pod 文件中添加如下内容。
# Uncomment this line to define a global platform for your project
platform :ios, '10.0'
# Uncomment this line if you're using Swift
use_frameworks!
target 'TestProject' do
pod 'Firebase'
pod 'Firebase/Database'
pod 'Firebase/Auth'
pod 'Firebase/Storage'
pod 'Firebase/Messaging'
pod 'Firebase/Crash'
pod 'TwitterKit'
pod 'Fabric'
pod 'Crashlytics'
end
target 'ProjectTests' do
end

pod install

1
[!] Unknown command: clean Did you mean: cache? after run pod clean - emrcftci

0

有可能您使用的是旧的Pods存储库,在更新后(几个月前)需要指定要使用哪个Pod存储库。我建议您使用旧的存储库。请看一下我的旧项目的Pod文件:

source 'https://github.com/CocoaPods/Old-Specs.git'

platform :ios, '9.0'
use_frameworks!

xcodeproj 'SF'

#link_with 'SF'

target 'SF' do
    pod 'TransitionKit'
    pod 'MBProgressHUD'
    pod 'PureLayout'
    pod 'UICountingLabel'
    pod 'MWPhotoBrowser', :git => 'https://github.com/pash3r/MWPhotoBrowser.git', :branch => 'skyFlyWork'
end

0

可能导致问题的原因:
- Pods/APIs中的重大更改
- 由于支持/不支持Swift版本而导致的重大更改

如果您正在使用版本控制系统(Git等),请检索旧版本的Podfile.lock

阅读该文件(它是一个文本文件,您可以在Terminal.app中执行more somePath/Podfile.lock命令),您的Pods的“明确”版本应该在那里。

您应该会得到类似以下的内容:

PODS:
  - GSKStretchyHeaderView (1.0.3)
  - Masonry (1.1.0)
...
PODFILE CHECKSUM: someCheckSum

COCOAPODS: 1.1.1

当你执行 pod 'Firebase' 时,你没有指定版本,所以你应该得到最新的版本。但是如果某些版本不兼容,你可能会遇到问题。

因此,你可以添加'~> 1.0.3'(例如,如果我采用GSKStretchyHeaderView 的例子)。更多关于如何使用它的信息请参考 这里

这样,当一切正常工作时,你应该回到旧版本。现在,你可以检查每个 pods 的文档(以及它们各自的 podspec,寻找“hidden”依赖项),然后逐个更新它们,检查哪个是罪魁祸首,然后如果需要,可能会在他们的 repo/git 上提出一个标记(问题)。

对于下一个开发版本,我建议至少使用“乐观运算符~>”来设置“版本”。如果他们遵守版本规则(主要/次要/补丁),那么至少确定主要/次要版本,补丁不应该破坏任何东西,而是修复问题。次要版本可能会有破坏性的更改,而主要版本很可能与以前的工作不兼容(不同的声明、类重命名等)。

如果您没有像Git这样的版本控制系统,我强烈建议您现在开始使用。 但如果您仍然存在问题,请记住在pod update/install之后一切正常的日期。然后,进入每个Pod的Git,阅读历史记录以找到该日期的版本,并在您的Podfile中为该Pod设置该版本。


我喜欢逐个更新pod以找到错误的想法。我会回复你的。 - GrayFox

0

更新Xcode可以解决此问题。问题在于,Pods可能支持多个Swift版本,因此Pods应该能够指定一系列的Swift版本。

在更新之前,请检查目标的构建设置中是否删除了PODS_ROOT用户定义值,可能是意外的。如果是这样,请尝试添加PODS_ROOT=${SRCROOT}/Pods


0

当你执行 pod update 命令时,会更新所有库,其中大部分库都是基于 swift4 的,但仍有一些库是基于 swift3 的。

如果库是基于 swift4 而你的项目是基于 swift 3.2,则有两种可能性:

  1. 你可以将项目迁移到 swift4。

(或者)

  1. 你需要回滚到支持 swift 3.2 的 pods。

如果项目是基于 swift4 而库是基于 swift3,则需要将这些库迁移到 swift4 以解决当前问题。


你好 Ganesh ,谢谢。我的项目已经是 swift 4 了。我也检查了我的 Pod 项目目标,它们也都是 swift 4。然而,我看不到用于目标 Pods-myproject 的 Swift 版本。 - GrayFox

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