iOS 10 tidak mencetak NSLogs

89

Tidak ada yang dicetak dari NSLogXcode 8.0 beta (8S128d). printftidak berubah

Ini kode saya:

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

Inilah keluaran dari iOS 9 Simulator:

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

Inilah keluaran dari iOS 10 Simulator:

hello from printf
Tyler Sheaffer
sumber
Saya memiliki masalah serupa. Tapi di iOS 8.1, Xcode 8. Saya memeriksa setiap jawaban di sini. Ternyata saya melakukan semuanya dengan benar. Tidak ada yang benar-benar membantu. Jadi, saya mematikan perangkat dan menyalakannya. Berhasil. Saya menulis komentar ini di sini agar dapat membantu orang lain yang menghadapi masalah serupa
KrishnaCA

Jawaban:

229

Bisa jadi Anda menambahkan properti "OS_ACTIVITY_MODE": "disable" di variabel lingkungan Skema (untuk menyembunyikan keluaran OS dari simulator) dan melupakannya, dan sekarang sedang berjalan di perangkat sebenarnya.

Di Xcode 8:

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

Hanya tambahkan OS_ACTIVITY_MODEdan centang saja (Jangan tambahkan nilai)

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Ringkasan: Ini adalah bug dari Xcode 8 + iOS10, kita dapat menyelesaikannya dengan cara ini:

  • Saat menggunakan simulator, tambahkan Nama "OS_ACTIVITY_MODE" dan Nilai "nonaktifkan" dan periksa.

  • Saat berada di perangkat nyata, hanya tambahkan "OS_ACTIVITY_MODE" dan centang (Jangan tambahkan Nilai). Anda akan melihat NSLog di Konsol Xcode8.

pengguna6833743
sumber
4
> "Jangan tambahkan Nilai" Saya setel ke "nonaktifkan" dan berhasil! Bidang kosong tidak bekerja untuk saya.
m8labs
Apakah Anda yakin ini berfungsi saat debugging perangkat iphone asli, bukan simulator? Jika saya menyetelnya ke "nonaktifkan", konsol tidak dapat melakukan NSLog saat melakukan debug iphone asli.
pengguna6833743
Saya sudah memeriksanya sekarang tanpa "menonaktifkan", ini berfungsi pada perangkat sekarang, tetapi rusak pada simulator, ini menunjukkan semuanya sekarang lagi ...
m8labs
2
apakah ada cara untuk mengotomatiskan proses ini? sangat menjengkelkan bahwa kita harus ingat untuk bolak-balik seperti ini: /
rumah kaca
2
Solusi ini akan menyembunyikan semua NSLog yang dimulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
27

Jika Anda memeriksa catatan rilis Xcode 8 beta , Anda akan menemukan bahwa tertulis:

Saat men-debug aplikasi yang berjalan di Simulator, log mungkin tidak terlihat di konsol. Solusi: Gunakan perintah + / di Simulator.app untuk membuka log sistem di aplikasi Konsol untuk melihat NSLogs. (26457535)

Lucas
sumber
9
Saya tidak dapat melihat keluaran NSLog di perangkat iOS 10 yang sebenarnya juga. Jika Anda menggunakan perangkat nyata, Anda dapat membuka jendela Perangkat (Shift + Command + 2) dan melihat log perangkat di sana, tetapi sulit untuk melihat log aplikasi debugging karena konsol menampilkan semua log dari sistem dan aplikasi.
kientux
19

NSlog atau print sebenarnya dijalankan tetapi tersembunyi di antara banyak output debug konsol lain untuk mengatasi masalah ini Buka Xcode8:

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

tambahkan "OS_ACTIVITY_MODE" dan setel Nilai ke "nonaktifkan" dan centang.

klik tutup

xcode9

tambahkan "OS_ACTIVITY_MODE" dan setel Nilai ke "default" dan centang.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

MiladiuM
sumber
Ini tidak berhasil untuk saya. NSLogs tidak muncul untuk aplikasi yang diterapkan. Saya menggunakan xcode 8.1 (berjalan di Mac 10.11) dengan perangkat iOS 10.
mobjug
22
Solusi ini akan menyembunyikan semua NSLog yang dimulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
3
Jawaban ini harus diperbarui untuk memperhitungkan koreksi @ Cœur untuk Xcode 9.
Yoel
8

Juga, pastikan Konsol benar-benar terlihat di Xcode (yaitu, pastikan ikon sebelah kanan disorot dengan warna biru, seperti gambar di bawah). Setelah saya mengupgrade Xcode, itu menyembunyikan Konsol dan menunjukkan hanya tampilan Variabel. Ini membuatnya terlihat seperti NSLog()tidak berfungsi dengan baik, padahal memang berfungsi dengan benar, saya hanya tidak bisa melihat hasilnya.

masukkan deskripsi gambar di sini

Stewart Macdonald
sumber
Juga dapat mengaktifkan konsol dengan Shift + ⌘ + CXcode versi 8.3.3
DJ2
desain ui yang hebat @Apple, ikon fullof yang tidak diketahui artinya
Ornithopter
7

Saya tidak dapat melihat keluaran NSLog di perangkat iOS 10 yang sebenarnya juga. Jika Anda menggunakan perangkat nyata, Anda dapat membuka jendela Perangkat dari Xcode (Shift + Command + 2) dan melihat log perangkat di sana, tetapi sulit untuk melihat log aplikasi Anda karena konsol menampilkan log dari sistem dan semua aplikasi.

(Saya menggunakan Xcode 7, jadi itu mungkin bukan masalah Xcode tetapi masalah iOS 10)

kientux.dll
sumber
Saya tidak melihat NSLog untuk aplikasi saya di jendela perangkat di bawah iOS 10 GM ... apakah Anda mengalami masalah yang sama?
TahoeWolverine
Saya dapat melihat log di Xcode 7 dengan iOS 10 GM, tidak perlu lagi membuka jendela perangkat.
kientux
2
Saya tidak berbicara tentang menjalankan dari Xcode, tetapi saya berbicara tentang log yang dicetak dari aplikasi yang diterapkan.
TahoeWolverine
Ada kemajuan dalam hal ini?
jhore
NSLog dan printf dihilangkan dari log perangkat iOS 10 dalam aplikasi yang diterapkan. Anda dapat menambahkan makro global untuk menggantikannya dengan panggilan langsung ke os_log.
Elist
6

Hmmm ... sepertinya properti "OS_ACTIVITY_MODE": "nonaktifkan" CEGAH NSlog muncul di log Xcode 9.

Menghapus centang pada nilai ini di skema saya memulihkan log saya.

David Hersey
sumber
6

Untuk siapa saja yang mengetahui hal ini di masa depan. Alasan NSLog tidak mencetak ke syslog di iOS 10 dan iOS 11 adalah karena Apple mengubah ke Unified Logging.

Anda dapat melihat WWDC membicarakannya di sini: https://developer.apple.com/videos/play/wwdc2016/721/

Dokumentasi di sini: https://developer.apple.com/documentation/os/logging

Dari 10 Anda harus menggunakan os_log daripada NSLog.

Cara menemukan log di disk: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Untuk meringkas, log berada di /var/db/diagnosticsmana dapat ditemukan VM di/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

Salin semua item di dalam diagnosticsdan uuidtextke dalam satu folder (jangan sertakan folder diagnostik atau uuidtext apa yang ada di dalamnya).

Ubah nama folder itu foldername.xarchive.

Buka di Console.app atau gunakan OSX util log:log show <path to archive> --info --predicate <options>

shane
sumber
Bagaimana dengan iOS?
kakyo
1

Saya menggunakan Xcode 8, jadi saya juga mengalami masalah yang sama. Dan saya memecahkan masalah ini dengan menambahkan value = disablesimulator, tetapi pada mesin nyata saya tidak menambah nilai.

pengguna6733740
sumber
1
Saya mengalami beberapa masalah dengan Xcode 9. Saya memasukkan argumen: OS_ACTIVITY_MODE tetapi tampaknya tidak berfungsi ...
Alessio Campanelli
4
Solusi ini akan menyembunyikan semua NSLog yang dimulai dengan Xcode 9. Untuk mempertahankan NSLog, ganti disabledengan default.
Cœur
Menurut saya ini adalah jawaban yang benar. OS_ACTIVITY_MODEdengan disableatau defaultlangsung
Greg
1

NSLogpesan tidak lagi ditampilkan ketika saya meningkatkan ke Xcode 9.1 + iOS 11.1. Awalnya jawaban yang diterima memberi saya cara untuk mengatasi ini menggunakan aplikasi Konsol dan mengaktifkan Simulator ( lihat jawaban Lucas ).

Di aplikasi Konsol di bawah Actionsaya mencoba memilih Include Debug Messagesdan membatalkan pilihan Include Info Messages(sehingga Konsol tidak dibanjiri dengan pesan sistem). NSLogpesan muncul di jendela Konsol di Xcode tetapi tidak di aplikasi Konsol.

Saya menyadari bahwa harus ada cara yang lebih langsung disableatau mengaktifkan (yaitu default) NSLogsberkat komentar Coeur dalam menanggapi jawaban ini. Menurut pendapat saya itu adalah jawaban terbaik karena pengaturan OS_ACTIVITY_MODEuntuk disableatau defaultakan lebih masuk akal untuk pemula.

Greg
sumber