从框架禁用Xcode中的警告


69

我已将three20项目导入到我的项目中,当我使用iOS 5升级到Xcode 4.2时,项目中出现了一系列警告。

我不在乎它们,但是它们会发出很多噪音,现在很容易错过我项目中的任何实际警告。有没有一种方法可以为那些特定的库禁用警告?

Answers:


158
  1. 如果您将第三方库添加为单独的目标,则可以检查Inhibit all warnings该特定目标以关闭所有警告。

  2. 如果将库作为纯源文件添加到当前目标,则可-w以为单个源设置编译器标志,以使它们中的所有警告均静音。您必须转到Build phases目标配置菜单,Compile Sources然后通过双击每个文件结尾输入-w标志来为每个源文件中的部分设置此标志。 在此处输入图片说明


12
这绝对是正确的方法。不要修改3rdparty代码,也不要全局关闭警告。另一种类似的方法是将3rdparty代码移到一个单独的项目中并构建一个静态库。这样,它可以拥有自己的构建设置。
罗布·纳皮尔

1
每隔一段时间,我都会迷惑于一个答案,希望我至少可以投票几次。这是那些时代之一。
BP。

本文提供了有关各个文件标志的其他一些详细信息。他们建议使用-w -Xanalyzer -analyzer-disable-checker
KPM 2015年

1
我在Xcode 7.2.1中尝试了此操作,并收到一条错误消息,提示我替换-analyzer-disable-checker-analyzer-disable-all-checks
bruce1337 '16

9
如果库是静态的怎么办?在“构建阶段”>“将二进制文件与库链接”下,我只有一个thirdPartyLibraryFile.a。该部分下没有编译器标志选项。
jotaEsse

17

如果您使用的是Pod,可以将其添加到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

4
较短的解决方案是按如下所述加总inhibit_all_warnings!顶部:stackoverflow.com/questions/13208202/…–
pseudosudo

7

如果警告来自所包含的库或框架头文件,则可以包装包含以下语句:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#pragma clang diagnostic pop

将警告标记放在上方的第二行。您可以通过ClangWarnings.com上的警告消息查找警告标志


0

如果警告来自与迦太基一起添加的框架(对我来说是Rollbar):

  1. 将一个新的框架目标(即RollbarWrapper)添加到您的项目中,并将其嵌入到您的应用程序目标中

在此处输入图片说明

  1. 将构建的框架从中Carthage/Build/<platform>拖入Xcode,将其添加到刚创建的虚拟/包装器框架中(RollbarWrapper)

在此处输入图片说明

  1. 确保将框架(Rollbar)添加到虚拟/包装框架(RollbarWrapper)目标的“框架和库”部分,并将其设置为“不嵌入”

在此处输入图片说明

  1. 转到虚拟/包装器框架的构建设置(RollbarWrapper)并将“禁止所有警告”设置为“是”

  2. 接下来,将框架(滚动条)添加到应用程序目标的“框架,库和嵌入式内容”部分,并将其设置为“不嵌入”

在此处输入图片说明

  1. 最后,对于应用程序目标,执行常规的迦太基设置(即,创建一个新的运行脚本阶段以执行copy-frameworks脚本以复制Rollbar框架)

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.