私はここで質問を調べて、なぜこの動作が見られるのかについてのヒントを探しましたが、まだ何もありません。
静的ライブラリに組み込まれ、フレームワークバンドルにラップされたクラス(実際には同じ問題を示す2つのクラス)について考えてみます(使用する手順)。それらは、Foundationフレームワーククラスクラスター(NSMutableDictionary
およびNSMutableArray
)から継承します。
これらのクラスの使用は、静的関数(クラスメソッドではありません!)を使用してインスタンス(ファクトリヘルパー関数の一種ですか?)を割り当てて初期化する前に、いくつかの静的変数が初期化されることに依存しています。
iOSアプリプロジェクトがそのフレームワークにリンクしている場合、シミュレーターとデバイスの間でObjective-Cランタイムクラスの読み込み動作に違いがあります。
具体的には、デバイス(iPhone 4、iOS 4.3.3)では、アプリがロードされたときにこれらのクラスは+load
メッセージを受け取らず、静的変数は初期化されないため、静的ファクトリメソッドは失敗します。シミュレーターでは、メッセージが送信され、すべてが意図したとおりに機能します。デバイスランタイムに問題がある可能性があります
私の質問は、+load
メッセージが確実に送信されるようにフレームワークを別の方法で構成できるかどうかです。または、iOSでの静的ライブラリ/フレームワーククラスの読み込みに関するバグに遭遇しましたか?
クラスはJSONKitライブラリ(JKArray
、JKDictionary
)からのものです。
この問題を説明するプロジェクトの例はここにあります– https://github.com/ohhorob/JSONKit-in-framework-demo
編集:@bbumの提案に従って、アプリケーションの実行中にクラスJKDictionary
とJKArray
クラスが実際に読み込まれ、使用可能であることを確認しました。DeviceBroken
GitHubプロジェクトのブランチは、使用された検証で更新されます。
Appleにバグレポート(#9461567)を提出しました。