Ukryj dziwne niechciane dzienniki Xcode

696

Podczas korzystania z Xcode 8+ i tworzenia nowego pustego projektu podczas uruchamiania aplikacji pojawiają się następujące dzienniki:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

Może ktoś już znalazł konfigurację do obsługi?

Hans Knöchel
źródło
1
Wydaje się, że to tylko debugowanie informacji rejestracyjnych pozostałych po opracowaniu. Dochodzenie ...
JAL
czy wyłączyłeś dynamiczne linkowanie interfejsu API w Xcode?
Teja Nandamuri,
Wydaje się, że nie działa dla mnie w Xcode 8, to rozwiązanie działa tylko dla Xcode 8 beta.
Badal Shah
Miałem ten problem z Xcode 8.2.1 na El Capitan. Aktualizacja do macOS Sierra naprawiła problem.
hwaxxer
Nadal widzę problem na Xcode 9.3, przesłałem błąd Apple nr 34767176 (Xcode 9 wyświetla instrukcje debugowania struktury systemu), który jest duplikatem otwartego błędu # 32256894 Prześlij duplikat błędu do Apple: bugreport.apple.com/web
Paul Solt

Odpowiedzi:

1508

Spróbuj tego:

1- Z menu Xcode otwórz: Produkt> Schemat> Edytuj schemat

2- W twoim środowisku Zmienne ustawione OS_ACTIVITY_MODE=disable

Zrzut ekranu

iDevzilla
źródło
25
Działa również w wersji Xcode 8.0, więc sugeruję, że jest to rozwiązanie.
nadein
27
Każdy, kto zastanawia się, jak przejść do tego ekranu, musi przejść do opcji Produkt> Schemat> Edytuj schemat lub Cmd + <
chrishale 14.09.16
46
@ iDevzilla, istnieje pewne problemy z tym rozwiązaniem, usuwa ono pewne ważne rzeczy z dziennika podczas korzystania z prawdziwego urządzenia, takiego jak dane z logowaniem własnym. Przejrzyj to jeszcze raz, nie jestem pewien, czy jest to najbardziej idealne rozwiązanie.
Itai Spector,
104
Niestety ta opcja ukrywa NSLogdla mnie wszystkie elementy przed prawdziwym urządzeniem ...
Dmitry Isaev
8
Problem występuje tylko w Symulatorze. Osobiście uważam, że nie jest dobrym pomysłem dodanie zmiennej środowiskowej, ponieważ ukrywa ona również ważne dzienniki, takie jak problemy z ograniczeniami układu i między innymi podany przykład @ AirXygène. W symulatorze możesz także nacisnąć „CMD + /”, aby otworzyć konsolę, otrzymasz staromodne logi. Mam nadzieję, że Apple naprawi ten problem w Xcode, ale zainteresowanie tym spoglądaniem jest duże;)
Bocaxica,
360

Opierając się na oryginalnej tweet od @rustyshelf i zilustrowanym odpowiedź od iDevzilla, oto rozwiązanie, które wycisza hałas z symulatora bez wyłączania wyjścia NSLog z urządzenia.

  1. W sekcji Produkt> Schemat> Edytuj schemat ...> Uruchom (debuguj) ustaw zmienną środowiskową OS_ACTIVITY_MODE na $ {DEBUG_ACTIVITY_MODE}, aby wyglądała następująco:

wprowadź opis zdjęcia tutaj

  1. Przejdź do ustawień kompilacji projektu i kliknij +, aby dodać ustawienie zdefiniowane przez użytkownika o nazwie DEBUG_ACTIVITY_MODE. Rozwiń to ustawienie i kliknij + obok opcji Debuguj, aby dodać wartość specyficzną dla platformy. Wybierz menu rozwijane i zmień je na „Any iOS Simulator”. Następnie ustaw jego wartość na „wyłącz”, aby wyglądała następująco:

wprowadź opis zdjęcia tutaj

cduhn
źródło
6
@NSNoob upewnij się, że nie masz spacji w zmiennej env.
sbarow
7
Szkoda, że ​​nie jest to odpowiedź zaakceptowana, a szkoda, że ​​ta odpowiedź traci liczbę głosów w górę. Znacznie lepsza odpowiedź IMHO, ponieważ wyłączała ona tylko OS_ACTIVITY_MODE dla DEBUG-a opartego na symulatorze.
Swany
18
To nie działało dla mnie, podobnie jak odpowiedź, która otrzymała najwięcej głosów. Korzystanie z Xcode 8.2.1 w systemie OS X 10.11.6 El Capitan. Ale zadziałało połączenie tej odpowiedzi z odpowiedzią BaseZen, przy użyciu OS_ACTIVITY_DT_MODE zamiast OS_ACTIVITY_MODE. (I nieoczekiwanie dla mnie co najmniej zarówno „NIE”, jak i „wyłącz” wyłączyły szalone rejestrowanie.)
RenniePet
1
@RenniePet, właśnie to dla mnie zrobiło. Dzięki!
Misha
8
Rozwiązanie to ukryje wszystkie NSLog wychodząc z Xcode 9. Aby utrzymać NSLog, wymienić disablez default.
Cœur
88

OS_ACTIVITY_MODE nie działało dla mnie (być może dlatego, że napisałem disablejako disabled, ale czy nie jest to bardziej naturalne?!?), A przynajmniej nie zapobiegło wielu wiadomościom. Oto prawdziwa okazja do zmiennych środowiskowych.

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

Tak więc ustawienie OS_ACTIVITY_DT_MODEna „NIE” w zmiennych środowiskowych (metoda GUI wyjaśniona na zrzucie schematu w głównej odpowiedzi) sprawia, że ​​to działa dla mnie.

Jeśli chodzi NSLogo zrzucanie komunikatów systemowych, błędów i własnego debugowania: prawdopodobnie konieczne jest prawdziwe logowanie, np . Https://github.com/fpillet/NSLogger .

LUB

Wypij nową Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Nic dziwnego, że po przeróbce są pewne problemy logowanie API.

UZUPEŁNIENIE

W każdym razie NSLogto tylko shim:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

NSLog w większości przypadków jest teraz tylko przykrywką dla os_log.

Teraz ma sens tylko cytowanie źródła innej zmiennej env. Całkiem odmienne miejsce, tym razem od wewnętrznych elementów Apple. Nie jestem pewien, dlaczego się pokrywają. [Niepoprawny komentarz do NSLogusuniętego]

[Edytowano 22 września]: Zastanawiam się, co „wydanie” i „stream” robią inaczej niż „debugowanie”. Za mało źródła.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}
BaseZen
źródło
11
Zawsze miło jest widzieć odpowiedź, która podaje przyczyny i tło, a nie tylko szybką poprawkę.
jscs 22.09.16
Przepracowano tę odpowiedź, używając OS_ACTIVITY_DT_MODE = NIE
Almas Adilbek
1
Czy powoduje to inne zachowanie niż OS_ACTIVITY_MODE = wyłącz? Czy jest jakiś powód, aby preferować to rozwiązanie?
n8gray
1
To nie. Ukrywa to wszystko.
durazno
2
@Frizlab Tak. Wspominam o obu w moim poście. Zobacz „LUB” ... os_logNieformalnie nazywam nową pomoc Kool.
BaseZen
64

Tweet miał dla mnie odpowiedź - https://twitter.com/rustyshelf/status/775505191160328194

Aby zatrzymać logowanie Xcode 8 iOS Simulator jak szalone, ustaw zmienną środowiskową OS_ACTIVITY_MODE = wyłącz w schemacie debugowania.

Zadziałało.

Peter Smith
źródło
6
Jak już powiedzieliśmy: OS_ACTIVITY_MODE = wyłącza dezaktywuje wszystkie inne rejestrowanie za pomocą NSLog.
dzensik
5
Rozwiązanie to ukryje wszystkie NSLog wychodząc z Xcode 9. Aby utrzymać NSLog, wymienić disablez default.
Cœur
34

Znajdź poniższe kroki.

  1. Wybierz Produkt => Schemat => Edytuj schemat lub użyj skrótu: CMD + <
  2. Wybierz Runopcję z lewej strony.
  3. W sekcji Zmienne środowiskowe dodaj zmienną OS_ACTIVITY_MODE = wyłącz

Aby uzyskać więcej informacji, zapoznaj się z poniższą reprezentacją GIF.

Edytuj schemat

Ramkrishna Sharma
źródło
3
Poczekaj .... Przy drugim uruchomieniu zadziałało. Wyrazy uznania dla Gif Video. Najlepsze odpowiedzi są zawsze na dole!
eonista
2
Rozwiązanie to ukryje wszystkie NSLog wychodząc z Xcode 9. Aby utrzymać NSLog, wymienić disablez default.
Cœur
33

Dla mnie nadal nie jest to poprawione w Xcode w wersji 8.0 beta 2 (8S162m), a dodatkowe logi pojawiają się również w konsoli Xcode

** EDYCJA 8/1/16: Potwierdzono to w uwagach do wydania dla Xcode 8 Beta 4 (8S188o) jako wciąż występujący problem .

Znane problemy w Xcode 8 beta 4 - IDE

Debugowanie

• Konsola debugowania Xcode pokazuje dodatkowe logowanie ze środowisk systemowych podczas debugowania aplikacji w symulatorze. (27331147, 26652255)

Prawdopodobnie zostanie to rozwiązane przez wydanie GM. Do tego czasu cierpliwość i choć nie idealne, ale obejście, którego używam, jest poniżej ...

Podobnie jak w poprzedniej odpowiedzi muszę:

  • poprzedź moje dzienniki wydruku jakimś specjalnym znakiem (np. * lub ^ lub! itd. itp.)

  • Następnie użyj pola wyszukiwania w prawym dolnym rogu okienka konsoli, aby odfiltrować dzienniki konsoli, wprowadzając wybrany znak specjalny, aby konsola wyświetlała moje dzienniki wydruku zgodnie z przeznaczeniem

konsola

Pez
źródło
1
@SimplyLearning znajdziesz te informacje na całym Twitterze. Ale możesz sprawdzić tę oficjalną stronę Apple: developer.apple.com/news lub ich kanał informacyjny, aby uzyskać aktualizacje, gdy je opublikują: developer.apple.com/news/rss/news.rss Przy okazji: nadal wydaje się, że być problemem w Xcode Beta 3.
benrudhart
50
Właśnie dostałem Xcode 8 GM i problem nadal występuje. Bardzo irytujące!!
AdamM
8
Właśnie pobrałem Xcode w wersji 8.0 (8A218a) z App Store. Problem nadal istnieje.
Statik
4
Po prostu śmieszne. Nadal tam w wersji Final MAS.
Shai Mishali,
1
Do filtrowania używamy przedrostka tagu. Niektóre problemy: Wiele linii pokaże tylko pierwszy. Gdy używasz lldb do debugowania, musisz przełączyć filtrowanie. Naprawdę bardzo przykro, że na dzień dzisiejszy konsola jest bardzo ograniczona. Mamy aplikację do porządnego filtrowania, ale musimy skopiować / wkleić z konsoli. Jak smutno.
bauerMusic
23

Moje rozwiązanie polega na użyciu polecenia debuggera i / lub komunikatu dziennika w punktach przerwania.

wprowadź opis zdjęcia tutaj

I zmień wyjście konsoli z All Output na Output Debugger jak

wprowadź opis zdjęcia tutaj

mrahmiao
źródło
14

W porządku. Wydaje się, że jest dużo zamieszania w tym, więc dam wam wszystkim sposób na utrzymanie go bez użycia tej sztuczki. Zwrócę się konkretnie do symulatora iOS, ale może to również wymagać zastosowania do TV Sim, który znajduje się w innym katalogu.

Problemem, który powoduje wszystkie te rzeczy, są listy znajdujące się w katalogu Xcode. Uruchomiony zostaje proces o nazwie configd_sim uruchamiania Sima uruchamiany który odczytuje listy i wyświetla informacje o debugowaniu, jeśli listy te określają, że powinny one zostać zarejestrowane.

Plists znajdują się tutaj:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Jeśli grasz z wersją beta, pamiętaj, że katalog będzie inny.

W tym katalogu zobaczysz wiele list. Teraz skompiluj i uruchom aplikację i obserwuj dzienniki. Szukasz treści bezpośrednio po podsystemie: część. Jest to nazwa bezpośrednio po tym, która reprezentuje odpowiedni problematyczny plist.

wprowadź opis zdjęcia tutaj

Stamtąd zmodyfikuj plist, aby wyeliminować klucz / wartość debugowania [Poziom], który jest słownikiem zawierającym "Enable" => "Default" klucz / wartość ... lub po prostu usuń plist. Pamiętaj, że musisz wykonać root, aby wykonać jedną z tych czynności, ponieważ znajdują się one w aplikacji Xcode.

plutil -pkomenda może być użyteczna dla Ciebie. to znaczy

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

To dało mi jedną z problematycznych list, które zawierały:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

Powodzenia :]

Kometa Sozina
źródło
Spakowałem, a następnie usunąłem na wypadek, gdy muszę przywrócić.
dandan78
1
Odkryłem, że nie było w stanie wyciszyć dużo kodu sieciowego, prawdopodobnie dlatego, że nie ma nazwy podsystemu:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Niestety, odpowiedziałem tylko na pytanie operacyjne, które nie zawierało żadnych problemów z logowaniem tcp. Możesz utworzyć nowy post SO, jeśli potrzebujesz pomocy w rozwiązaniu tego problemu.
Kometa Sozina
13

Jest to związane ze znanym problemem związanym z rejestrowaniem w Notatkach do wydania Xcode 8 Beta (również zapytany inżynier z WWDC).

Podczas debugowania aplikacji WatchOS w symulatorze Watch system operacyjny może generować nadmierną ilość niepomyślnego rejestrowania. (26652255)

Obecnie nie jest dostępne obejście tego problemu, musisz poczekać na nową wersję Xcode.

EDYCJA 7/5/16: To jest prawdopodobnie naprawione od Xcode 8 Beta 2:

Rozwiązany w Xcode 8 beta 2 - IDE

Debugowanie

  • Podczas debugowania aplikacji na symulatorze widoczne są dzienniki. (26457535)

Informacje o wersji Xcode 8 Beta 2

JAL
źródło
Też tak myślałem, ale nie używam ani aplikacji watchOS, ani symulatora watchOS. Ale i tak może się przytrafić innym Simom. Wstrzymaj na razie i sprawdź, czy określona wersja beta Xcode 8 naprawi go w ciągu najbliższych tygodni / miesięcy.
Hans Knöchel,
@HansKnoechel ja też nie jestem, ale mogę potwierdzić, że problem występuje w dowolnej aplikacji. Żadne „oficjalne” słowo od Apple oprócz informacji o wydaniu i dyskusji w WWDC.
JAL
dzięki, to samo tutaj! Powinniśmy porozmawiać o tym jutro podczas WWDC, hehe :-)
Hans Knöchel
Dzieje się tak również w przypadku mojego symulatora iPhone'a 5s, prawdopodobnie wszystkich symulatorów.
SimplGy
Nie mogłem uzyskać dostępu do linku w tej odpowiedzi, mimo że jestem zalogowany, ale ten link działa: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/…
SimplGy
7

Nie jest to już problemem w xcode 8.1 (testowana wersja 8.1 beta (8T46g)) . Możesz usunąć OS_ACTIVITY_MODEzmienną środowiskową ze swojego schematu.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Debugowanie

• Konsola debugowania Xcode nie wyświetla już dodatkowego rejestrowania w ramach systemu podczas debugowania aplikacji w symulatorze. (26652255, 27331147)

mriddle89
źródło
20
Nadal dostaję dużo fałszywego logowania w wersji 8.1. Głównie dziwne połączenia z gniazdami i TCP. Ktoś jeszcze, czy tylko ja?
Jordan Smith
3
Właśnie pobrałem Xcode 8.1 dzisiaj (31.10.2016) i nadal widzę pewne logowanie do debugowania, takie jak ten [MC] Reading from private effective user settings.z pustego, nowego projektu fikcyjnego Plik> Nowy> Projekt.
Zhang
4

W Xcode 10OS_ACTIVITY_MODE zmienną disable(lub defaultwartości) wyłącza również NSLognie wiem co.

Więc jeśli chcesz pozbyć się hałasu konsoli, ale nie własnych dzienników, możesz wypróbować stary dobry printf("")zamiast NSLog, ponieważ nie ma na niego wpływu OS_ACTIVITY_MODE= disable.

Ale lepiej sprawdź tutaj nowy os_loginterfejs API .

Jakub Truhlář
źródło
1

To rozwiązanie działa dla mnie:

  1. Uruchom aplikację w symulatorze
  2. Otwórz dziennik systemu ( + /)

Spowoduje to zrzucenie wszystkich danych debugowania, a także twoich NSLogów.

Aby filtrować tylko instrukcje NSLog:

  1. Poprzedź każdy symbolem, na przykład: NSLog(@"^ Test Log")
  2. Filtruj wyniki za pomocą pola wyszukiwania w prawym górnym rogu, „^” w powyższym przypadku

Oto, co powinieneś otrzymać:

Zrzut ekranu konsoli

psobko
źródło