status: ini telah terlihat sebagai Mac OS 10.8 dan Xcode 4.4.
tl; dr: Ini dapat terjadi dalam dua konteks: saat berjalan di perangkat dan saat berjalan di simulator. Saat berjalan pada perangkat, melepaskan dan menghubungkan kembali perangkat tampaknya memperbaiki keadaan.
Mike Ash menyarankan
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
Ini tidak berfungsi sepanjang waktu. Sebenarnya, itu tidak pernah berhasil untuk saya tetapi jelas bekerja dalam beberapa kasus. Hanya tidak tahu kasus mana. Jadi patut dicoba.
Jika tidak, satu-satunya cara yang diketahui untuk memperbaikinya adalah memulai kembali launchd pengguna. Reboot akan melakukannya tetapi ada cara yang kurang drastis / lebih cepat. Anda harus membuat pengguna admin lain, tetapi Anda hanya perlu melakukannya sekali. Ketika hal-hal mengganjal, keluarlah seperti dirimu sendiri, masuklah sebagai pengguna itu, dan bunuh launchd milik pengguna utama Anda, misalnya,
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
mengganti nama pengguna utama Anda dengan user_id
. Masuk lagi karena pengguna normal Anda mengembalikan Anda ke keadaan waras. Agak menyakitkan, tetapi kurang dari reboot penuh.
detail:
Ini sudah mulai terjadi lebih sering dengan Lion / Xcode 4.2. (Secara pribadi, saya tidak pernah melihatnya sebelum kombinasi itu.)
Bug tersebut tampaknya ada di launchd, yang mewarisi proses aplikasi sebagai anak ketika debugger berhenti men-debug-nya tanpa membunuhnya. Ini biasanya ditandai oleh aplikasi menjadi zombie, memiliki status proses Z dalam ps.
Masalah inti tampaknya berada di server nama bootstrap yang diterapkan di launchd. Ini (sejauh yang saya mengerti) memetakan id aplikasi ke port mach. Ketika bug dipicu, aplikasi mati tetapi tidak dibersihkan dari peta server nama server bootstrap dan sebagai hasilnya, server bootstrap menolak untuk mengizinkan instance aplikasi lain untuk didaftarkan dengan nama yang sama.
Diharapkan (lihat komentar) bahwa memaksa launchd wait()
untuk zombie akan memperbaiki keadaan tetapi tidak. Ini bukan status zombie yang merupakan masalah inti (itulah sebabnya beberapa zombie tidak berbahaya) tetapi server nama bootstrap dan tidak ada cara yang dikenal untuk menghapus kekurangan membunuh launchd ini.
Sepertinya bug dipicu oleh sesuatu yang buruk antara Xcode, gdb, dan launchd pengguna. Saya baru saja mengulangi wedge dengan menjalankan aplikasi di iphone simulator, setelah berhenti dalam gdb, dan kemudian melakukan build dan run ke ipad simulator. Tampaknya peka untuk beralih simulator (iOS 4.3 / iOS 5, iPad / iPhone). Itu tidak terjadi sepanjang waktu, tetapi cukup sering ketika saya banyak beralih simulator.
Membunuh launchd saat Anda masuk akan mengacaukan sesi Anda. Keluar dan masuk kembali tidak mematikan peluncuran pengguna; OS X menjaga proses yang ada. Reboot akan memperbaiki keadaan, tapi itu menyakitkan. Instruksi di atas lebih cepat.
Saya telah mengirimkan bug ke Apple, FWIW. rdar: // 10330930