2012-09-09 93 views
7

我试图做一个应用程序,它只能在越狱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

为什么检测越狱设备,如果它只对他们?如果你可以从其他来源安装应用程序然后appstore,那么它是一个越狱设备。 – Sulthan

回答

8

尝试访问应用沙盒外的任何文件。例如:

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

请注意,安装了Cydia并具有越狱设备是两件不同的事情。

5

我写的检测设备是越狱的另外一个问题的功能,但它似乎与此有关:

- (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 
} 

此功能使用两次检查,看看手机是越狱:首先检查苹果蠹已安装。并非所有的越狱设备都安装了Cydia,尽管大多数都使用了,所以我也检查了bash的存在,它也只出现在越狱设备上。请注意,该功能几乎适用于所有情况,但可能不是100%。唯一没有Cydia的越狱iDevice的人可能是那些正在尝试使用越狱设备而不是使用它们来获得调整和主题等优势的人。

+1

如果'cydiaInstalled'不应'isJailbroken'为'YES'?你的代码中''cydiaInstalled'前面有'!'。 – Nate

+0

@Nate - 谢谢你。猜猜我只是忽略了这一点。 – pasawaya

+0

Souldn''&&“是”||“为什么在我们已经找到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 
} 

有了这个代码,你可以在你的iDevice检测任何应用程序,只要应用程序有一个URL方案,你可以发现,大部分的URL方案在这里:http://handleopenurl.com

PS:您必须更换绿色部分whith你的行动:)

+0

就像我在我的回答中所说的那样,打开Cydia并不是一种检查设备是否越狱的普遍正确方法,因为并非每个越狱的iDevice都安装了Cydia。 – pasawaya

+0

但normale用户hase cydia安装:) – user1658674

+0

这是真的,我相信你是针对这个用户群,所以为了你的目的,只检查Cydia没问题。 – pasawaya