Предупреждение: ненужная проверка минимальной цели развертывания

У меня есть класс Swift, который связан с несколькими целями с разными целями развертывания, основной проект имеет минимальное требование iOS 7, и есть расширение с целью iOS 8.

Теперь, когда я компилирую проект, компилятор выдает предупреждение в этой строке кода:

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

"Ненужная проверка для" iOSApplicationExtension "; минимальная цель развертывания гарантирует, что защита всегда будет правдой"

Я проверил параметры настройки сборки и не нашел никакого переключателя, чтобы убивать быстрые предупреждения.

Я попытался определить целевую версию iOSApplicationExtension отдельно по этой строке, но безуспешно:

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

Есть ли способ подавить это раздражающее сообщение?

Ответ 1

Нашел уродливое обходное решение для предупреждения о молчании, но я надеюсь, что есть лучший способ:

В настройках сборки iOS 8+ я определил флаг предварительной компиляции в настройках сборки → Swift Compiler - Пользовательские флаги → Другие быстрые флаги:

-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

Он не реорганизован и уродлив, но он работает!

UPDATE: Существует быстрый переключатель компилятора -suppress-warnings, чтобы опустить все предупреждения. Но это также подавляет полезные предупреждения. Также, если есть только один конкретный файл, который генерирует предупреждения, вы можете использовать флаг -w в панели "Фазы построения". Он также будет подавлять полезные предупреждения, но ограничивается одним файлом.

Ответ 2

В следующей версии Cocoapod (после 0.39.0) должна быть рассмотрена эта проблема. Чтобы узнать подробности, этот.

Ответ 3

Пожалуйста, проверьте цель развертывания в своем General и установите с 9.0 до 7,0 или менее. это предупреждение будет автоматически удалено.