1

または を使用して特定のパスに実際の dylib ファイルが存在するかどうかを確認する以外に、特定の動的ライブラリが iOS で利用可能かどうかをアプリ (jailbroken iOS) で確認するエレガントな方法 (Objective C または C) はありますNSFileManagerdlopen? (たとえば、アクセスできる利用可能な動的ライブラリに関する情報を持つオブジェクト。)

更新:プロジェクト設定(Xcode)で要件にすることもできますが、dylibが利用できない場合、フィードバックなしでアプリが起動時にクラッシュします(これをキャッチしてアラートを実行する方法がある場合)クラッシュする前に、それも許容できる解決策です)。

4

2 に答える 2

3

dylib に弱いリンクを使用している場合、特定のシンボルをチェックすることで、ライブラリが存在するかどうかを簡単に検出できます。

そのライブラリにvoid foo( void );関数があるとします。

そのプロトタイプをextern独自のコードで宣言し、weak_import属性を使用できます。

extern void foo( void ) __attribute__( ( weak_import ) );

このように、シンボルが見つからない場合 (ライブラリに存在しないため、またはライブラリ全体が利用できないため)、リンカーはシンボルのアドレスを に設定しますNULL

次に、そのシンボルを簡単かつエレガントにチェックできます。

if( foo == NULL )
{
    /* Alerts the user */
}
else
{
    /* It's safe to use foo() */
}

詳細については、フレームワーク プログラミング ガイドを参照してください。

于 2013-01-09T15:25:02.333 に答える
0

あなたのアプローチは間違っているというのが私の個人的な意見です。ジェイルブレイクされたアプリをインストールする場合、ほとんどのエンドユーザーは、APTのラッパーであるCydia / Installer/Icyを介してアプリをインストールします。

最終的にパッケージをこれらのストアにプッシュするときは、パッケージの「依存関係」を指定できます。これにより、これらのパッケージがインストールされていないと、アプリを実行することはもちろん、まったくインストールすることもできなくなります。

ただし、必要なdylibを含むパッケージを決定するのはあなた次第です。

APTからインストールするとdylibが失われる可能性のあるエッジケースのシナリオはごくわずかです。つまり、ライブラリを削除したり、MobileSubstrate設定をいじったり、誰かがAPTの外部でアプリをダウンロードしたりします。

ただし、この場合、ユーザーはアプリが完全に機能することを期待するべきではありません。開発者タイプのものをいじり回しているため、ユーザーはおそらくそうではないはずです。

于 2013-01-09T14:56:37.590 に答える