限定的な回避策を見つけました。バンドル ID から派生した名前を持つ共有メモリ ブロックを使用して、コンテキスト文字列を格納します。ブロックは適切なシャットダウンでクリアされます。次に、Quincy デリゲートをオーバーライド-crashReportDescription
して、共有メモリの内容があれば説明として提供するようにします。最後のアプリのシャットダウンがクラッシュした場合にのみ空ではありません。
このアプローチには明らかに欠陥があります。たとえば、クラッシュから次のアプリの起動までの間にデバイスを再起動すると、共有メモリ情報が失われます。
編集: デザインの最初のバージョンでは、共有メモリの代わりに UIPasteboard という名前のプライベートを使用しました。それはかなりのパフォーマンスヒットであることが判明しました。共有メモリは桁違いに高速です。
EDIT2:しかし、iOS 7 で共有メモリが壊れたため、UIPasteboard が復活しました。残念。
EDIT3: 別のアプローチを見つけましたが、エレガントではありませんが、iOS 7 で動作します。コンテキスト文字列をプレーンな静的メモリ ブロックに保存します。PLCrashReporter 内にカスタム クラッシュ ハンドラを配置し[[PLCrashReporter sharedReporter] setCrashCallbacks:]
ます。ハンドラーで、上記のコンテキスト (存在する場合) をファイルに書き出します。アプリの起動時に、上記のファイルを読み取り、コンテンツ (ある場合) を に提供します-crashReportDescription
。消えろ、UIPasteboard。