【问题标题】:Warning: unnecessary check for minimum deployment target警告:对最小部署目标的不必要检查
【发布时间】:2015-12-08 15:46:07
【问题描述】:

我有一个 Swift 类,它与具有不同部署目标的多个目标相关联,主项目具有 iOS 7 最低要求,并且有一个针对 iOS 8 目标的扩展。

现在当我编译项目时,编译器会在这行代码上抛出警告:

    if #available(iOS 8.0, *) { ... }

“对 'iOSApplicationExtension' 的不必要检查;最小部署目标确保保护始终为真”

我检查了构建设置选项,发现没有关闭快速警告的开关。

我尝试通过这一行单独定义 iOSApplicationExtension 版本目标但没有成功:

    if #available(iOS 8.0, iOSApplicationExtension 8.0, *) { ... }

有没有办法抑制这个烦人的消息?

【问题讨论】:

  • 看到这个链接可能对你有帮助forums.developer.apple.com/thread/15030
  • 扩展的最低部署目标很可能是 iOS 8。这意味着#available(iOS 8.0, 0) 将始终为真,即没有必要。
  • @ILikeTau 应用扩展仅适用于 iOS 8+。这就是我这样做的原因。
  • 是的,但是你的部署目标是一样的,所以你不需要if
  • @ILikeTau 我的主应用程序最低要求是 iOS 7,扩展是 iOS8。他们都使用相同的文件/类。所以我必须检查主应用程序的版本。不能省略。

标签: ios swift swift2 suppress-warnings ios-extensions


【解决方案1】:

找到了一种使警告静音的丑陋解决方法,但我希望有更好的方法:

在 iOS 8+ 目标构建设置中,我在 Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags 中定义了一个预编译标志:

-D iOS8target

然后我把代码改成这样:

#if iOS8target
    // iOS 8+ compatible code
#else
    if #available(iOS 8.0, *) {
        // repeat iOS 8+ compatible code again!
    } else {
        // iOS 7 code
    }
#endif

它没有重构和丑陋,但它有效!

更新: 有一个快速编译器开关-suppress-warnings 可以忽略所有警告。但它也会抑制有用的警告。 此外,如果只有一个特定文件发出警告,您可以在 Building Phases 窗格中使用 -w 标志。它还会抑制有用的警告,但仅限于一个文件。

【讨论】:

  • 我宁愿接受警告:S
【解决方案2】:

请将您的部署目标检查到您的 General 中并从 9.0 开始设置 到 7.0 或更低。此警告将自动删除。

【讨论】:

  • 有不同的项目使用相同的源文件。不能改变它。有些需要 8 岁以上
  • 如果 ios8+ 已弃用,那么您必须同时为新旧类编写代码。没有选择。尝试将部署目标设置为 8。
【解决方案3】:

Cocoapod 的下一个版本(0.39.0 之后)应该解决这个问题。更多详情请查看this

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多