Sembunyikan log Xcode aneh yang tidak diinginkan

695

Saat menggunakan Xcode 8+ dan membuat proyek kosong baru, log berikut muncul saat menjalankan aplikasi:

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

Mungkin seseorang sudah menemukan konfigurasi untuk menangani ini?

Hans Knöchel
sumber
1
Tampaknya hanya informasi debug logging yang tersisa dari pengembangan. Investigasi ...
JAL
apakah Anda mematikan penggunaan api penghubung dinamis dalam xcode?
Teja Nandamuri
Sepertinya tidak berfungsi untuk saya di Xcode 8, solusi ini hanya berfungsi untuk Xcode 8 beta.
Badal Shah
Saya mengalami masalah ini dengan Xcode 8.2.1 di El Capitan. Memutakhirkan ke macOS Sierra memperbaiki masalah.
hwaxxer
Saya masih melihat masalah pada Xcode 9.3, saya telah mengirimkan Apple Bug # 34767176 (Xcode 9 Menampilkan Kerangka Sistem Pernyataan Cetak Debug), yang merupakan duplikat bug terbuka # 32256894 Silakan kirim duplikat bug ke Apple: bugreport.apple.com/web
Paul Solt

Jawaban:

1507

Coba ini:

1- Dari menu Xcode terbuka: Produk> Skema> Skema Edit

2- Pada Variabel Lingkungan Anda atur OS_ACTIVITY_MODE=disable

Tangkapan layar

iDevzilla
sumber
25
Ini juga berfungsi pada rilis Xcode 8.0 jadi saya sarankan itu solusinya.
nadein
27
Bagi siapa pun yang bertanya-tanya bagaimana menuju ke layar itu, Anda harus pergi ke Produk> Skema> Edit Skema atau Cmd + <
chrishale
46
@ iDevzilla, Ada beberapa masalah dengan solusi ini, ia menghilangkan beberapa hal penting dari log ketika menggunakan perangkat nyata, seperti data yang masuk sendiri. Harap ulas lagi, saya tidak yakin itu solusi yang paling ideal.
Itai Spector
104
Sayangnya, opsi ini menyembunyikan semua NSLogdari perangkat nyata bagi saya ...
Dmitry Isaev
8
Masalahnya hanya ada di Simulator. Secara pribadi saya tidak percaya itu adalah ide yang baik untuk menambahkan variabel lingkungan, karena juga menyembunyikan log penting seperti masalah dengan Layout Constraints dan antara lain contoh @ AirXygène berikan. Di simulator Anda juga dapat menekan "CMD + /" untuk membuka konsol, itu akan memberi Anda log kuno. Semoga Apple akan memperbaiki masalah ini dalam Xcode, ada banyak minat dalam melihat jumlah upvotes;)
Bocaxica
360

Membangun tweet asli dari @rustyshelf, dan jawaban yang diilustrasikan dari iDevzilla, inilah solusi yang membungkam suara dari simulator tanpa menonaktifkan output NSLog dari perangkat.

  1. Di bawah Produk> Skema> Edit Skema ...> Jalankan (Debug), tetapkan variabel lingkungan OS_ACTIVITY_MODE menjadi $ {DEBUG_ACTIVITY_MODE} sehingga terlihat seperti ini:

masukkan deskripsi gambar di sini

  1. Buka pengaturan build proyek Anda, dan klik + untuk menambahkan Pengaturan Buatan Pengguna bernama DEBUG_ACTIVITY_MODE. Luaskan pengaturan ini dan Klik tanda + di sebelah Debug untuk menambahkan nilai spesifik platform. Pilih dropdown dan ubah ke "Any iOS Simulator". Kemudian atur nilainya ke "disable" sehingga terlihat seperti ini:

masukkan deskripsi gambar di sini

cduhn
sumber
6
@NSNoob pastikan Anda tidak memiliki spasi dalam variabel env.
sbarow
7
Sayang sekali ini bukan jawaban yang diterima dan terlalu buruk jawaban ini kehilangan hitungan suara. Banyak jawaban IMHO lebih baik karena OS_ACTIVITY_MODE hanya dinonaktifkan untuk DEBUG dibangun pada simulator.
Swany
18
Ini tidak berhasil untuk saya, dan tidak juga jawaban terpilih. Menggunakan Xcode 8.2.1 pada OS X 10.11.6 El Capitan. Tapi apa yang berhasil adalah kombinasi dari jawaban ini dan yang oleh BaseZen, menggunakan OS_ACTIVITY_DT_MODE bukannya OS_ACTIVITY_MODE. (Dan secara tidak terduga bagi saya setidaknya "TIDAK" dan "menonaktifkan" mematikan logging yang merajalela.)
RenniePet
1
@RenniePet, itulah yang melakukannya untuk saya. Terima kasih!
Misha
8
Solusi ini akan menyembunyikan semua NSLog mulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
88

OS_ACTIVITY_MODE tidak bekerja untuk saya (itu mungkin telah karena saya typo'd disablesebagaidisabled , tetapi tidak bahwa lebih alami?!?), Atau setidaknya tidak mencegah banyak pesan. Jadi, inilah kesepakatan nyata dengan variabel lingkungan.

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

Jadi pengaturan OS_ACTIVITY_DT_MODE untuk "TIDAK" dalam variabel lingkungan (metode GUI dijelaskan dalam screenshot Skema di jawaban utama) membuatnya bekerja untuk saya.

Sejauh NSLogmenjadi tempat pembuangan untuk pesan-pesan sistem, kesalahan, dan debugging Anda sendiri: pendekatan logging sebenarnya mungkin diperlukan, misalnya https://github.com/fpillet/NSLogger .

ATAU

Minum Kool-Aid yang baru: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Tidak mengherankan bahwa ada beberapa halangan setelah merombak keseluruhan API logging.

TAMBAHAN

Lagi pula, NSLogitu hanya omong kosong:

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

NSLog / CFLog

NSLog sekarang hanya shim ke os_log dalam sebagian besar keadaan.

Masuk akal sekarang untuk mengutip sumber untuk variabel env lainnya. Tempat yang cukup berbeda, kali ini dari internal Apple. Tidak yakin mengapa mereka tumpang tindih. [Komentar salah tentang NSLogdihapus]

[Diedit 22 Sep]: Saya ingin tahu apa yang "dilepaskan" dan "streaming" berbeda dari "debug". Sumber tidak cukup.

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
sumber
11
Selalu menyenangkan melihat jawaban yang memberikan alasan dan latar belakang daripada sekadar perbaikan cepat.
jscs
Bekerja jawaban ini menggunakan OS_ACTIVITY_DT_MODE = TIDAK
Almas Adilbek
1
Apakah ini menghasilkan perilaku yang berbeda dari OS_ACTIVITY_MODE = menonaktifkan? Apakah ada alasan untuk memilih solusi ini?
n8Rabu
1
Itu tidak. Itu menyembunyikan semuanya.
durazno
2
@Frizlab Ya saya menyebutkan keduanya di posting saya. Lihat "ATAU" ... Saya merujuk os_logsecara informal sebagai Kool Aid baru.
BaseZen
64

Tweet memberikan jawaban untuk saya - https://twitter.com/rustyshelf/status/775505191160328194

Untuk menghentikan Simulator Xcode 8 iOS dari logging seperti orang gila, setel variabel lingkungan OS_ACTIVITY_MODE = nonaktifkan dalam skema debug Anda.

Itu berhasil.

Peter Smith
sumber
6
Seperti yang sudah dikatakan: OS_ACTIVITY_MODE = disable menonaktifkan semua logging lainnya dengan NSLog.
dzensik
5
Solusi ini akan menyembunyikan semua NSLog mulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
34

Silakan temukan langkah-langkah di bawah ini.

  1. Pilih Produk => Skema => Edit Skema atau gunakan pintasan: CMD + <
  2. Pilih Runopsi dari sisi kiri.
  3. Pada bagian Variabel Lingkungan, tambahkan variabel OS_ACTIVITY_MODE = nonaktifkan

Untuk informasi lebih lanjut, silakan temukan perwakilan GIF di bawah ini.

Edit Skema

Ramkrishna Sharma
sumber
3
Tunggu .... Pada menjalankan kedua itu berhasil. Kudos untuk Video Gif. Jawaban terbaik selalu ada di bagian bawah!
eonist
2
Solusi ini akan menyembunyikan semua NSLog mulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
33

Ini masih belum diperbaiki di Xcode Version 8.0 beta 2 (8S162m) untuk saya dan log tambahan juga muncul di konsol Xcode

** EDIT 8/1/16: Ini telah diakui dalam catatan rilis untuk Xcode 8 Beta 4 (8S188o) sebagai masalah yang masih ada .

Masalah yang Diketahui di Xcode 8 beta 4 - IDE

Debugging

• Konsol Debug Xcode menunjukkan pencatatan tambahan dari kerangka kerja sistem saat debugging aplikasi di Simulator. (27331147, 26652255)

Agaknya ini akan diselesaikan oleh rilis GM. Sampai saat itu kesabaran dan meskipun tidak ideal tetapi solusi yang saya gunakan ada di bawah ...

Mirip dengan jawaban sebelumnya saya harus:

  • awali log cetak saya dengan semacam karakter khusus (misalnya * atau ^ atau! dll dll)

  • Kemudian gunakan kotak pencarian di kanan bawah panel konsol untuk memfilter log konsol saya dengan memasukkan karakter khusus yang saya pilih untuk mendapatkan konsol untuk menampilkan log cetak saya sebagaimana dimaksud

menghibur

Pez
sumber
1
@SimplyLearning Anda akan menemukan informasi ini di seluruh twitter. Tetapi Anda dapat memeriksa situs web resmi ini dari apple: developer.apple.com/news atau newsfeed mereka untuk mendapatkan pembaruan saat mereka menerbitkannya: developer.apple.com/news/rss/news.rss Ngomong-ngomong: ini sepertinya masih menjadi masalah dalam Xcode Beta 3.
benrudhart
50
Baru saja mendapat Xcode 8 GM, dan masalahnya masih ada. Sangat menyebalkan!!
AdamM
8
Baru saja mengunduh Xcode Versi 8.0 (8A218a) dari App Store. Masalahnya masih ada.
Statik
4
Benar-benar konyol. Masih ada di versi Final MAS.
Shai Mishali
1
Kami menggunakan awalan tag untuk memfilter. Beberapa masalah adalah: Beberapa baris hanya akan menampilkan yang pertama. Saat menggunakan lldb untuk debugging, Anda perlu mengaktifkan pemfilteran. Benar-benar sedih bahwa pada hari ini, konsolnya sangat terbatas. Kami memiliki Aplikasi untuk pemfilteran yang layak, tetapi kami perlu menyalin / menempel dari konsol. Sedihnya.
bauerMusic
23

Solusi saya adalah dengan menggunakan perintah debugger dan / atau Pesan Log di breakpoints.

masukkan deskripsi gambar di sini

Dan ubah output konsol dari All Output ke Debugger Output like

masukkan deskripsi gambar di sini

mrahmiao
sumber
14

Baik. Sepertinya ada banyak keributan tentang ini, jadi saya akan memberikan kalian semua cara untuk bertahan tanpa menggunakan trik skema itu. Saya akan membahas Simulator iOS secara khusus, tetapi ini juga mungkin perlu diterapkan untuk TV Sim juga yang terletak di dir yang berbeda.

Masalah yang menyebabkan semua ini adalah plist yang terletak di dalam direktori Xcode. Ada proses yang diluncurkan bernama configd_sim ketika Sim mulai yang membaca daftar dan mencetak informasi debug jika daftar menentukan mereka harus dicatat.

Plist ada di sini:

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

Jika Anda bermain-main dengan beta, perhatikan bahwa direktori akan berbeda.

Anda akan melihat banyak daftar di direktori ini. Sekarang, bangun dan jalankan aplikasi Anda dan amati lognya. Anda mencari konten segera diikuti oleh subsistem: bagian. Ini adalah nama yang segera mengikuti ini yang mewakili daftar masalah yang sesuai.

masukkan deskripsi gambar di sini

Dari sana, ubah plist untuk "Enable" => "Default"menghapus kunci / nilai debug [Level] yang merupakan kamus yang berisi kunci / nilai ... atau cukup hapus plist. Perhatikan, bahwa Anda harus melakukan root untuk melakukan salah satu dari ini karena mereka berada di aplikasi Xcode.

yang plutil -pperintah mungkin berguna untuk Anda juga. yaitu

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

Ini memberiku salah satu daftar bermasalah yang berisi:

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

Semoga berhasil :]

Komet Sozin
sumber
Saya zip, lalu dihapus jika saya perlu mengembalikan.
dandan78
1
Saya menemukan ini tidak dapat membungkam banyak kode jaringan, mungkin karena tidak memiliki nama subsistem:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Sayangnya, saya hanya menjawab pertanyaan OP yang tidak mengandung masalah logging tcp. Anda dapat membuat posting SO baru jika Anda perlu bantuan mengatasi masalah ini.
Sozin's Comet
13

Ini terkait dengan masalah yang diketahui dengan penebangan yang ditemukan di Catatan Rilis Beta Xcode 8 (juga meminta seorang insinyur di WWDC).

Saat men-debug aplikasi WatchOS di simulator Tonton, OS dapat menghasilkan penebangan yang tidak membantu secara berlebihan. (26652255)

Saat ini tidak ada solusi yang tersedia, Anda harus menunggu versi Xcode baru.

EDIT 7/5/16: Ini seharusnya diperbaiki pada Xcode 8 Beta 2:

Diselesaikan dalam Xcode 8 beta 2 - IDE

Debugging

  • Saat men-debug aplikasi di Simulator, log terlihat. (26457535)

Catatan Rilis Xcode 8 Beta 2

JAL
sumber
Pikir itu juga, tapi saya tidak menggunakan aplikasi watchOS atau simulator watchOS. Tapi itu masih mungkin terjadi pada Sims lain juga. Tunda sekarang dan lihat apakah Xcode 8 Beta tertentu akan memperbaikinya selama beberapa minggu / bulan ke depan.
Hans Knöchel
@HansKnoechel juga bukan saya tetapi saya dapat mengkonfirmasi bahwa masalah ini terjadi pada aplikasi apa pun. Tidak ada kata "resmi" dari Apple selain catatan rilis dan beberapa diskusi di WWDC.
JAL
terima kasih, sama di sini! Kita harus membicarakannya besok selama WWDC, hehe :-)
Hans Knöchel
Juga terjadi pada iPhone 5s Simulator saya, mungkin semua simulator.
SimplGy
Saya tidak bisa mendapatkan akses ke tautan dalam jawaban ini, meskipun sudah masuk, tetapi tautan ini berfungsi: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/…
SimplGy
7

Ini tidak lagi menjadi masalah dalam xcode 8.1 (diuji Versi 8.1 beta (8T46g)) . Anda dapat menghapus OS_ACTIVITY_MODEvariabel lingkungan dari skema Anda.

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

Debugging

• Konsol Debug Xcode tidak lagi menunjukkan pencatatan tambahan dari kerangka kerja sistem saat debugging aplikasi di Simulator. (26652255, 27331147)

mriddle89
sumber
20
Saya masih mendapatkan banyak logging palsu di 8.1. Kebanyakan hal-hal koneksi socket dan tcp aneh. Ada orang lain, atau hanya aku?
Jordan Smith
3
Saya baru saja mengunduh Xcode 8.1 hari ini (31/10/2016) dan masih melihat beberapa debugging logging seperti ini [MC] Reading from private effective user settings.dari proyek dummy kosong baru File> New> Project.
Zhang
4

Dalam Xcode 10 yang OS_ACTIVITY_MODEvariabel dengan disable(atau default) nilai juga mematikan NSLogtidak peduli apa.

Jadi jika Anda ingin menghilangkan kebisingan konsol tetapi bukan dari log Anda sendiri, Anda dapat mencoba yang lama dan printf("")bukan NSLog karena tidak terpengaruh oleh OS_ACTIVITY_MODE=disable .

Tetapi lebih baik periksa os_logAPI baru di sini .

Jakub Truhlář
sumber
1

Solusi ini telah bekerja untuk saya:

  1. Jalankan aplikasi di simulator
  2. Buka log sistem ( + /)

Ini akan membuang semua data debug dan juga NSLogs Anda.

Untuk memfilter hanya pernyataan NSLog Anda:

  1. Awali masing-masing dengan simbol, misalnya: NSLog(@"^ Test Log")
  2. Saring hasil menggunakan kotak pencarian di kanan atas, "^" dalam kasus di atas

Inilah yang harus Anda dapatkan:

Cuplikan layar konsol

psobko
sumber