当使用Cocoapods时忽略Xcode警告

487

我使用了很多第三方库,在最新的Xcode更新后,这些库中有很多警告(例如Facebook SDK pod)。现在所有这些警告都出现在我想看到自己警告或错误的位置。

有没有方法可以忽略这些错误?修复它们是没有帮助的,因为每次执行“pod install”后更改都会被丢弃。

4个回答

1101

将以下内容添加到您的Podfile文件中:

platform :ios

# ignore all warnings from all pods
inhibit_all_warnings!

# ignore warnings from a specific pod
pod 'FBSDKCoreKit', :inhibit_warnings => true

然后执行:pod install


3
如何加入这个?目前我使用 s.dependency 'Facebook-iOS-SDK' s.inhibit_all_warnings! 但我得到了以下错误: #<Pod::Specification for MyApp(1.0)>没有定义'inhibit_all_warnings!'方法。 - KrauseFx
26
如何解决以下问题:我希望在某些 Pod 中隐藏警告,而不是全部隐藏。 - KrauseFx
6
抱歉,没看到你的评论。为了记录,现在你可以按照Podfile文档中的示例,在每个pod上单独禁用警告:http://docs.cocoapods.org/podfile.html#inhibit_all_warnings_bang - alloy
2
@JohanKarlsson 移除该指令并运行 pod install 重新生成 Pods.xcodeproj。 - alloy
1
请注意,这并不排除在“分析”阶段出现警告(问题)。我在另一个答案中提供了一些建议。 - Jedidja
显示剩余8条评论

39
你可以在项目工作区的PodBundle的Xcode构建设置中搜索"inhibit_all_warnings"。将值设置为"YES",它将隐藏所有的Pod文件警告。如果你对工作区执行此操作,它还将隐藏所有项目警告。

这是一个更简单的解决方案,将其设置在Pods项目上,它只会禁用与Pod相关的警告,而不是您项目中的警告。无需重新执行pod install。 - Andres Canella
36
不建议这样做!在下一次运行 pod install 时,此设置将被覆盖,因此最好在 Podfile 中进行设置! - electronix384128
4
就我个人而言,我喜欢这样做,这样每次更新时我都会记得快速查看所有警告,并确保它们是可以忽略的。 - Andres Canella
对于本地开发 pod 的 podspec 中的依赖关系怎么处理? - Ari Braginsky
1
您还可以设置 Swift Compiler - Warnings Policies > Suppress WarningsYes...即使使用了 inhibit_all_warnings,我仍然在 Pods 中收到了 'characters' is deprecated: Please use String or Substring directly 的警告。这个设置移除了这个警告。 - Tiois

21

步骤:1 将以下脚本放入您的Podfile中。

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = "YES"
        end
    end
end

第二步:执行pod install命令。


7
对于Swift Pods,我还需要添加以下内容: config.build_settings['SWIFT_SUPPRESS_WARNINGS'] = "YES"。 (注:此代码用途为禁止Swift编译器输出警告信息。) - pstoppani

8
尽管这个答案可以在构建阶段消除警告,但它似乎并没有完全修复Analyze阶段(这导致我们的CI构建仍然存在问题)。
对我而言(除了接受的答案),解决方法是:
  • 从项目导航器中选择 Pods 项目。

  • 选择实际的 Pod- 目标并单击 Build Settings

  • 使用短语 compiler flags 进行过滤。

  • 添加一个新的 Other C Flags,其值为 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer core(或需要禁用的其他分析器)。此答案提供了要尝试的所有标志的完整列表,请点赞!

    然而,在 Xcode 6.3.1 中的clang版本似乎不包括insecureAPI,因此您可以将其从该列表中删除。"当前"完整列表为:-w -Xanalyzer -analyzer-disable-checker -Xanalyzer alpha -Xanalyzer -analyzer-disable-checker -Xanalyzer core -Xanalyzer -analyzer-disable-checker -Xanalyzer cplusplus -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode -Xanalyzer -analyzer-disable-checker -Xanalyzer debug -Xanalyzer -analyzer-disable-checker -Xanalyzer llvm -Xanalyzer -analyzer-disable-checker -Xanalyzer osx -Xanalyzer -analyzer-disable-checker -Xanalyzer security -Xanalyzer -analyzer-disable-checker -Xanalyzer unix

请注意,将此设置为 Pods 项目或 Pods 目标上不起作用。我不确定为什么,但您必须为每个实际的 Pod- 目标设置它。

您还可以在每个文件的基础上设置编译器标志(例如 -w -Xanalyzer -analyzer-disable-checker -Xanalyzer core)。

我也尝试了其他几种方法(可能需要除上述方法之外),它们是在 Pods 项目本身上执行的。


[1]

  • 使用短语分析器进行筛选
  • 确保 构建期间分析 设置为 NO
  • 将所有设置更改为 NO(包括 不恰当的内存管理

[2]

  • 使用短语警告进行筛选
  • 禁止全部警告 更改为 YES

由于某种原因,即使在方案中禁用 分析 步骤似乎也无效。

转到 产品 > 方案 > 管理方案 窗口,从列表中单击每个 Pod-*,然后单击 编辑 按钮。 在左侧列表上单击 Build,然后在右侧为 Pod 目标取消选中 Analyze

我仍然困惑,为什么我不能完全禁用分析 Pods,尽管我希望这可能与方案构建设置中的“查找隐式依赖项”有关。 如果未选中该选项,似乎需要发生其他事情,才能将应用程序链接到 Pods。


1
жіЁж„ҸпјҡеҰӮжһңжӮЁеңЁдҪҝз”Ё.gitignoreж—¶е°ҶPodsе’Ң.xcworkspaceд»ҺеӯҳеӮЁеә“дёӯжҺ’йҷӨпјҢйӮЈд№ҲиҝҷеҜ№CIжҳҜжІЎжңүеё®еҠ©зҡ„гҖӮ - RileyE
@RileyE 很有趣 - 排除这些文件的好理由是什么?如果有的话,那么这个页面上的另一种技术对你是否有效?(我还是相对新手的iOS开发者,非常想学习更多) - Jedidja
有关是否应该包含它,存在很大的分歧。我不喜欢包含它,因为我更喜欢确保我的 Podfile 始终准确无误,并且我发现不同用户的 Podfile.lock 和 .xcworkspaces 之间存在一些冲突。这只是一个有着强烈争议的偏好,具有可辩论的优缺点。 - RileyE
@RileyE 感谢您提供的信息!那么,如果我们排除了Pods/.xcworkspace,是否就没有解决问题的方法了呢? - Jedidja
很遗憾,这就是为什么我一直在推动pod install上增加额外标志的原因。 - RileyE

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