5

iOS で大規模なプロジェクトに取り組んでおり、独立したモジュールを複数のロード可能なバンドルに分割したいと考えています。ただし、公式ドキュメントによると、ローダブル バンドルは iOS ではサポートされていません。また、自社配信を利用する予定ですので、アプリストアの承認は問題ありません。

私の質問は次のとおり[_bundle principalClass]です。ローダブル バンドルのエントリ クラスにアクセスするコードを呼び出します。ジェイルブレイクされた iOS デバイスで正常に動作します。unjailbroken デバイスの場合、Xcode でデバッグ モードを使用すると、正常に動作します。しかし、スプリングボードから独立して実行すると、バックグラウンドでクラッシュします。

私は本当に知りたい:

1) ジェイルブレイクされた/ジェイルブレイクされていないデバイスで実行されているロード可能なバンドルがなぜそれほど異なるのですか?
2) アプリケーションの XCode デバッグ モードと通常の実行モードの主な違いは?

unjailbroken iOS デバイスで動的ライブラリを使用するための他のトリッキーな方法はありますか?

4

1 に答える 1

1

更新: 2014 年にリリースされた iOS 8 の時点で、iOS はフレームワークを適切にサポートしているため、開発者は静的ライブラリを使用する必要がなくなりました。

古い答え:

iOS は、システムの一部ではない実行可能コードのすべての動的ロードを許可しません。これには、フレームワーク、dylib、mmap を使用した実行可能メモリ ページなどが含まれます。いつか動的バンドルが許可されることを願っていますが、当面は、モジュールを静的ライブラリとしてビルドし、ビルド時にそれらにリンクする必要があります。この制限を回避する既知の方法はありません。

多くの人がこれを行う方法について書いています (例: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/ )、またはあなた例として既存のプロジェクトを使用したい場合があります。私が気に入っているものの 1 つは GData objc API です。これは、OS X 用にビルドされたときの動的フレームワークと、iOS 用にビルドされたときの静的ライブラリの両方のターゲットを持っています: http://code.google.com/p/gdata-objectivec-client /

于 2012-05-01T00:10:27.140 に答える