iOS 10, NSLogs yazdırmıyor


89

NSLogXcode 8.0 beta'dan (8S128d) hiçbir şey yazdırılmaz . printfdeğişmedi

İşte kodum:

NSLog(@"hello from NSLog");
printf("hello from printf");

İşte iOS 9 Simulator'daki çıktı:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

İşte iOS 10 Simulator'daki çıktı:

hello from printf

Benzer bir sorun yaşadım. Ancak iOS 8.1, Xcode 8.'de her yanıtı kontrol ettim. Her şeyi doğru yaptığım ortaya çıktı. Hiçbir şeyin gerçekten yardımı olmadı. Bu yüzden cihazı kapattım ve açtım. İşe yarıyor. Bu yorumu buraya, benzer bir problemle karşı karşıya kalan başkalarına yardımcı olması için yazdım
KrishnaCA

Yanıtlar:


229

Şema ortam değişkenlerine "OS_ACTIVITY_MODE": "devre dışı bırak" özelliğini eklemiş olabilirsiniz (simülatörden işletim sistemi çıkışını gizlemek için) ve bunu unutmuş ve şimdi gerçek bir cihazda çalışıyor olabilir.

Xcode 8'de:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

Yalnızca ekleyin OS_ACTIVITY_MODEve kontrol edin (Değer eklemeyin)

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Özet: Bu bir Xcode 8 + iOS10 hatasıdır, şu şekilde çözebiliriz:

  • Simülatörü kullanırken, "OS_ACTIVITY_MODE" Adını ve "devre dışı bırak" Değerini ekleyin ve işaretleyin.

  • Gerçek bir cihazdayken, sadece "OS_ACTIVITY_MODE" ekleyin ve işaretleyin (Değer eklemeyin). NSLog'u Xcode8 Konsolunda göreceksiniz.


4
> "Değeri eklemeyin" Ben "devre dışı bırak" olarak ayarladım ve çalışıyor! Boş alan benim için çalışmıyor.
m8labs

Simülatörde değil, gerçek iphone cihazında hata ayıklarken çalıştığından emin misiniz? Bunu "devre dışı bırak" olarak ayarlarsam, konsol gerçek iphone hata ayıklaması sırasında NSLog yapamaz.
user6833743

Şimdi "devre dışı bırakma" olmadan kontrol ettim, şimdi cihazda çalışıyor, ancak simülatörde bozuk, şimdi her şeyi tekrar gösteriyor ...
m8labs

2
bu süreci otomatikleştirmenin bir yolu var mı? şu şekilde ileri geri gitmeyi hatırlamak zorunda olmamız gerçekten can sıkıcı: /
sera

2
Bu çözüm NSLog tutmak için Xcode 9. başlayarak tüm NSLog gizler yerini disableile default.
Cœur

27

Xcode 8 beta sürüm notlarını kontrol ederseniz , şunu göreceksiniz:

Simulator üzerinde çalışan bir uygulamanın hatalarını ayıklarken, günlükler konsolda görünmeyebilir. Çözüm: NSLogs'u görüntülemek üzere Konsol uygulamasında sistem günlüğünü açmak için Simulator.app'de + / komutunu kullanın. (26457535)


9
NSLog çıktısını gerçek iOS 10 cihazında da göremiyorum. Gerçek cihazlar kullanıyorsanız, Cihazlar penceresini (Shift + Command + 2) açabilir ve orada cihaz günlüklerini görebilirsiniz, ancak konsol sistem ve uygulamalardan tüm günlükleri gösterdiğinden hata ayıklama uygulama günlüğüne bakmak zordur.
kientux

19

NSlog veya yazdırma gerçekte yürütülür ancak bu sorunu çözmek için diğer birçok konsol hata ayıklama çıktısı arasında gizlidir Xcode8'i açın:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

"OS_ACTIVITY_MODE" ekleyin ve Değeri "devre dışı bırak" olarak ayarlayın ve işaretleyin.

Kapat tıklayın

xcode9

"OS_ACTIVITY_MODE" ekleyin ve Değeri "varsayılan" olarak ayarlayın ve işaretleyin.

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin


Bu benim için çalışmıyor. NSLogs, konuşlandırılmış uygulamalar için görünmez. İOS 10 cihazı ile xcode 8.1 (Mac 10.11'de çalışan) kullanıyorum.
mobjug

22
Bu çözüm NSLog tutmak için Xcode 9. başlayarak tüm NSLog gizler yerini disableile default.
Cœur

3
Bu yanıt, @ Cœur'un Xcode 9 için yaptığı düzeltmeyi hesaba katacak şekilde güncellenmelidir.
Joel

8

Ayrıca, Konsolun gerçekten Xcode'da göründüğünden emin olun (yani, aşağıdaki görüntüye göre sağ taraftaki simgenin mavi ile vurgulandığından emin olun). Xcode'u yükselttikten sonra Konsolu gizledi ve bana sadece Değişkenler görünümünü gösterdi. Bu, NSLog()düzgün çalışmıyor gibi görünmesini sağladı , ancak gerçekten doğru çalışıyordu, sadece çıktıyı göremedim.

görüntü açıklamasını buraya girin


Ayrıca konsolu Shift + ⌘ + CXcode 8.3.3 sürümüyle etkinleştirebilir
DJ2

ne harika bir kullanıcı arayüzü tasarımı @Apple, fullof bilinmeyen anlam simgeler
Ornithopter

7

NSLog çıktısını gerçek iOS 10 cihazında da göremiyorum. Gerçek cihazlar kullanıyorsanız, Xcode'dan (Shift + Command + 2) Cihazlar penceresini açabilir ve orada cihaz günlüklerini görebilirsiniz, ancak konsol sistemden ve tüm uygulamalardan günlükleri gösterdiğinden uygulamanızın günlüklerine bakmak zordur.

(Xcode 7 kullanıyorum, bu yüzden Xcode'un sorunu olmayabilir, ancak iOS 10 sorunu olabilir)


İOS 10 GM altındaki cihazlar penceresinde uygulamam için NSLog'ları görmüyorum ... aynı sorunu mu yaşıyorsunuz?
TahoeWolverine

Günlükleri iOS 10 GM ile Xcode 7'de görebiliyorum, artık cihazlar penceresini açmaya gerek yok.
kientux

2
Xcode'dan çalıştırmaktan bahsetmiyorum, yine de konuşlandırılmış bir uygulamadan yazdırılan günlüklerden bahsediyorum.
TahoeWolverine

Bu konuda ilerleme var mı?
jhurray

NSLog'lar ve printf'ler, dağıtılan uygulamalarda iOS 10 cihaz günlüğünden çıkarılır. Doğrudan bir çağrı ile değiştirmek için global bir makro ekleyebilirsiniz os_log.
ELIST

6

Hmmm ... "OS_ACTIVITY_MODE" özelliği gibi görünüyor: "PREVENTS NSlog" un Xcode 9 günlüğünde görünmesini "devre dışı bırak".

Düzenimde bu değerin işaretinin kaldırılması günlüklerimi geri yükledi.


6

Gelecekte bununla karşılaşan herkes için. NSLog'un iOS 10 ve iOS 11'de syslog'a yazdırmamasının nedeni, Apple'ın Birleşik Günlük Kaydı'na geçmesidir.

WWDC'nin bu konudaki konuşmasını burada görebilirsiniz: https://developer.apple.com/videos/play/wwdc2016/721/

Belgeler burada: https://developer.apple.com/documentation/os/logging

10'dan itibaren NSLog yerine os_log kullanmalısınız.

Diskte günlükler nasıl bulunur: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Özetlemek gerekirse, günlükler şurada bulunur: /var/db/diagnostics bir sanal makinenin/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

İçindeki tüm öğeleri kopyalayın diagnosticsveuuidtext tek bir klasöre (içeride sadece ne klasörler teşhis veya uuidtext içermiyor).

Bu klasörü yeniden adlandırın foldername.xarchive .

Console.app'da açın veya OSX kullanımını kullanın log:log show <path to archive> --info --predicate <options>


Peki ya iOS'ta?
kakyo

1

Xcode 8 kullanıyorum, bu yüzden aynı sorunla da karşılaştım. value = disableSimülatörü ekleyerek bu sorunu çözdüm ama gerçek bir makinede değer katmıyorum.


1
Xcode 9 ile bazı sorunlar yaşıyorum: OS_ACTIVITY_MODE bağımsız değişkeni ekledim ama işe yaramıyor ...
Alessio Campanelli

4
Bu çözüm NSLog tutmak için Xcode 9. başlayarak tüm NSLog gizler yerini disableile default.
Cœur

Bence bu doğru cevap. OS_ACTIVITY_MODEile disableya da defaultdirekt olan
Greg

1

NSLogXcode 9.1 + iOS 11.1'e yükselttiğimde artık mesajlar görüntülenmiyor. Başlangıçta kabul edilen cevap , Konsol uygulamasını kullanarak ve Simülatörü etkinleştirerek bu sorunu çözmem için bana bir yol verdi ( Lucas'ın cevabına bakın ).

Konsol uygulamasında, Actionseçmeyi Include Debug Messagesve seçimi kaldırmayı denedim Include Info Messages(bu nedenle Konsol, sistem mesajlarıyla dolup taşmaz). NSLogmesajlar Konsol penceresinde Xcode'da görünürken Konsol uygulamasında görünmüyordu.

Coeur'un bu cevaba cevaben yorumu sayesinde daha doğrudan disableya da etkinleştirmenin (yani default) bir yolu olması gerektiğini fark ettim . Bence bu ayarı çünkü iyi cevaptır için ya yeni başlayanlar için daha mantıklı olacaktır.NSLogsOS_ACTIVITY_MODEdisabledefault

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.