8

ジェイルブレイクされた iDevices でのみ動作するアプリを作成しようとしています。私はすでに脱獄検出コードを持っています:

([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]);{
    UIAlertView *cydiaisinstalled=[[UIAlertView alloc]initWithTitle:@"Cydia is installed!"
                                                            message:@"You can use Respring!"
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
    [cydiaisinstalled show];
}}

しかし、デバイスがジェイルブレイクされていないかどうかを検出できるようにする必要があります。

4

4 に答える 4

8

アプリのサンドボックス外のファイルにアクセスしてみてください。例えば:

BOOL IsDeviceJailbroken(void) {
    #if TARGET_IPHONE_SIMULATOR
    return NO;
    #else
    return [[NSFileManager defaultManager] fileExistsAtPath: @"/bin/bash"];
    #endif
}

Cydia がインストールされていることと、デバイスがジェイルブレイクされていることは 2 つの異なることに注意してください。

于 2012-09-09T20:23:23.493 に答える
6

デバイスがジェイルブレイクされているかどうかを検出する関数を別の質問に書きましたが、ここで関連しているようです:

- (BOOL) isJailbroken() {

    //If the app is running on the simulator
    #if TARGET_IPHONE_SIMULATOR
        return NO;

    //If its running on an actual device
    #else
        BOOL isJailbroken = NO;

        //This line checks for the existence of Cydia
        BOOL cydiaInstalled = [[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"];

        FILE *f = fopen("/bin/bash", "r");

        if (!(errno == ENOENT) || cydiaInstalled) {

            //Device is jailbroken
            isJailbroken = YES;
        }            
        fclose(f);
        return isJailbroken;
    #endif
}

この関数は、電話がジェイルブレイクされているかどうかを確認するために 2 つのチェックを使用します。最初に、Cydia がインストールされているかどうかをチェックします。ジェイルブレイクされたすべてのデバイスに Cydia がインストールされているわけではありませんが、ほとんどの場合はインストールされているため、ジェイルブレイクされたデバイスにのみ表示される bash の存在も確認します。この関数はほぼすべてのケースで機能しますが、おそらく 100% ではないことに注意してください。ジェイルブレイクされた iDevice に Cydia を持っていないのはおそらく、ジェイルブレイクされたデバイスを試していて、微調整やテーマなどの利点のためにそれらを使用していない人だけです。

于 2012-09-09T23:06:31.440 に答える
3

すべての回答に感謝しますが、自分で見つけました。コードは次のとおりです。

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) {
    //insert action if cydia is installed
}
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]] == NO) {
    //insert action if Cydia is not installed
}

このコードを使用すると、アプリに URL スキームがある限り、idevice 上の任意のアプリケーションを検出できます。ここで URL スキームのほとんどを見つけることができます: http://handleopenurl.com

PS: 緑色の部分をアクションに置き換える必要があります:)

于 2012-10-16T20:28:57.400 に答える