durumu: Bu, Mac OS 10.8 ve Xcode 4.4 kadar yakın zamanda görülmüştür.
tl; dr: Bu iki bağlamda ortaya çıkabilir: cihazda çalışırken ve simülatörde çalışırken. Cihazda çalışırken, cihazın bağlantısını kesmek ve yeniden bağlamak işleri düzeltiyor gibi görünüyor.
Mike Ash önerdi
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
Bu her zaman işe yaramıyor. Aslında benim için hiç işe yaramadı ama bazı durumlarda açıkça işe yarıyor. Sadece hangi vakaları bilmiyorum. Yani denemeye değer.
Aksi takdirde, bunu düzeltmenin bilinen tek yolu kullanıcı başlatmayı yeniden başlatmaktır. Yeniden başlatma bunu yapacak ancak daha az sert / hızlı bir yol var. Başka bir yönetici kullanıcı oluşturmanız gerekir, ancak bunu yalnızca bir kez yapmanız gerekir. İşler kandığında, kendiniz olarak oturumu kapatın, o kullanıcı olarak oturum açın ve ana kullanıcınıza ait olan fırlatmayı öldürün, ör.
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
yerine ana kullanıcı adınızı yazın user_id
. Normal kullanıcınız olarak tekrar giriş yapmak sizi aklı başında duruma döndürür. Biraz acı verici, ama tam bir yeniden başlatmadan daha az.
ayrıntıları:
Bu, Lion / Xcode 4.2 ile daha sık olmaya başladı. (Şahsen, bu kombinasyondan önce hiç görmedim.)
Hata, hata ayıklayıcı onu öldürmeden hata ayıklamayı durdurduğunda uygulama sürecini bir çocuk olarak devralır. Bu genellikle uygulama bir zombi haline, ps Z süreç durumuna sahip tarafından bildirilir.
Temel sorun, launchd'de uygulanan önyükleme ad sunucusunda görünmektedir. Bu (anladığım kadarıyla), uygulama kimliklerini mach bağlantı noktalarına eşler. Hata tetiklendiğinde, uygulama ölür, ancak bootstrap sunucusunun ad sunucusu haritasından temizlenmez ve sonuç olarak, bootstrap sunucusu uygulamanın başka bir örneğinin aynı adla kaydedilmesine izin vermez.
wait()
Zombi için launchd'i zorlamanın bir şeyleri düzelteceği umuluyordu (yorumlara bakın) . Temel problem olan zombi durumu değil (bu yüzden bazı zombiler iyi huyludur) ama bootstrap isim sunucusu ve bu öldürme başlangıcını kısaltmanın bilinen bir yolu yok.
Hata Xcode, gdb ve kullanıcı lansmanı arasında kötü bir şey tarafından tetiklenmiş gibi görünüyor. Ben sadece iphone simülatöründe bir uygulamayı çalıştırarak, gdb içinde durdurarak ve sonra bir yapı yapıp ipad simülatörüne koşarak kama tekrarladım. Anahtarlama simülatörlerine (iOS 4.3 / iOS 5, iPad / iPhone) duyarlı görünüyor. Simülatörleri çok değiştirdiğimde her zaman değil, oldukça sık.
Giriş yaptıktan sonra başlatmayı öldürmek oturumunuzu zorlaştıracaktır. Oturumu kapatmak ve tekrar oturum açmak kullanıcının başlatmasını öldürmez; OS X varolan süreci korur. Yeniden başlatma işleri düzeltecek, ama bu acı verici. Yukarıdaki talimatlar daha hızlıdır.
Apple'a bir hata gönderdim, FWIW. rdar: // 10330930