Aplikasi Debugging Saat Diluncurkan oleh Push Notification

135

Saya sedang mengembangkan aplikasi yang menerima Pemberitahuan Push. Saya memiliki ini semua bekerja 100% melalui halaman PHP. Ada beberapa jenis pemberitahuan push yang dapat diterima aplikasi saya. PHP menangani ini dan mengirimkan paket informasi yang berbeda ke aplikasi saya yang semuanya diterima dengan baik.

Namun, saat pengguna "melihat" notifikasi dan aplikasi saya diluncurkan, saya jelas ingin mengambil tindakan yang berbeda dari yang saya lakukan jika pengguna hanya meluncurkan aplikasi secara manual - dan di atas itu, tindakan yang berbeda tergantung pada jenis notifikasi push. Saya telah membuat ini bekerja dengan baik ... secara struktural.

Salah satu jenis push saya seharusnya membuka UIView yang membuat beberapa koneksi ke beberapa server berbeda dan menegosiasikan data bolak-balik. UIView ini berfungsi dengan baik ketika, misalnya, dipicu dari menu utama - namun ketika notifikasi push saya memicu munculnya UIView ini, koneksi soket tidak berfungsi seperti yang diharapkan.

Sekarang pertanyaan saya bukan tentang soket, tetapi lebih dari itu - Bagaimana Anda men-debug masalah seperti itu ?? Dari apa yang dapat saya katakan (saya relatif baru) ketika aplikasi diluncurkan dari pemberitahuan push, tidak ada cara untuk menautkan eksekusi itu ke debugger / konsol / dll ... Saya mengalami waktu yang sangat sulit untuk mencoba men-debug kode menggunakan UIAlertViews, karena ada banyak jalur komunikasi bolak-balik antara berbagai server.

Setiap saran yang Anda berikan untuk saya akan sangat kami hargai.

Dutchie432
sumber

Jawaban:

147

Di XCode <4.0 (untuk XCode> = 4, lihat jawaban dengan delirus di bawah ini), Anda sekarang dapat mengonfigurasi Xcode untuk memasang debugger ke aplikasi setelah Anda meluncurkannya, daripada meluncurkan aplikasi melalui debugger. Ini memungkinkan Anda men-debug hal-hal yang bervariasi berdasarkan status peluncuran aplikasi Anda, seperti skema URL, papan tempel, dan pemberitahuan push.

  1. Di Xcode, lihat di bilah Sumber, dan di bawah Target akan ada Executable.
  2. Tampilkan inspektur untuk aplikasi Anda dalam file yang dapat dieksekusi.
  3. Klik pada tab Debugging di inspector.
  4. Hapus centang "Mulai dapat dieksekusi setelah memulai debugger"
  5. Periksa "Tunggu peluncuran / pemberitahuan push berikutnya"

Sekarang ketika Anda mengklik debug dari Xcode alih-alih meluncurkan aplikasi, sebuah jendela akan ditampilkan memberi tahu itu menunggu aplikasi untuk diluncurkan. Anda kemudian meluncurkan aplikasi secara normal di telepon dan Xcode melampirkannya

Louis Gerbarg
sumber
37
Aku tahu ini mungkin tidak pantas, tapi aku mencintaimu. :)
Dutchie432
17
Saat Anda meluncurkan cara ini, stdin, stdout, stderr aplikasi Anda tidak dirutekan ke konsol GDB, mereka diarahkan ke tempat mereka berada dalam peluncuran aplikasi normal. Anda dapat melihat NSLog () di konsol sistem perangkat dengan melihat perangkat di penyelenggara.
Louis Gerbarg
1
Anda mengajari saya beberapa poin yang sangat berharga di sini. TERIMA KASIH. Saya menghabiskan 2 hari terakhir mencoba men-debug sesuatu yang dapat saya perbaiki dalam waktu 20 menit setelah posting Anda.
Dutchie432
1
@stigi bekerja di simulator untuk saya menguji skema URL. Saya menggunakan xcode 4.5 jika itu penting
dreyln
1
@dreyln komentar saya dari 2009 :) banyak yang berubah sejak dari. Tapi terima kasih atas perhatiannya!
stigi
124

Untuk Xcode 4 Anda harus:

  1. Edit skema aktif Anda melalui tarik-turun "Skema". ( + <)
  2. Kemudian pilih produk Anda - 'Run MyApp.app' di sebelah kiri.
  3. Pilih tab 'Info' di sebelah kanan.
  4. Dan akhirnya pilih opsi "Tunggu MyApp.app untuk diluncurkan".

Lebih lanjut di sini di bagian "Kustomisasi Executable di Editor Skema".

EDIT:
Jika Anda melewatkan log di GDB, lihat komentar Louis Gerbarg untuk jawabannya.

matm
sumber
1
Saya menggunakan Xcode 4.2 untuk Lion dan, meskipun aplikasi diluncurkan dari skema URL dengan benar dan eksekusi debugger tidak berhenti, konsol tidak menampilkan apa pun. Apakah saya melewatkan sesuatu?
LoDani
@LoDani sama di sini, apakah Anda pernah mencari tahu mengapa?
davis
3
@LoDani, Davis G .: Apakah Anda melihat komentar Louis tentang jawaban yang diterima? stackoverflow.com/questions/1239000/… Saat diluncurkan dengan cara ini, stdin / out / err tidak dialihkan ke konsol.
Ivan Vučica
Terima kasih, Anda menyelamatkan hari saya! Mencoba mengatasi bug yang hanya terjadi saat aplikasi saya dimulai oleh penangan url.
Eliot
@delirus - Terima kasih telah memperbarui ini untuk Xcode 4.
Dutchie432
112

Untuk XCode 10, 9, 8, 7 & 6:

  1. Pilih Skema di toolbar (di sebelah kiri perangkat yang Anda gunakan untuk debugging)
  2. Pilih Edit Skema
  3. Pilih Jalankan di panel kiri
  4. Untuk opsi Launch , pilih Wait for executable to launch
  5. Tutup Editor Skema dan Jalankan proyek XCode Anda

Sekarang Anda dapat men-debug saat meluncurkan dari pemberitahuan, url khusus atau dengan menyentuh ikon aplikasi.

bgolson.dll
sumber
9
Jawaban ini menyebabkan banyak masalah bagi saya meskipun secara umum mengarahkan saya ke jalan yang benar. Langkah 3 agak menyesatkan. Anda harus melakukannya, tentu saja; pilih Jalankan di panel kiri. Tapi, harus ada juga langkah 5 dengan kata-kata konseptual yang sangat mirip: Klik tombol Jalankan xcode, sebelum mengharapkan hasilnya ... Karena pada awalnya tidak berhasil untuk saya, saya meminta saran dari rekan kerja lain ... mereka bertanya saya jika saya melakukan hal Jalankan, yang saya jawab ya, memikirkan opsi tidak. 3 ... Seharusnya benar-benar ada langkah 5 untuk ini ...
Florin Odagiu
@FlorinOagiu Panggilan yang bagus. Menambahkan langkah 5. Terima kasih!
bgolson
Jika Xcode memulihkan tab skema yang berbeda, opsi Luncurkan terletak di bawah tab Info.
Nate Whittaker
3
Saya tidak mendapatkan output apa pun di jendela debugger saat meluncurkan aplikasi secara manual.
dvdblk
3

Saya tidak bekerja dengan pemberitahuan push, jadi saya tidak tahu cara kerja sebenarnya dari pemberitahuan push. Namun, saya akan mencoba meniru penerimaan pemberitahuan push dengan membiarkan metode utama program Anda menganggap pemberitahuan telah diposting jika memungkinkan, atau memanggil metode application: didFinishLaunchingWithOptions: UIApplicationDelegate dari dalam metode applicationDidFinishLaunching:.

HTH - Bersulang, Daan

drvdijk.dll
sumber
Juga ide yang bagus, tetapi meniru selalu merupakan yang terbaik ke-2 untuk men-debug yang asli! Selamat Coding!
Dutchie432
3

Di Xcode 6:

  1. hubungkan iPhone ke Macbook dengan USB
  2. luncurkan aplikasi di iPhone dengan mengetuk ikon
  3. Dalam menu Xcode, Debug> Attach to Process> Pilih App Anda
Ali Saeed
sumber
1
Anda tidak akan dapat men-debug jalur peluncuran penting dengan pendekatan ini.
Zorayr
2

Untuk XCode 11 dan 10, Anda dapat melakukan hal berikut:

  1. Pilih opsi Skema.
  2. Pilih Edit Skema.

  3. Pilih opsi Jalankan dari panel kiri

  4. Di bagian peluncuran, pilih tunggu hingga eksekusi diluncurkan , lalu tutup dialog.

  5. Bangun dan jalankan proyek. Anda sekarang dapat meluncurkan aplikasi baik dengan mengetuk ikon aplikasi, atau dengan mengetuk pesan notifikasi.

Ramy Rizkalla
sumber