Ignoruj ​​ostrzeżenia Xcode podczas korzystania z Cocoapods

417

Korzystam z wielu bibliotek stron trzecich, które zawierają wiele ostrzeżeń po najnowszych aktualizacjach Xcode. (na przykład kapsuła SDK Facebooka) Teraz wszystkie te ostrzeżenia są wyświetlane w moim Xcode w miejscu, w którym chcę zobaczyć moje własne ostrzeżenia lub błędy.

Czy istnieje sposób na zignorowanie tych błędów? Naprawienie ich nie pomoże, ponieważ po każdej „instalacji pod” zmiany są odrzucane.

KrauseFx
źródło

Odpowiedzi:

967

Dodaj do swojego Podfile:

platform :ios

# ignore all warnings from all pods
inhibit_all_warnings!

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

Następnie wykonaj: pod install

stop
źródło
3
Jak to uwzględnić? Obecnie używam s.dependency 'Facebook-iOS-SDK' s.inhibit_all_warnings! i pojawia się następujący błąd: niezdefiniowana metoda `inhibit_all_warnings! ' dla # <Pod :: Specyfikacja dla MyApp (1.0)>
KrauseFx
22
Jak mogę rozwiązać następujący problem: Chcę, aby ostrzeżenia były ukryte dla niektórych kapsułek, ale nie dla wszystkich.
KrauseFx,
3
@krausefx Przepraszamy, nie widziałem twojego komentarza. Dla potomności możesz teraz wyłączyć ostrzeżenia dla poszczególnych pod, jak pokazano w dokumentach Podfile
stop
2
@JohanKarlsson Usuń dyrektywę i uruchom, pod installaby zregenerować Pods.xcodeproj.
stop
1
Pamiętaj, że nie wyklucza to pojawienia się ostrzeżeń (problemów) podczas Analyzefazy. Podałem kilka sugestii w innej odpowiedzi.
Jedidja
28

Możesz wyszukać „inhibit_all_warnings” w ustawieniach kompilacji xcode dla PodBundle w swojej przestrzeni roboczej projektu. Ustaw wartość na „YES”, ukryje wszystkie ostrzeżenia pliku Pod.

Jeśli zrobisz to w swoim miejscu pracy, ukryje to również cały twój projekt.

Teja Swaroop
źródło
Jest to prostsze rozwiązanie, ustaw to w projekcie strąków i wyłącza tylko ostrzeżenia związane z strąkami, a nie ostrzeżenia projektu. Nie trzeba ponownie instalować zasobnika.
Andres Canella
28
Niepolecane! Z następnym pod installustawieniem to zostanie zastąpione, więc lepiej ustaw je w Podfile!
electronix384128,
4
Osobiście podoba mi się to, dzięki czemu przy każdej aktualizacji pamiętam, aby szybko przejrzeć wszystkie ostrzeżenia i upewnić się, że można je pominąć.
Andres Canella
co z zależnościami w podspec dla lokalnego dewelopera?
Ari Braginsky,
Możesz także ustawić Swift Compiler - Warnings Policies> Suppress Warningsna Yes... z inhibit_all_warningsI wciąż miał 'characters' is deprecated: Please use String or Substring directly ostrzeżenie w kapsułach. To ustawienie usunęło to ostrzeżenie.
Tiois,
6

Chociaż ta inna odpowiedź usunie ostrzeżenia podczas fazy kompilacji, nie wydaje się, aby całkowicie naprawiła Analyzefazę (co spowodowało problemy z kompilacją naszego CI).

Dla mnie (oprócz zaakceptowanej odpowiedzi) działało:

  • Kliknij Podsprojekt w Nawigatorze projektu
  • Wybierz rzeczywisty Pod-cel i kliknijBuild Settings
  • Filtruj według frazy compiler flags
  • Dodaj nowy Other C Flagsz wartością -w -Xanalyzer -analyzer-disable-checker -Xanalyzer core(lub dowolnym analizatorem, którego potrzebujesz wyłączyć) - ta odpowiedź zawiera pełną listę flag do wypróbowania - proszę ją głosować!

    Wydaje się clangjednak, że wersja Xcode 6.3.1 nie zawiera, insecureAPIwięc możesz usunąć ją z tej listy. „Aktualna” pełna lista to-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

Pamiętaj, że ustawienie tego w Podsprojekcie lub Podscelu nie będzie działać . Nie jestem pewien dlaczego, ale musisz ustawić to dla każdego faktycznego Pod-celu.

Możesz także ustawić flagi kompilatora ( -w -Xanalyzer -analyzer-disable-checker -Xanalyzer coreitp.) Dla poszczególnych plików .

Wypróbowałem też kilka innych metod (które mogą, ale nie muszą być wymagane oprócz powyższych). Zostały one wykonane na samym PodsProjekcie.


[1]

  • Filtruj według frazy analyzer
  • Upewnij się, że Analyze During 'Build'jest ustawiony na NO.
  • Zmień wszystkie ustawienia na NO(w tym Improper Memory Management)

[2]

  • Filtruj według frazy warnings
  • Zmień inhibit all warningsnaYES

Z jakiegoś powodu nawet wyłączenie Analyzekroku w schemacie nie działa.

Przejdź do Product > Scheme > Manage Schemesokna, kliknij każdą Pod-*z listy i kliknij Editprzycisk. Kliknij Buildlistę po lewej stronie, a następnie usuń zaznaczenie Analyze po prawej stronie dla Podcelu.

Nadal jestem zdezorientowany, dlaczego nie mogę całkowicie wyłączyć analizowania kapsuł, chociaż spodziewam się, że może to mieć związek z „Znajdź ukryte zależności” zaznaczone w ustawieniach kompilacji schematu. Gdyby to nie było zaznaczone, wygląda na to, że coś innego musiałoby się stać, aby aplikacja mogła połączyć się z zasobnikami.

Jedidja
źródło
1
Uwaga: Niestety nie pomaga to w przypadku CI, jeśli wykluczysz Pods i .xcworkspace ze swojego repozytorium - używając swojego .gitignore.
RileyE
@ RileyE ciekawe - czy istnieje dobry powód, aby wykluczyć te z repo? Jeśli tak, to czy inna technika na tej stronie działa dla Ciebie? (Nadal jestem względnym nowicjuszem w rozwoju iOS, więc jestem bardzo ciekawy, aby dowiedzieć się więcej)
Jedidja
Istnieje duży podział na to, czy to uwzględnić, czy nie . Nie podoba mi się to, ponieważ wolę mieć pewność, że mój podfile jest zawsze dokładny i znalazłem pewne konflikty między Podfile.lock różnych użytkowników i. Jest to po prostu preferencja dla użytkowników z silnie dyskusyjnymi zaletami i wadami.
RileyE
@RileyE dzięki za informację! Więc jeśli wykluczyliśmy Pods / .xcworkspace, nie ma obejścia problemu?
Jedidja
Niestety nie. Dlatego naciskałem na dodatkowe flagi pod install.
RileyE
5

Krok: 1 Umieść poniższy skrypt w swoim 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

Krok 2. Zrób pod install.

Toseef Khilji
źródło
2
Do Swift Pods musiałem również dodać:config.build_settings['SWIFT_SUPPRESS_WARNINGS'] = "YES"
pstoppani,