- (void)viewDidLoad
{
NSLog(@"%s", __func__);
// ...
}
di viewDidLoad
dari ekstensi iOS 8 . yang NSLog
tidak ada output dalam Xcode. NSLog
bekerja seperti biasa di aplikasi kontainer.
Bagaimana saya bisa mendapatkan keluaran dari pesan debug dari ekstensi?
ios
ios8
xcode6
ios-app-extension
ohho
sumber
sumber
Jawaban:
Langkah-langkah untuk men-debug ekstensi aplikasi:
Jalankan aplikasi kontainer. Pada langkah ini, Xcode mengupload aplikasi container dan ekstensi aplikasi ke perangkat atau simulator.
Hentikan aplikasi kontainer. Langkah ini penting saat Anda men-debug di simulator. Jika Anda tidak melakukannya, Xcode akan memberi tahu Anda bahwa simulator sedang digunakan.
Di Xcode, tekan menu Debug -> Attach to Process -> By Process Identifer (PID) atau Name ..., masukkan pengenal ext aplikasi, misalnya com.abc.ContainerApp.MyExtension, untuk memulai debugging. Jangan lupa untuk mengatur break point. (Pembaruan pada 25 Agustus 2014: Anda dapat memasukkan MyExtension (nama ekstensi Anda) secara langsung.)
Di perangkat atau simulator, buka ekstensi aplikasi Anda.
Pembaruan pada 23 Agustus 2014:
Saya menemukan langkah debugging di atas tidak berfungsi dengan baik pada Xcode 6 beta 6 dengan iOS 8 SDK beta 5 pada simulator.
Larutan:
Breakpoint berfungsi. Tapi saya tidak tahu mengapa log tidak muncul di jendela keluaran.
sumber
Saya mengalami masalah ini juga. Ini berfungsi untuk saya jika Anda masuk ke Simulator di bawah menu Debug -> Buka Log Sistem ...
Dari sini Anda dapat melihat semua log Simulator iPhone (termasuk log ekstensi Anda).
sumber
NSLog
bekerja dengan sempurna .Anda hanya tidak melihat apa yang sedang dicatat di area debug Xcode karena debugger Xcode tidak dilampirkan ke ekstensi Anda. Ekstensi hampir sepenuhnya independen dari aplikasi penampungnya. Mereka memiliki pengenal bundel terpisah, misalnya, dan mereka juga merupakan proses terpisah di OS.
Saya telah sukses beragam dalam mendapatkan Xcode untuk dilampirkan ke ekstensi. Seharusnya tampaknya itu akan melampirkan secara otomatis, dan itu muncul di navigator debug sebagai "Menunggu untuk melampirkan", tetapi tidak pernah terpasang.
Terkadang, saya dapat menjalankan target ekstensi saya di Xcode:
Dan kemudian memiliki opsi untuk memilih aplikasi apa untuk menjalankan ekstensi saya. Dalam hal ini, saya akan memilih rekomendasinya untuk "hari ini", yaitu pusat notifikasi.
Dan terkadang itu akan melampirkan debugger ke ekstensi saya. Perhatikan bahwa metode ini hanya berfungsi pada perangkat fisik, tampaknya.
Jika tidak terpasang, Anda dapat menggunakan metode lampiran manual di jawaban @ VinceYaun,
Saya juga mendapatkan berbagai keberhasilan dengan menggunakan metode keterikatan lainnya. Sebagian besar tidak berhasil, dan tampaknya itu hanya bug yang akan diperbaiki di kemudian hari.
Untuk melihat pesan log Anda, buka
Window
->Devices
di bilah atas dan pilih perangkat Anda. Anda dapat memunculkan log perangkat dari bagian bawah jendela itu. Jika Anda menguji simulator, Anda dapat menggunakan jawaban @ BalestraPatrick .Beberapa bug telah diperbaiki di Beta 2, dan perkiraan saya adalah bahwa pada akhirnya debugger akan terpasang secara otomatis saat meluncurkan ekstensi.
Pembaruan: Di catatan rilis iOS 8 Beta 4 :
sumber
Saya mengalami masalah ini juga. Xcode tidak pernah melampirkan debugger saya ke ekstensi atau menampilkan pesan NSLog. Jika Anda memasang debugger Xcode secara manual ke proses ekstensi, setidaknya breakpoint berfungsi seperti pesona:
Debug->Attach to process->Your extension name (mine was "com.example.MyExtensionApp.MyExtension")
sumber
Ini bekerja untuk saya :)
sumber
NSLog
hanya akan berfungsi jika Anda menjalankan aplikasi kontainer. Ini tidak akan berfungsi jika Anda menjalankan ekstensi aplikasi, bukan penampung.Xcode 8 dapat men-debug ekstensi:
Hasil: breakpoint dan log berfungsi seperti biasa.
sumber
Apa yang akhirnya memungkinkan saya untuk melihat log di area debugging, berdasarkan saran Michael dan dokumentasi Apple , adalah:
Bangun & Jalankan ekstensi aplikasi di simulator dan, ketika diminta untuk aplikasi host, pilih aplikasi tertentu yang akan Anda gunakan untuk memanggil ekstensi . Dalam kasus saya, saya meluncurkan ekstensi Tindakan saya dari Safari dengan menarik lembar saham di PDF.
Apa yang tidak berfungsi sebelumnya adalah mengikuti saran orang lain untuk menggunakan Today sebagai tuan rumah tetapi kemudian meninggalkan aplikasi itu dan pergi ke Safari untuk memanggil ekstensi saya. Saya bahkan tidak perlu lagi menjalankan aplikasi saya terlebih dahulu sebelum menjalankan ekstensi.
Dari Dokumentasi Apple:
sumber
Saya benar-benar mendapatkan log untuk berjalan cukup sederhana di Xcode 6.3. Pertama, buat dan jalankan aplikasi yang memuatnya. Setelah aplikasi yang memuatnya berjalan di perangkat, buat dan jalankan ekstensi aplikasi dengan mengubah skema ke ekstensi aplikasi.
Apple memiliki dokumentasi yang terkait langsung dengan debugging, pembuatan profil, dan pengujian ekstensi aplikasi Anda.
sumber
Trik yang berhasil untuk saya (meskipun cukup jelek) adalah menempatkan boneka
UILabel
di suatu tempat di sudut bawah ekstensi saya. Saya biasanya menyebutnyalogLabel
. Kemudian dimungkinkan untuk memperbarui teks label ini dengan pernyataan log apa pun yang ingin Anda catat. Pendekatan seperti itu tidak terlalu baik jika Anda perlu membuat log pernyataan dari instance kelas yang berbeda. Dan, jelas, itu mengacaukan UI Anda.Namun, jika Anda memiliki widget yang cukup sederhana dan Anda tidak keberatan dengan sedikit kekacauan pada UI, ini berhasil. Saya telah mencoba semua solusi lain yang diuraikan dalam diskusi ini dan, sayangnya, tidak ada yang berhasil untuk saya.
sumber
Satu-satunya cara debugging bekerja untuk saya adalah dengan memilih Debug-> Lampirkan Ke Proses Dengan PID atau Nama Kemudian masukkan PID bukan nama ekstensi. Anda dapat menemukan PID dengan menjalankan ekstensi pada perangkat, buka Window-> Perangkat. Temukan perangkat Anda dan lihat konsol. Ketika Anda melihat nama ekstensi Anda, diikuti dengan 5 digit angka. Itu adalah PID
Saya juga meletakkan banyak NSLog di ekstensi untuk menemukan PID juga. Ini ada di xCode 7
sumber
Menghadapi masalah yang sama tentang ekstensi untuk
NSLog
, dan titik putus. Saya telah melawannya selama berhari-hari.Device log
dapat ditemukan sebagai gambar berikut. Ini padaXCode -> Window -> Devices and Simulators
.Setelah masuk
Open Console
, ada kolom pencarian di kanan atas dialog. Saya dapat menerapkan aturan filter di sana. Misalnya, nama proses berisiNotification
kata kunci, atau nama proses harus sama dengan nama target ekstensi, mis .: sama denganMyNotificationServiceExtension
nama proses.sumber
Jelas ada sesuatu yang rusak di Xcode6-B5.
Jika saya mencoba menjalankan ekstensi Foto di Simulator, saya tidak dapat melihat Photos.app sebagai opsi untuk proses pemasangan ekstensi.
Hal yang sama, berjalan di perangkat nyata, beri saya perilaku yang benar.
Dalam kasus pertama breakpoint apapun tidak dihormati. Dalam kasus terakhir, breakpoint berfungsi seperti pesona.
sumber
Anda harus tahu bahwa aplikasi kontainer dan ekstensi adalah dua proses yang berbeda di iOS sedangkan LLVM hanya men-debug utas satu kali, jadi ketika Anda men-debug, konsol tidak pernah mencatat ekstensi dan tidak pernah berhenti di breakpoint.
Anda dapat menyelesaikan sebagian besar masalah dengan metode @Vince Yuan.
Namun, masalah saya adalah bahwa debugger Xcode hampir tidak menghubungkan ekstensi keyboard saya di iOS Simulator dan perangkat, seperti 1 kali dalam 7-8 berjalan, Ini benar-benar masalah probabilitas. Metode @Vince Yuan juga kadang-kadang berhasil.
Pengalaman kecil saya adalah ketika Anda menjalankan skema debug, jika Sesi debug di panel kiri menunjukkan bahwa 'Tanpa Sesi Debug', tidak perlu membuka ekstensi Anda dan mengujinya, debugger tidak terhubung, jalankan saja lagi untuk beruntung.
tetapi ketika Anda melihat com.xxx.xxx.xxx sedang menunggu untuk Lampirkan, ekstensi tersebut pasti bisa di-debug.
Ini adalah trik kecil yang tidak dapat men-debug ekstensi iOS, terutama ekstensi keyboard.
sumber
Pada Xcode 6 Beta 5, saya sudah dapat menggunakan perangkat sebenarnya yang menjalankan iOS8 untuk men-debug ekstensi saya. Coba jalankan di perangkat dan pilih Safari untuk meluncurkannya
sumber
Untuk mengatasi semua status yang disebabkan oleh IDE yang selalu berubah, saya menggunakan Konsol iOS oleh lemonjar.com - ini menampilkan jendela konsol untuk perangkat iOS yang terhubung yang merender pesan syslog apa pun ID prosesnya. Anda dapat melihat pesan log debug aplikasi dan ekstensi sekaligus di sini.
sumber
Saya dapat men-debug ekstensi saya dengan cara yang saya jelaskan di bawah ini:
Debug
->Attach to process by PID or Name
. Nama skema ekstensi Anda.main app target
dan jalankan.Saya harap ini juga berhasil untuk kalian.
sumber