タイトルの通り…興味がありdlopen()
ます。これはアプリストアでは許可されていないことは理解していますが、iOSでこれについて興味があります。
私が抱えている問題は、.dylibファイルを作成でき、次のコードを使用して実行時にこのファイルをロードできることです。
char *dylibPath = "/Applications/myapp.app/mydylib2.dylib";
void *libHandle = dlopen(dylibPath, RTLD_NOW);
if (libHandle != NULL) {
NSString * (*someMethod)() = dlsym(libHandle, "someMethod");
if (someMethod != NULL) {
NSLog(someMethod());
}
dlclose(libHandle);
}
これはここから取得されます。
私が抱えている問題は、mydylib2.dylibを変更dlopen
しても、再コンパイルされた.dylibファイルがロードされないことです。代わりに、古いバージョンの関数を解決しますsomeMethod
。
たとえば、someMethod
最初に戻っ@"Hello"
てこれをに変更して再コンパイルすると、シミュレータでアプリを再起動するまで@"Hello World"
、上記のコードは常に戻ります。@"Hello"
なぜこれが当てはまるのか知っていますか?この.dylibを実行時に再ロードできるように、回避策を提案しますか?