2015-09-12 13 views
14

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

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

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

«Ненужные чек на„iOSApplicationExtension“, минимальная цель развертывания обеспечивает ограждение всегда будет истинным»

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

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

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

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

+1

см ссылка может помочь с вами https://forums.developer.apple.com/thread/15030 –

+1

Скорее всего, вашим минимальным уровнем развертывания для расширения является IOS 8. Это будет означать, что '#available (iOS 8.0, 0) 'всегда будет истиной, т. е. она не нужна. –

+0

Расширения приложений @ILikeTau работают только на iOS 8+. вот почему я сделал это. – Mousavian

ответ

1

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

В IOS 8+ цели создания настроек, я определил флаг прекомпиляции в настройках Build -> Swift Compiler - Пользовательские Флаги -> Другие Swift Флаги:

-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 в панели «Фазы здания». Он также подавляет полезные предупреждения, но ограничивается одним файлом.

+4

Я предпочел бы жить с предупреждением: S – nobre

1

В следующем выпуске Cocoapod (после 0.39.0) должна быть рассмотрена эта проблема. Проверьте this для более подробной информации.

0

Проверьте цель развертывания в своем генераторе и установите его с 9.0 до 7.0 или менее. это предупреждение автоматически удаляется.

+0

есть разные проекты, которые используют тот же исходный файл. не может его изменить. некоторые должны быть 8+ – Mousavian

+0

, если устарели от ios8 +, тогда вам нужно кодировать как старый, так и новый класс. есть вариант. попробуйте установить цель развертывания на 8. –