İstenmeyen Xcode günlüklerini gizle


696

Xcode 8+ kullanırken ve yeni bir boş proje oluştururken, uygulamayı çalıştırırken aşağıdaki günlükler görünür:

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

Belki birisi bunun işleyebileceği bir konfigürasyon buldu?


1
Gelişimden geriye kalan günlük bilgilerini ayıklamak gibi görünüyor. Araştırılıyor ...
JAL

xcode dinamik linker api kullanımını kapattınız mı?
Teja Nandamuri

Xcode 8'de benim için çalışmıyor gibi görünüyor, bu çözüm sadece Xcode 8 beta için çalışıyor.
Badal Shah

El Capitan'da Xcode 8.2.1 ile bu sorunu yaşadım. MacOS Sierra'ya yükseltme sorunu çözdü.
hwaxxer

Sorunu hala Xcode 9.3'te görüyorum, açık hatanın bir kopyası olan Apple Bug # 34767176 (Xcode 9, Sistem Çerçevesi Hata Ayıklama Yazdırma Bildirimleri'ni) gönderdim.Lütfen hatanın bir kopyasını Apple'a gönderin: bugreport.apple.com/web
Paul Solt

Yanıtlar:


1508

Bunu dene:

1- Xcode menüsünden açın: Ürün> Şema> Şemayı Düzenle

2- Ortam Değişkenleri setinizde OS_ACTIVITY_MODE=disable

Ekran görüntüsü


25
Ayrıca Xcode 8.0 sürümü üzerinde çalışır, bu yüzden çözüm olduğunu öneriyorum.
nadein

27
Bu ekrana nasıl gidileceğini merak eden herkes için, Ürün> Şema>
Şemayı

46
@iDevzilla, Bu çözümle ilgili bazı sorunlar var, kendi kendine kaydedilen veriler gibi gerçek cihazı kullanırken bazı önemli şeyleri günlükten kaldırır. Lütfen tekrar gözden geçirin, en ideal çözüm olduğundan emin değilim.
Itai Spector

104
Ne yazık ki, bu seçenek NSLogbenim için gerçek bir cihazdan tüm s gizler ...
Dmitry Isaev

8
Sorun sadece Simülatörde yaşanıyor. Kişisel olarak, ortam değişkenini eklemenin iyi bir fikir olduğuna inanmıyorum, çünkü Düzen Kısıtlamaları ile ilgili sorunlar gibi önemli günlükleri de gizliyor ve diğerleri arasında @ AirXygène örneği verdi. Simülatörde konsolu açmak için "CMD + /" tuşuna da basabilirsiniz, size eski moda günlükleri verecektir. Umarım Apple bu sorunu Xcode'da düzeltir, ancak bu durumun upvotes sayısına bakmasıyla çok ilgilenir;)
Bocaxica

360

@ Rustyshelf orijinal tweet'i ve iDevzilla'nın resimli cevabını temel alan, cihazdan NSLog çıkışını devre dışı bırakmadan simülatörden gelen gürültüyü susatan bir çözüm.

  1. Ürün> Düzen> Düzeni Düzenle ...> Çalıştır (Hata Ayıkla) altında, OS_ACTIVITY_MODE ortam değişkenini $ {DEBUG_ACTIVITY_MODE} olarak ayarlayın, böylece şöyle görünür:

resim açıklamasını buraya girin

  1. Proje oluşturma ayarlarınıza gidin ve DEBUG_ACTIVITY_MODE adlı Kullanıcı Tanımlı Bir Ayar eklemek için + düğmesini tıklayın. Bu ayarı genişletin ve platforma özgü bir değer eklemek için Hata Ayıkla'nın yanındaki + işaretini tıklayın. Açılır menüyü seçin ve "Herhangi bir iOS Simülatörü" olarak değiştirin. Sonra değerini "devre dışı bırak" olarak ayarlayın, böylece şöyle görünür:

resim açıklamasını buraya girin


6
@NSNoob env değişkeninde boşluk olmadığından emin olun.
22'de sbarow

7
Çok kötü bu kabul edilen cevap değil ve çok kötü bu cevap oyu kaybetme sayısını kaybediyor. Çok iyi bir yanıt IMHO DEBUG sadece engelli OS_ACTIVITY_MODE simülatörü üzerine inşa beri.
Swany

18
Bu benim için işe yaramadı ve en çok oy alan cevap da işe yaramadı. OS X 10.11.6 El Capitan'da Xcode 8.2.1'i kullanma. Ancak işe yarayan şey, bu cevabın ve BaseZen'in cevabının OS_ACTIVITY_MODE yerine OS_ACTIVITY_DT_MODE kullanılarak bir araya getirilmesiydi. (Ve beklenmedik bir şekilde benim için en azından hem "HAYIR" hem de "devre dışı bırakma" yaygın günlük kaydını
kapattı

1
@RenniePet, tam da bunu benim için yaptı. Teşekkürler!
Misha

8
Bu çözüm, Xcode 9 ile başlayan tüm NSLog'leri gizleyecektir. NSLog'u korumak için disableile değiştirin default.
Cur

88

OS_ACTIVITY_MODE (benim için işe vermedi olabilir ben typo'd çünkü olmuştur disableolarakdisabled , ama daha doğal?!? O değildir), ya da en azından mesajların büyük bir engel değildi. İşte çevre değişkenleri ile gerçek anlaşma.

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);
}

Yani OS_ACTIVITY_DT_MODE , ortam değişkenlerinde "HAYIR" olarak (ana cevapta Şemaların ekran görüntüsünde açıklanan GUI yöntemi) benim için çalışmasını sağlar.

NSLogSistem mesajları, hatalar ve kendi hata ayıklamanız için boşaltma alanı olduğu sürece : muhtemelen gerçek bir günlükleme yaklaşımı çağrılır, örneğin https://github.com/fpillet/NSLogger .

VEYA

Yeni Kool-Aid'i için: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Tümü elden geçirdikten sonra bazı aksaklıklar olması şaşırtıcı değil günlük API'sı.

EK

Her neyse, NSLogsadece bir şim:

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

NSLog / CFLog

NSLog artık çoğu durumda os_log için sadece bir şim.

Sadece şimdi diğer env değişkeni için kaynak alıntılamak mantıklı. Apple'ın iç mekanlarından oldukça farklı bir yer. Neden çakıştıklarından emin değilim. [ NSLogKaldırıldığı hakkında yanlış yorum ]

[Düzenlendi 22 Eylül]: "Sürüm" ve "akış" ın "hata ayıklama" dan farklı ne yaptığını merak ediyorum. Yeterli kaynak yok.

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;
    }
}

11
Her zaman sadece hızlı düzeltme yerine nedenleri ve arka plan sağlayan bir cevap görmek güzel.
jscs

Bu cevabı OS_ACTIVITY_DT_MODE = HAYIR kullanarak çalıştı
Almas Adilbek

1
Bu, OS_ACTIVITY_MODE = devre dışı bırakma özelliğinden farklı bir davranış oluşturuyor mu? Bu çözümü tercih etmek için bir neden var mı?
n8gray

1
O değil. Her şeyi gizler.
durazno

2
@Frizlab Evet Yazımda ikisinden de bahsediyorum. Bakınız "VEYA" ... os_logGayri resmi olarak yeni Kool Yardımını kastediyorum.
BaseZen

64

Bir tweet bana cevap verdi - https://twitter.com/rustyshelf/status/775505191160328194

Xcode 8 iOS Simulator'ın çılgın gibi günlüğe kaydetmesini durdurmak için, hata ayıklama düzeninizde bir ortam değişkeni OS_ACTIVITY_MODE = devre dışı bırakın.

İşe yaradı.


6
Daha önce de belirtildiği gibi: OS_ACTIVITY_MODE = devre dışı bırak, bir NSLog ile diğer tüm günlük kaydını devre dışı bırakır.
dzensik

5
Bu çözüm, Xcode 9 ile başlayan tüm NSLog'leri gizleyecektir. NSLog'u korumak için disableile değiştirin default.
Coeur

34

Lütfen aşağıdaki adımları bulun.

  1. Ürün => Şema => Şemayı Düzenle'yi seçin veya kısayol kullanın: CMD + <
  2. RunSol taraftan seçeneği seçin .
  3. Ortam Değişkenleri bölümünde OS_ACTIVITY_MODE = devre dışı bırak değişkenini ekleyin

Daha fazla bilgi için lütfen aşağıdaki GIF temsilini bulun.

Düzeni Düzenle


3
Bekle .... İkinci koşuda işe yaradı. Gif Video için Şeref. En iyi cevaplar her zaman en altta!
eonist

2
Bu çözüm, Xcode 9 ile başlayan tüm NSLog'leri gizleyecektir. NSLog'u korumak için disableile değiştirin default.
Coeur

33

Bu hala benim için Xcode Sürüm 8.0 beta 2'de (8S162m) düzeltilmedi ve Xcode konsolunda ekstra günlükler de görünüyor

** EDIT 8/1/16: Bu, Xcode 8 Beta 4 (8S188o) sürüm notlarında hala devam eden bir sorun olarak kabul edildi .

Xcode 8 beta 4 - IDE'deki Bilinen Sorunlar

Hata ayıklama

• Xcode Hata Ayıklama Konsolu, Simülatördeki uygulamalarda hata ayıklama yaparken sistem çerçevelerinden ekstra günlük kaydı gösterir. (27331147, 26652255)

Muhtemelen bu GM sürümü ile çözülecektir. O zamana kadar sabır ve ideal olmasa da kullandığım bir çözüm aşağıda ...

Önceki cevaba benzer şekilde:

  • Yazdırma günlüklerime bir tür özel karakter öneki (örn. * veya ^ veya! vb.)

  • Ardından, konsolun yazdırma günlüklerimi istendiği gibi görüntülemesini sağlamak için seçilen özel karakterimi girerek konsol günlüklerimi filtrelemek için konsol bölmesinin sağ alt tarafındaki arama kutusunu kullanın

konsol


1
@SimplyLearning bu bilgiyi Twitter'da bulabilirsiniz. Ancak bu resmi web sitesine apple'dan bakabilirsiniz : developer.apple.com/news veya haber beslemeleri yayınlandıklarında güncelleme almak için: developer.apple.com/news/rss/news.rss Bu arada: bu hala görünüyor Beta 3'te sorun olun.
benrudhart

50
Xcode 8 GM aldım ve sorun hala devam ediyor. Çok sinir bozucu!!
AdamM

8
App Store'dan Xcode Sürüm 8.0'ı (8A218a) indirdim. Sorun hala orada.
Statik

4
Sadece saçma. Hala Final MAS versiyonunda.
Shai Mishali

1
Filtreleme için bir etiket öneki kullanırız. Bazı sorunlar şunlardır: Birden çok satır yalnızca ilk satırı gösterir. Hata ayıklama için lldb kullanırken, filtrelemeyi açmanız gerekir. Bugün itibariyle konsolun son derece sınırlı olması gerçekten üzücü. İyi filtreleme için bir Uygulamamız var, ancak konsoldan kopyalayıp yapıştırmamız gerekiyor. Ne kadar üzücü.
bauerMusic

23

Benim çözüm hata ayıklama komutunu ve / veya günlük iletisini kesme noktalarında kullanmaktır.

resim açıklamasını buraya girin

Ve aralarından konsolun çıkışını değiştirmek Tüm Çıktı için Debugger Çıktı gibi

resim açıklamasını buraya girin


14

Peki. Bu konuda çok fazla kargaşa var gibi görünüyor, bu yüzden hepinize bu düzen hile kullanmadan devam etmenin bir yolunu vereceğim. Özellikle iOS Simulator'a değineceğim, ancak bunun aynı zamanda farklı bir dizde bulunan TV Sim için de uygulanması gerekebilir.

Tüm bu şeylere neden olan sorun, Xcode dizininde bulunan plists. Configd_sim adında başlatılan bir işlem varSim başladığında okuyan ve günlüğe kaydedilmeleri gerektiğini belirlerse hata ayıklama bilgilerini basan .

Plistler burada bulunur:

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

Eğer bir beta ile oynuyorsanız dir'in farklı olacağını unutmayın.

Bu dizinde çok sayıda plist göreceksiniz. Şimdi uygulamanızı oluşturun ve çalıştırın ve günlükleri izleyin. Hemen alt sistem: bölümünün ardından gelen içeriği arıyorsunuz . Hemen ardından gelen sorunlu plist'i temsil eden isimdir.

resim açıklamasını buraya girin

Oradan, plist'i, hata ayıklama [Level] anahtarını / değerini içeren bir sözlük olan "Enable" => "Default" da sadece plist'i silin. Xcode uygulamasında bulunduğundan, bunlardan birini yapmak için kök olmanız gerektiğini unutmayın.

plutil -pKomut yanı size yararlı olabilir. yani

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

Bu bana aşağıdakileri içeren sorunlu plistlerden birini verdi:

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

İyi şanslar :]


Sıkıştırdım, sonra geri yüklemem gerekirse sildim.
dandan78

1
Muhtemelen bir alt sistem adı olmadığı için bu ağ kodunu susturmayı başaramadı:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen Ne yazık ki, sadece herhangi bir tcp günlüğü sorunları içermeyen OPs sorusunu ele aldı. Bu sorunu gidermek için yardıma ihtiyacınız olursa yeni bir SO yayını oluşturabilirsiniz.
Sozin'in Kuyruklu Yıldızı

13

Bu, Xcode 8 Beta Sürüm Notlarında bulunan günlükle ilgili bilinen bir sorunla ilgilidir (ayrıca WWDC'de bir mühendise sordu).

Watch simülatöründeki WatchOS uygulamalarında hata ayıklarken, işletim sistemi aşırı miktarda yararsız günlük kaydı üretebilir. (26652255)

Şu anda kullanılabilir bir geçici çözüm yok, Xcode'un yeni bir sürümünü beklemelisiniz.

EDIT 7/5/16: Bu, Xcode 8 Beta 2'den beri sabittir:

Xcode 8 beta 2 - IDE'de çözüldü

Hata ayıklama

  • Simülatördeki bir uygulamada hata ayıklarken, günlükler görünür. (26457535)

Xcode 8 Beta 2 Sürüm Notları


Bunu da düşündüm, ama ne bir watchOS uygulaması ne de watchOS simülatörü kullanmıyorum. Ama yine de diğer Sims'lerde de olabilir. Şimdilik beklemeye alın ve belirli bir Xcode 8 Beta sürümünün önümüzdeki haftalar / aylar içinde çözülüp çözülmeyeceğini görün.
Hans Knöchel

@HansKnoechel ben de değilim ama bu sorunun herhangi bir uygulamada oluştuğunu onaylayabilirim. Apple'ın yayın notlarının ve WWDC'deki bazı tartışmaların yanı sıra "resmi" bir kelime yok.
JAL

teşekkürler, burada da aynı! WWDC'de yarın hakkında konuşmalıyız, hehe :-)
Hans Knöchel

Ayrıca iPhone 5s Simulator'umda, muhtemelen tüm simülatörlerde olur.
SimplGy


7

Bu artık xcode 8.1'de (sorunlu Sürüm 8.1 beta (8T46g)) bir sorun değildir . OS_ACTIVITY_MODEOrtam değişkenini şemanızdan kaldırabilirsiniz .

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

Hata ayıklama

• Xcode Hata Ayıklama Konsolu artık Simülatördeki uygulamalarda hata ayıklama yaparken sistem çerçevelerinden fazladan günlük kaydı göstermiyor. (26652255, 27331147)


20
8.1'de hala çok fazla sahte günlük kaydı alıyorum. Çoğunlukla garip soket ve tcp bağlantı şeyler. Başka biri mi, yoksa sadece ben mi?
Jordan Smith

3
Xcode 8.1'i bugün indirdim (31/10/2016) ve hala [MC] Reading from private effective user settings.boş yeni bir kukla projeden File> New> Project gibi bazı hata ayıklama günlüklerini görüyorum .
Zhang

4

In Xcode 10OS_ACTIVITY_MODE ile değişken disable(veya default) değeri de kapanır NSLogne olursa olsun.

Konsol gürültüsünden kurtulmak istiyorsanız, ancak kendi günlüklerinizden kurtulmak istemiyorsanız printf(""), OS_ACTIVITY_MODE= 'den etkilenmediği için NSLog yerine iyi eskiyi deneyebilirsiniz disable.

Ama daha iyi yeni kontrol os_logAPI burada .


1

Bu çözüm benim için çalışıyor:

  1. Simülatörde uygulamayı çalıştırın
  2. Sistem günlüğünü açın ( + /)

Bu, tüm hata ayıklama verilerini ve NSLogs'unuzu boşaltacaktır.

Yalnızca NSLog ifadelerinize filtre uygulamak için:

  1. Her birinin önüne bir sembol ekleyin, örneğin: NSLog(@"^ Test Log")
  2. Sonuçları sağ üstteki "^" arama kutusunu kullanarak yukarıdaki durumda filtreleyin

Ne almalısınız:

Konsolun ekran görüntüsü

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.