2011-08-29 21 views
24

मैं सभी इंस्टॉल किए गए ऐप्स (NSArray) की एक सूची प्राप्त करना चाहता हूं। मेरा ऐप एक जेल्रैक ऐप है और एप्लिकेशन/एप्लीकेशन में स्थित है, इसलिए सैंडबॉक्स में कोई समस्या नहीं है। ऐप स्टोर ऐप की सूची प्राप्त करने का कोई तरीका है? मैंने इसे पहले से ही अन्य ऐप्स (एक्टिवेटर, एसबीएस सेटिंग्स ...) में देखा है। मुझे नहीं पता कि यह कैसे करें, क्योंकि सभी ऐप्स सैंडबॉक्स में उस विशाल कोड हैं, इसलिए मुझे नहीं पता कि सैंडबॉक्स के अंदर .app फ़ोल्डर तक पहुंचना कैसे संभव होगा।सभी स्थापित ऐप्स की सूची प्राप्त करें

उत्तर

13

आप इस कोड का उपयोग कर सकते हैं:

#import "InstalledAppReader.h" 

static NSString* const installedAppListPath = @"/private/var/mobile/Library/Caches/com.apple.mobile.installation.plist"; 

@interface InstalledAppReader() 

-(NSArray *)installedApp; 
-(NSMutableDictionary *)appDescriptionFromDictionary:(NSDictionary *)dictionary; 

@end 


@implementation InstalledAppReader 

#pragma mark - Init 
-(NSMutableArray *)desktopAppsFromDictionary:(NSDictionary *)dictionary 
{ 
    NSMutableArray *desktopApps = [NSMutableArray array]; 

    for (NSString *appKey in dictionary) 
    { 
     [desktopApps addObject:appKey]; 
    } 
    return desktopApps; 
} 

-(NSArray *)installedApp 
{  
    BOOL isDir = NO; 
    if([[NSFileManager defaultManager] fileExistsAtPath: installedAppListPath isDirectory: &isDir] && !isDir) 
    { 
     NSMutableDictionary *cacheDict = [NSDictionary dictionaryWithContentsOfFile: installedAppListPath]; 
     NSDictionary *system = [cacheDict objectForKey: @"System"]; 
     NSMutableArray *installedApp = [NSMutableArray arrayWithArray:[self desktopAppsFromDictionary:system]]; 

     NSDictionary *user = [cacheDict objectForKey: @"User"]; 
     [installedApp addObjectsFromArray:[self desktopAppsFromDictionary:user]]; 

     return installedApp; 
    } 

    DLOG(@"can not find installed app plist"); 
    return nil; 
} 

@end 
+0

क्या यह एक निजी एपीआई अनिश्चित है? – iJatrat

+5

यह एक निजी एपीआई नहीं है, लेकिन हमें निजी फ़ोल्डर तक पहुंच प्राप्त है। ऐप्पल आपके ऐप को अस्वीकार कर देगा। केवल जेलब्रोकन आईफोन के लिए इस कोड का प्रयोग करें। – Igor

+2

@ फेडोरचुक, मैं सामान्य आईओएस उपकरणों से इस स्थापित एप्लिकेशन सूची को कैसे प्राप्त कर सकता हूं जिसका अर्थ है जेलब्रोकन आईफोन के बिना, कृपया मुझे ऐसा करने में मदद करें। – maddysan

6

जेलब्रोकन आईफ़ोन पर, आप केवल /Applications फ़ोल्डर पढ़ सकते हैं। सभी स्थापित अनुप्रयोग वहां जाते हैं। कुछ शोध मैं एक रूपरेखा iHasApp बुलाया पाया है के बाद

NSArray *appFolderContents = [[NSFileManager defaultManager] directoryContentsAtPath:@"/Applications"]; 
+1

जो केवल पूर्व स्थापित ऐप्स और साइडिया ऐप्स पढ़ता है, मैं ऐप स्टोर ऐप्स के बारे में बात कर रहा हूं। – JonasG

+1

'मोबाइल' उपयोगकर्ता के एप्लिकेशन फ़ोल्डर को आजमाएं: '/ private/var/mobile/Applications' –

+0

@ BjörnMarschollek: आपको बहुत बहुत धन्यवाद। मैंने बहुत मदद की। – Pushkraj

2

: बस NSFileManager का उपयोग कर /Applications में निर्देशिका की सूची। यहाँ ऐप्लिकेशन का नाम, पहचानकर्ता और आइकन के साथ एक शब्दकोश वापस जाने के लिए एक अच्छा समाधान है: Finding out what Apps are installed

2

वहाँ भी है AppList library, जिसके लिए गंदे काम के सभी करना होगा आप: rpetrich/AppList इसका उपयोग कई जेलबैक tweaks में किया जाता है, इसलिए मुझे नहीं पता कि यह पहले यहां क्यों नहीं सुझाया गया था।

केवल ऐपस्टोर ऐप्स प्राप्त करने का एक तरीका सूची में लौटाए गए प्रत्येक ऐप के लिए isSystemApplication का मान देखना होगा। NO पर सेट मान वाले लोग नियमित ऐपस्टोर ऐप्स हैं। एक समारोह applicationsFilteredUsingPredicate:predicate भी है, इसलिए शायद पहले सूची को फ़िल्टर करना भी संभव होगा।

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