Игнорировать предупреждения Xcode при использовании Cocoapods

417

Я использую довольно много сторонних библиотек, которые содержат много предупреждений после последних обновлений XCode. (например, модуль SDK Facebook) Теперь все эти предупреждения отображаются в моем X-коде в том месте, где я хочу увидеть свои собственные предупреждения или ошибки.

Есть ли способ игнорировать эти ошибки? Исправить их не поможет, так как после каждой "установки pod" изменения отменяются.

KrauseFx
источник

Ответы:

968

Добавьте к вашему Podfile:

platform :ios

# ignore all warnings from all pods
inhibit_all_warnings!

# ignore warnings from a specific pod
pod 'FBSDKCoreKit', :inhibit_warnings => true

Затем выполните: pod install

сплав
источник
3
Как мне это включить? В настоящее время я использую s.dependency 'Facebook-iOS-SDK' s.inhibit_all_warnings! и я получаю следующее сообщение об ошибке: неопределенный метод'hibit_all_warnings! ' для # <Pod :: Спецификация для MyApp (1.0)>
KrauseFx
22
Как я могу решить следующую проблему: я хочу, чтобы предупреждения были скрыты для некоторых модулей, но не для всех.
KrauseFx
3
@krausefx Извините, не видел ваш комментарий. Ради потомков теперь вы можете отключить предупреждения для каждого модуля, как показано в документах Podfile
сплава
2
@JohanKarlsson Удалите директиву и запустите pod installдля регенерации Pods.xcodeproj.
сплав
1
Обратите внимание, что это не исключает появления предупреждений (проблем) во время Analyzeфазы. Я предложил несколько предложений для этого в другом ответе.
Джедиджа
28

Вы можете выполнить поиск «injit_all_warnings» в настройках сборки xcode PodBundle в вашем рабочем пространстве проекта, установив значение «YES», оно будет скрывать все ваши предупреждения файла Pod.

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

Теджа Сваруп
источник
Это более простое решение, установите его в проекте pods, и оно отключит только предупреждения, относящиеся к pod, а не предупреждения вашего проекта. Нет необходимости повторно выполнять установку модуля.
Андрес Канелла
28
Не рекомендуется! Со следующим pod installэтот параметр переопределяется, поэтому лучше установить его в Podfile!
Electronix384128
4
Лично мне это нравится, так что каждое обновление, которое я помню, позволяет быстро просмотреть все предупреждения и убедиться, что они пренебрежимо малы.
Андрес Канелла
как насчет зависимостей в podspec для локального модуля pod?
Ари Брагинский
Вы также можете установить Swift Compiler - Warnings Policies> Suppress Warningsна Yes... с тем, что у inhibit_all_warningsменя все еще было 'characters' is deprecated: Please use String or Substring directly предупреждение в Pods. Этот параметр убрал это предупреждение.
Tiois
6

Хотя этот другой ответ удалит предупреждения во время фазы сборки, он, похоже, не полностью исправит Analyzeфазу (из-за которой у нашей сборки CI все еще были проблемы).

Что сработало для меня (в дополнение к принятому ответу):

  • Нажмите на Podsпроект из навигатора проекта
  • Выберите актуальную Pod-цель и нажмитеBuild Settings
  • Фильтр с фразой compiler flags
  • Добавьте новое Other C Flagsсо значением -w -Xanalyzer -analyzer-disable-checker -Xanalyzer core(или любым другим анализатором, который вам нужен) - в этом ответе представлен полный список флагов, которые вы можете попробовать - пожалуйста, добавьте его!

    Версия clangв Xcode 6.3.1, тем не менее, кажется, не включает, insecureAPIпоэтому вы можете удалить ее из этого списка. «Текущий» полный список-w -Xanalyzer -analyzer-disable-checker -Xanalyzer alpha -Xanalyzer -analyzer-disable-checker -Xanalyzer core -Xanalyzer -analyzer-disable-checker -Xanalyzer cplusplus -Xanalyzer -analyzer-disable-checker -Xanalyzer deadcode -Xanalyzer -analyzer-disable-checker -Xanalyzer debug -Xanalyzer -analyzer-disable-checker -Xanalyzer llvm -Xanalyzer -analyzer-disable-checker -Xanalyzer osx -Xanalyzer -analyzer-disable-checker -Xanalyzer security -Xanalyzer -analyzer-disable-checker -Xanalyzer unix

Обратите внимание, что установка этого в PodsProject или PodsTarget не будет работать . Я не уверен почему, но вы должны установить это для каждой фактической Pod-цели.

Вы также можете установить флаги компилятора ( -w -Xanalyzer -analyzer-disable-checker -Xanalyzer coreи т. Д.) Для каждого файла отдельно .

Я также попробовал несколько других методов (которые могут или не могут потребоваться в дополнение к вышеупомянутому). Они были выполнены на самом PodsПроекте.


[1]

  • Фильтр с фразой analyzer
  • Убедитесь, что Analyze During 'Build'установлено NO.
  • Измените все настройки на NO(включая Improper Memory Management)

[2]

  • Фильтр с фразой warnings
  • Изменить inhibit all warningsнаYES

По некоторым причинам даже отключение Analyzeшага в схеме не работает.

Зайдите в Product > Scheme > Manage Schemesокно, щелкните по каждому Pod-*из списка и нажмите Editкнопку. Нажмите Buildна список слева, а затем снимите флажок Analyze с правой стороны для Podцели.

Я все еще не понимаю, почему я не могу полностью отключить анализируемые модули, хотя, возможно, это связано с «Найти неявные зависимости», установленным в настройках сборки схемы. Если бы это не было проверено, похоже, что-то еще должно произойти, чтобы приложение связывалось с модулями.

Jedidja
источник
1
Примечание: К сожалению, это не поможет с КИ, если вы исключите Pod и .xcworkspace из своего репозитория - используя ваш .gitignore.
RileyE
@RileyE интересно - есть ли веская причина исключать тех из репо? Если да, то работает ли другая техника на этой странице? (Я все еще относительный новичок в разработке для iOS, так что довольно любопытно узнать больше)
Джедиджа
Существует большая разница в том, включать это или нет . Мне не нравится включать его, так как я предпочитаю убедиться, что мой подфайл всегда точен, и я обнаружил некоторые конфликты между Podfile.lock и xxworkspaces другого пользователя. Это просто предпочтение пользователям со спорными плюсами и минусами.
RileyE
@RileyE спасибо за информацию! Так что, если мы исключили Pods / .xcworkspace, то нет решения проблемы?
Джедиджа
К сожалению нет. Вот почему я настаивал на дополнительных флажках pod install.
RileyE
5

Шаг: 1 Поместите приведенный ниже скрипт в ваш 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

Шаг 2. Делай pod install.

Toseef Khilji
источник
2
Я также должен был добавить следующее для Swift config.build_settings['SWIFT_SUPPRESS_WARNINGS'] = "YES"
Pods