在Xcode中禁用来自框架的警告

74

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

虽然我不在意这些警告,但它们会干扰视线,容易错过真正的警告信息。有没有办法禁用这些库特定的警告呢?

5个回答

162
  1. 如果你的第三方库被添加为单独的目标,你可以为该目标勾选Inhibit all warnings以关闭所有警告。

  2. 如果你的库被作为纯源文件添加到当前目标中,你可以为每个单独的源文件设置编译器标志-w来静默所有警告。你需要前往目标配置的Build phases菜单,并在Compile Sources章节中双击每个文件,输入-w标志。 enter image description here


12
这绝对是正确的方法。不要修改第三方代码,也不要全局关闭警告。另一种类似的方法是将第三方代码移动到一个单独的项目中并构建一个静态库。这样它就可以拥有自己的构建设置。 - Rob Napier
1
偶尔,我会无意中找到一个答案,希望我至少能给它点赞几次。这就是其中之一。 - BP.
这篇文章提供了有关个别文件标志的一些额外细节。他们建议使用“-w -Xanalyzer -analyzer-disable-checker”。 - KPM
1
我在Xcode 7.2.1中尝试了这个,但是收到了一个错误消息,建议我将“-analyzer-disable-checker”替换为“-analyzer-disable-all-checks”。 - bruce1337
11
如果库是静态的,我只有在“Build Phases” > “Link Binary With Libraries”下一个thirdPartyLibraryFile.a文件。在该部分下没有编译器标志选项。 - jotaEsse
另外,如果目标使用Swift,您还应该在“Swift编译器 - 警告策略”中将“抑制警告”设置为“是”。 - iComputerfreak

19
如果您正在使用Pods,您可以将以下内容添加到您的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!,如下所示:https://dev59.com/rmYs5IYBdhLWcg3wBvRp - pseudosudo
1
请注意,不建议添加“inhibit_all_warnings!”标志,因为每次执行“pod install”时都会被覆盖。我更喜欢在Podfile中设置。 - Luiz Dias

8

如果警告来自于包含的库或框架头文件,您可以像这样包装包含语句:

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

在第二行上放置你的警告标志。你可以在这里查找警告标志: https://clang.llvm.org/docs/DiagnosticsReference.html


0

如果警告来自于使用Carthage添加的框架(例如Rollbar):

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

enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here

最后,针对应用程序目标,执行normal Carthage setup(即创建一个新的运行脚本阶段来执行copy-frameworks脚本以复制Rollbar框架)。

enter image description here


0
如果你正在使用第三方静态库(`libSomething.a`)并且从该库导入头文件,那么在Xcode 15中,以下方法可以消除所有警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Weverything"
#include "someHeader.h"
#include "someOtherHeader.h"
#pragma clang diagnostic pop
(我看到一些旧评论说,在旧版本的Xcode上,-Weverything不起作用,但至少在15上是可以的。)这比在Clang的19457个标志列表中查找单个警告标志要方便得多。

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