ステータス:これは、Mac OS 10.8およびXcode 4.4と同じくらい最近見られています。
tl; dr:これは、デバイスで実行しているときとシミュレーターで実行しているときの2つのコンテキストで発生する可能性があります。デバイスで実行している場合、デバイスを切断して再接続すると問題が解決するようです。
マイク・アッシュが提案
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
これは常に機能するとは限りません。実際、私には効果がありませんが、場合によっては明らかに機能します。どのケースかわからない。したがって、試す価値があります。
そうでない場合、これを修正する唯一の既知の方法は、ユーザーlaunchdを再起動することです。再起動すればそれは可能ですが、それほど劇的ではない/より速い方法があります。別の管理ユーザーを作成する必要がありますが、それを行うのは一度だけです。物事が割り込んだら、自分としてログアウトし、そのユーザーとしてログインし、メインユーザーに属するlaunchdを終了します。たとえば、
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
をメインのユーザー名に置き換えますuser_id
。通常のユーザーが正常な状態に戻るときに、再度ログインします。ちょっと痛いですが、完全な再起動ほどではありません。
詳細:
これは、Lion / Xcode 4.2でより頻繁に発生し始めました。(個人的に、私はその組み合わせの前にそれを見たことがない。)
バグはlaunchdにあるようで、デバッガーがkillせずにデバッグを停止したときに、アプリプロセスを子として継承します。これは通常、アプリがゾンビになり、psでプロセスステータスがZになっていることで示されます。
コアの問題は、launchdに実装されているブートストラップネームサーバーにあるようです。これは(私が理解している範囲で)アプリIDをマッハポートにマッピングします。バグがトリガーされると、アプリは停止しますが、ブートストラップサーバーのネームサーバーマップから削除されないため、ブートストラップサーバーは、アプリの別のインスタンスを同じ名前で登録することを拒否します。
wait()
ゾンビに対してlaunchdを強制的に実行すると問題が解決することが期待されていましたが(コメントを参照)、そうではありません。主要な問題であるのはゾンビのステータスではありませんが(これは、一部のゾンビが無害である理由です)、ブートストラップネームサーバーであり、launchdを殺すことなくこれを解決する既知の方法はありません。
このバグは、Xcode、gdb、およびユーザーlaunchdの間の何かが原因で発生したようです。アプリをiphoneシミュレーターで実行し、gdb内で停止してからビルドを実行し、iPadシミュレーターで実行することで、ウェッジを繰り返しました。スイッチングシミュレータ(iOS 4.3 / iOS 5、iPad / iPhone)の影響を受けやすいようです。これは常に発生するわけではありませんが、シミュレータを頻繁に切り替える場合はかなり頻繁に発生します。
ログイン中にlaunchdを終了すると、セッションが台無しになります。ログアウトして再度ログインしても、ユーザーlaunchdは強制終了されません。OS Xは既存のプロセスを維持します。再起動すると問題が解決しますが、それは苦痛です。上記の手順はより高速です。
Apple、FWIWにバグを送信しました。rdar:// 10330930