【问题标题】:Many build errors after pod updatepod 更新后的许多构建错误
【发布时间】:2018-05-05 02:09:16
【问题描述】:

我的项目中安装了许多 pod。自从我上次更新 pod 以来,一切都运行良好。上次更新 pod 后,我有 28 个以“无法构建模块 xxx”开头的构建错误。

这是我的 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 文件和 derivedData 文件夹...仍然出现这些错误。

我的想法已经不多了。请问,还有什么解决办法吗? 非常感谢你

编辑

我刚刚发现我的 Pods.framework 处于红色状态,如下面的屏幕截图所示。也许这有帮助?

【问题讨论】:

  • Podfile 顶部有这个吗source 'https://github.com/CocoaPods/Specs.git'
  • 您是否尝试清理构建文件夹?
  • 检查您的平台版本。给8.2及以上
  • @Alwin :这是 Xcode 9.0 和部署目标 iOS 9.0。
  • @the4kman 是的,我尝试清理构建文件夹并删除派生数据文件夹。

标签: ios swift xcode cocoapods


【解决方案1】:

你正在做 pod update 更新所有库 swift4 上的大多数库仍然有一些在 swift3

如果库在 swift 4 中,而您的项目在 swift 3.2 中,您有两种可能性

  1. 您可以将项目迁移到 swift4

(或)

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

如果项目在 swift3 中的 swift4 库中,您需要将这些库迁移到 swift4 中以解决当前问题

【讨论】:

  • 您好 Ganesh,谢谢。我的项目已经在 swift 4 中。我还检查了我的 Pod 项目目标,也都在 swift 4 中。但是我看不到目标 Pods-myproject 使用的 swift 版本
【解决方案2】:

首先尝试完全去除可可豆荚

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

【讨论】:

  • [!] Unknown command: clean Did you mean: cache? 运行后pod clean
【解决方案3】:

可能导致问题的原因:
- Pod/API 的重大变化
- 由于支持/不支持 Swift 版本而导致的重大更改

如果您使用的是版本控制系统(Git 等)。 检索旧版本的 Podfile.lock

读取该文件(它是一个文本文件,您可以在 Terminal.app 中执行 more somePath/Podfile.lock),您的 pod 的“显式”版本应该在那里。

你应该得到类似的东西:

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

COCOAPODS: 1.1.1

当您执行pod 'Firebase' 时,您没有指定版本,因此您应该获取最后一个版本。但如果某些版本不兼容,您可能会遇到问题。

所以您可以添加'~> 1.0.3'(例如,如果我以GSKStretchyHeaderView 为例)。更多使用方法here.

因此,当一切正常时,您应该重新使用旧版本。现在,您可以检查每个 pod 的文档(以及它们各自的 podspec 以查找“隐藏”依赖项)并逐个更新它们,检查哪个是罪魁祸首,然后可能会在它们的 repo/git 上竖起一个标志(一个问题)如果需要。

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

如果您不使用 Git 之类的版本控制系统,我强烈建议您现在就使用。 但如果这是你的情况,你仍然有问题。记住在pod update/install 之后一切正常的日期。然后,转到您的 pod 的每个 Git,并阅读历史记录以查找该日期的版本,并在您的 podfile 中为该 pod 设置该版本。

【讨论】:

  • 我喜欢逐个更新 pod 以查找错误的想法。我会回复你的。
【解决方案4】:

您可能使用旧的 pod 存储库,并且在更新后(几个月前)您需要指定要使用的 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

【讨论】:

    【解决方案5】:

    更新 Xcode 可以解决这个问题。问题是,pod 可能支持多个 swift 版本,因此 pod 应该能够指定一系列 swift 版本。

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

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2019-04-14
      • 2019-11-05
      • 2018-08-07
      • 2013-06-12
      • 2017-02-08
      • 2014-11-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多