2012-09-09 7 views
7

मैं एक ऐप बनाने की कोशिश कर रहा हूं जो जेलब्रोकन iDevices पर काम करता है। मैंने पहले ही एक जेलबैक डिटेक्शन बनाया है:कोई jailbreak पहचान

([[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]; 
}} 

लेकिन अब मुझे रिवर्स चीज चाहिए। मुझे एक गैर जेल की पहचान की आवश्यकता है।

मुझे आपकी मदद की ज़रूरत है मुझे वेबलिन के लिए इसकी आवश्यकता है। कृपया मेरी मदद करें!!!

+2

जेलब्रोकन डिवाइस का पता लगाने का कारण क्यों है यदि यह केवल उन पर काम करता है? यदि आप ऐप को अन्य स्रोत से इंस्टॉल कर सकते हैं तो ऐपस्टोर करें, फिर यह जेलब्रोकन डिवाइस है। – Sulthan

उत्तर

8

ऐप के सैंडबॉक्स के बाहर किसी भी फ़ाइल तक पहुंचने का प्रयास करें। उदाहरण के लिए:

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

ध्यान दें कि साइडिया स्थापित और जेलब्रोकन डिवाइस होने के दो अलग-अलग चीजें हैं।

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 स्थापित है। सभी जेलब्रोकन उपकरणों में साइडिया स्थापित नहीं है, हालांकि अधिकांश करते हैं, इसलिए मैं बैश के अस्तित्व की भी जांच करता हूं, जो केवल जेलब्रोकन उपकरणों पर दिखाई देता है। ध्यान दें कि यह फ़ंक्शन लगभग सभी मामलों में काम करेगा, लेकिन शायद यह 100% नहीं है। केवल जेलब्रोकन iDevice पर Cydia नहीं है, केवल वे लोग हैं जो जेलब्रोकन उपकरणों के साथ प्रयोग कर रहे हैं और tweaks और विषयों जैसे फायदे के लिए उनका उपयोग नहीं कर रहे हैं।

+1

'साइजियास्टेड' होने पर 'हैजब्रोकन '' YES' नहीं होना चाहिए? आपके कोड में 'cydiaInstalled' के सामने आपके पास'! 'है। – Nate

+0

@Nate - इसके लिए धन्यवाद। मान लीजिए मैंने अभी इसे अनदेखा किया है। – 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 
} 

इस कोड के साथ आप के रूप में लंबे एप्लिकेशन एक यूआरएल स्कीम आप यूआरएल स्कीम यहाँ के सबसे पा सकते हैं के रूप में अपने iDevice पर किसी भी आवेदन का पता लगा सकते: http://handleopenurl.com

पुनश्च: यहाँ कोड है आप अपने कार्यों के साथ हरे रंग के हिस्से को प्रतिस्थापित करना है :)

+0

जैसा कि मैंने अपने जवाब में कहा था, खोलना Cydia यह जांचने के लिए सार्वभौमिक रूप से सही तरीका नहीं है कि डिवाइस जेलब्रोकन है या नहीं, क्योंकि हर जेलब्रोकन iDevice में Cydia स्थापित नहीं है। – pasawaya

+0

लेकिन मानक उपयोगकर्ता हैई साइडिया स्थापित :) – user1658674

+0

यह सच है, और मुझे यकीन है कि आप इस उपयोगकर्ता आधार को लक्षित कर रहे हैं, इसलिए आपके उद्देश्यों के लिए केवल सिडिया की जांच ठीक है। – pasawaya

संबंधित मुद्दे