私はDarkDustの答えに実際には同意していませんが、私の内側のBill Clinton をチャネリングすることができるかどうかは、サポートの意味が何であるかに依存します :)
AppleはApp Storeアプリに対してこれを実行することを望んでいませんが、オペレーティングシステムはそれを確実に許可します。脱獄アプリは常にこの手法を使用しています。基本的には、標準のUNIX技術を使用してフレームワーク/ライブラリを動的に開き、その中のものを使用します。dlopenの機能は、あなたが渡すことによって、ライブラリを開くことができますそのフレームワークへのパス、またはdylib。脱獄アプリの構築に関するいくつかのドキュメントからinit()
、独自の個別のdylib内に実装された関数を呼び出す例を次に示します。
#include <dlfcn.h>
initWrapper() {
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
// This assumes your dylib’s init function is called init,
// if not change the name in "".
void (*init)() = dlsym(libHandle, "init");
if (init != NULL) {
init();
}
dlclose(libHandle);
}
}
さらに、iOSの動的ライブラリプロジェクトのビルドを許可しないことに対するデフォルトの制限は、Xcodeの一部であり、一部のXCode xmlファイルを編集することでオーバーライドできます。
iOSでdylibをビルドして使用する
これを行うと、通常のiOS .dylibライブラリを構築し、上記のサンプルコードに従って使用できます。(はい、おそらく、新しいXCodeバージョンをインストールするたびに、この機能を再度ロック解除する必要があります)。
したがって、これは技術的な制限ではなく、App Storeポリシーの制限です。App Storeに限定されていない場合は、それを行うことができます。この手法は脱獄を必要としないことに注意してください。ただし、アプリがサンドボックス化されている場合、 dylibの読み込み元を制限する可能性があります。
編集:この情報が将来のリンクの腐敗で失われないようにするために、XcodeでiOS dylibを有効にする方法について提供したリンクの内容を次に示します。(注:このプロセスはXcode 4でも機能しますが、パスの更新などについては、以下のコメントを参照してください。)ソースはiOSプレイスのブログです。
Xcodeでは、iOS用のdylibをビルドできません。単一バイナリでない場合、アプリは拒否されます。しかし、オプションのモジュールをロードするためのプラグインアーキテクチャを持つアプリケーションがあります。iOSに完全に移植する前に、簡単なプロトタイプでコンセプトを証明してほしい。dylibが単純に機能する場合は、より高速です。そのため、この投稿はdylibのビルド方法と使用方法を示していますが、App Storeには承認されないことに注意してください。(10.6.4のXcode 3.2.4でテスト済み)
1.プロパティリストエディターで次のファイルを開きます:/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspecおよび/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications / iPhoneシミュレーターProductTypes.xcspec
2.「MacOSX Product Types.xcspec」で製品タイプが含まれているアイテムを見つけcom.apple.product-type.library.dynamic
て、「iPhone Simulator ProductTypes.xcspec」にドラッグします。
3.同じ場所にある「MacOSX Package Types.xcspec」と「iPhone Simulator PackageTypes.xcspec」を開きます。
4.「MacOSX Product Types.xcspec」でパッケージタイプが含まれているアイテムを見つけcom.apple.package-type.mach-o-dylib
て、「iPhone Simulator PackageTypes.xcspec」にドラッグします。
5.「iPhoneOS.platform」についても同じ手順を繰り返し、実行されていた場合はXcodeを再起動します。
それでは、dylibをビルドしてみましょう。「Cocoa Touch Static Library」テンプレートから始めます。これには、プロジェクトにFoundation.frameworkが含まれているはずです。これが、dylibをビルドするためにテンプレートの上に加えた変更です。
1.テキストエディターで、project.pbxproj(Xcodeプロジェクトファイルバンドル内にあります)ファイルを開きます。文字列「producttype」を検索し、値を次のように変更しますcom.apple.product-type.library.dynamic
ます。
Xcodeでプロジェクトを開き、[プロジェクト]> [プロジェクト設定の編集]に移動します
2.「インストールディレクトリ」をに設定しまし@executable_path/
た。これは、dylibをアプリの実行可能ファイルと同じディレクトリに配置する予定だからです。
3.「Mach-Oタイプ」をダイナミックライブラリに設定
4. dylibに設定された「実行可能拡張機能」
5.空に設定された「実行可能プレフィックス」
6. 1つまたは2つの単純なメソッドをライブラリに追加してビルドします。
次に、アプリを作成してテストします。今回は、ビューベースのアプリケーションを選択します。UIButtonとUILabelを接続してlibを呼び出し、戻りメッセージを表示します。完全なプロジェクトTestAppをダウンロードして遊ぶことができます。