Nic nie jest drukowane NSLog
w Xcode 8.0 beta (8S128d). printf
jest niezmieniony
Oto mój kod:
NSLog(@"hello from NSLog");
printf("hello from printf");
Oto dane wyjściowe w symulatorze iOS 9:
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
Oto dane wyjściowe w symulatorze iOS 10:
hello from printf
Odpowiedzi:
Możliwe, że dodałeś właściwość „OS_ACTIVITY_MODE”: „disable” do zmiennych środowiskowych Scheme (aby ukryć dane wyjściowe systemu operacyjnego z symulatora) i zapomniałeś o tym, a teraz działają na prawdziwym urządzeniu.
W Xcode 8:
Tylko dodaj
OS_ACTIVITY_MODE
i zaznacz (Nie dodawaj wartości)Podsumowanie: To jest błąd Xcode 8 + iOS10, możemy go rozwiązać w ten sposób:
Używając symulatora, dodaj Nazwę „OS_ACTIVITY_MODE” i Wartość „wyłącz” i zaznacz ją.
Na prawdziwym urządzeniu dodaj tylko „OS_ACTIVITY_MODE” i zaznacz to (Nie dodawaj wartości). Zobaczysz NSLog w konsoli Xcode8.
źródło
disable
zdefault
.Jeśli sprawdzisz informacje o wersji beta Xcode 8 , przekonasz się, że jest na nich napisane:
źródło
NSlog lub print jest faktycznie wykonywany, ale jest ukryty wśród wielu innych wyników debugowania konsoli w celu rozwiązania tego problemu Otwórz Xcode8:
dodaj „OS_ACTIVITY_MODE” i ustaw wartość na „wyłącz” i sprawdź to.
kliknij zamknij
xcode9
dodaj „OS_ACTIVITY_MODE” i ustaw wartość na „domyślną” i sprawdź ją.
źródło
disable
zdefault
.Upewnij się również, że konsola jest rzeczywiście widoczna w Xcode (tj. Upewnij się, że ikona po prawej stronie jest podświetlona na niebiesko, jak na poniższym obrazku). Po uaktualnieniu Xcode ukrył konsolę i pokazał mi tylko widok Zmienne. To sprawiło, że wyglądało na to, że
NSLog()
nie działa poprawnie, podczas gdy rzeczywiście działał poprawnie, po prostu nie mogłem zobaczyć wyjścia.źródło
Shift + ⌘ + C
Xcode w wersji 8.3.3Nie widzę też wyjścia NSLog na prawdziwym urządzeniu z iOS 10. Jeśli używasz prawdziwych urządzeń, możesz otworzyć okno Urządzenia z Xcode (Shift + Command + 2) i zobaczyć tam dzienniki urządzeń, ale trudno jest spojrzeć na dzienniki aplikacji, ponieważ konsola wyświetla dzienniki z systemu i wszystkich aplikacji.
(Używam Xcode 7, więc może to nie problem Xcode, ale problem z iOS 10)
źródło
os_log
.Hmmm ... wygląda na to, że właściwość "OS_ACTIVITY_MODE": "wyłącz" ZABEZPIECZA NSlog przed pojawieniem się w dzienniku Xcode 9.
Odznaczenie tej wartości w moim schemacie przywróciło moje dzienniki.
źródło
Dla każdego, kto spotka się z tym w przyszłości. Powodem, dla którego NSLog nie drukuje do syslog w iOS 10 i iOS 11, jest zmiana Apple na Unified Logging.
Możesz zobaczyć, jak WWDC o tym mówi tutaj: https://developer.apple.com/videos/play/wwdc2016/721/
Dokumentacja tutaj: https://developer.apple.com/documentation/os/logging
Od 10 roku powinieneś używać os_log zamiast NSLog.
Jak znaleźć logi na dysku: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/
Podsumowując, znajdują się dzienniki, w
/var/db/diagnostics
których można znaleźć maszynę wirtualną pod adresem/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
Skopiuj wszystkie elementy wewnątrz
diagnostics
iuuidtext
do jednego folderu (nie dołączaj diagnostyki folderów ani uuidtext, tylko tego, co jest w środku).Zmień nazwę tego folderu
foldername.xarchive
.Otwórz go w Console.app lub użyj narzędzia OSX
log
:log show <path to archive> --info --predicate <options>
źródło
Używam Xcode 8, więc napotkałem ten sam problem. I rozwiązałem ten problem dodając
value = disable
symulator, ale na prawdziwej maszynie nie dodam wartości.źródło
disable
zdefault
.OS_ACTIVITY_MODE
zdisable
lubdefault
jest bezpośredniNSLog
komunikaty nie są już wyświetlane po uaktualnieniu do Xcode 9.1 + iOS 11.1. Początkowo zaakceptowana odpowiedź dała mi sposób na obejście tego za pomocą aplikacji Console i włączenie Symulatora ( patrz odpowiedź Lucasa ).W aplikacji Konsola
Action
próbowałem wybieraćInclude Debug Messages
i odznaczaćInclude Info Messages
(aby Konsola nie była zasypana komunikatami systemowymi).NSLog
komunikaty pojawiały się w oknie konsoli w Xcode, ale nie w aplikacji Console.Zdałem sobie sprawę, że musi istnieć bardziej bezpośrednia droga
disable
lub umożliwienie (tj.default
)NSLogs
Dzięki komentarzowi Coeura w odpowiedzi na tę odpowiedź. Moim zdaniem to najlepsza odpowiedź, ponieważ ustawienieOS_ACTIVITY_MODE
nadisable
lubdefault
będzie miało większy sens dla początkujących.źródło