【问题标题】:Disable warnings in Xcode from frameworks从框架中禁用 Xcode 中的警告
【发布时间】:2011-12-21 07:25:51
【问题描述】:

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

我不在乎它们,但它们会产生很大的噪音,而且现在我的项目中很容易错过任何真正的警告。有没有办法禁用这些特定库的警告?

【问题讨论】:

    标签: xcode xcode4.2 compiler-warnings suppress-warnings


    【解决方案1】:
    1. 如果您的第三方库被添加为单独的目标,您可以检查 Inhibit all warnings 以获取该特定目标以关闭所有警告。

    2. 如果您的库作为纯源文件添加到当前目标,您可以为各个源设置 -w 编译器标志以静音其中的所有警告。您必须转到目标配置的Build phases 菜单并通过双击每个文件末尾输入-w 标志为Compile Sources 部分中的每个源文件设置此标志。

    【讨论】:

    • 这绝对是正确的做法。不要修改 3rdparty 代码,也不要全局关闭警告。另一种类似的方法是将 3rdparty 代码移动到一个单独的项目中并构建一个静态库。这样它就可以拥有自己的构建设置。
    • 每隔一段时间,我都会笨拙地回答一个我希望我能至少投票几次的答案。这是其中之一。
    • This article 提供了有关各个文件标志的一些其他详细信息。他们建议使用-w -Xanalyzer -analyzer-disable-checker
    • 我在 Xcode 7.2.1 中尝试过此操作并收到一条错误消息,提示我将 -analyzer-disable-checker 替换为 -analyzer-disable-all-checks
    • 如果库是静态的怎么办?我在“构建阶段”>“将二进制文件与库链接”下只有一个 thirdPartyLibraryFile.a。该部分下没有编译器标志选项。
    【解决方案2】:

    如果您使用的是 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
    

    【讨论】:

    • 较短的解决方案是在顶部添加inhibit_all_warnings!,如:stackoverflow.com/questions/13208202/…
    • 请注意,不建议添加inhibit_all_warnings! 标志,因为每当执行pod install 时它都会被覆盖。我更喜欢在 Podfile 中设置
    【解决方案3】:

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

    #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

    【讨论】:

      【解决方案4】:

      如果警告来自 Carthage 添加的框架(对我来说是 Rollbar):

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

      1. 将构建的框架从 Carthage/Build/&lt;platform&gt; 拖到 Xcode 中,将其添加到您刚刚创建的 dummy/wrapper 框架 (RollbarWrapper)

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        • 2014-01-29
        相关资源
        最近更新 更多