2012-09-09 10 views
7

私はjailbroken 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]; 
}} 

しかし、今私は逆のものが必要です。 NON JAILBREAK検出が必要です。

私はあなたの助けが必要です。私はこれをWeblinに必要とします。私を助けてください!!!

+2

jailbrokenデバイスがそのデバイスでのみ動作するのを検出するのはなぜですか?他のソースからappstoreをインストールすることができれば、それはjailbrokenデバイスです。 – Sulthan

答えて

8

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

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

Cydiaをインストールしてjailbrokenデバイスを使用すると、2つの異なることに注意してください。

5

私は、デバイスが別の質問のためにジェイルブレイクですが、それはここでは関係思えるかどうかを検出する機能を書いた:Cydiaの場合は、それを最初にチェック:

- (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つのチェックを使用しますがインストールされています。ほとんどのjailbrokenデバイスにCydiaがインストールされているわけではありませんが、jailbrokenデバイスにのみ表示されるbashの存在も確認します。この関数はほぼすべての場合に機能しますが、おそらく100%ではありません。 jailbroken iDeviceにCydiaを持たない唯一の人々は、おそらくjailbrokenデバイスを試していて、調整やテーマのような利点のためにそれらを使用していない人です。

+1

'cydiaInstalled'の場合は' isJailbroken'を 'YES'にしてはいけませんか?あなたのコードの 'cydiaInstalled'の前に'! 'があります。 – Nate

+0

@ネイト - ありがとう。私はそれを見落としたと思う。 – pasawaya

+0

"&&"は "||"なぜCydia.appが見つかったのでしょうか? "/ bin/bash"のチェックはどうしてですか? – Andreas

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スキームのほとんどを見つけることができるURLスキームを持っているとして、あなたのiDevice上の任意のアプリケーションを検出することができます:http://handleopenurl.com

PS:あなたがここにコードがありますあなたの行動に緑色の部分を交換する必要があります:)

+0

私は私の答えで言ったように、Cydiaを開くと、すべてのjailbroken iDeviceにCydiaがインストールされているわけではないので、デバイスがjailbrokenであるかどうかをチェックする普遍的な正しい方法ではありません。 – pasawaya

+0

しかしノーマルユーザーのhase cydiaがインストールされています:) – user1658674

+0

これは本当です。このユーザーベースをターゲットにしていると確信しています。そのため、Cydiaのみを確認するだけで問題ありません。 – pasawaya

関連する問題