2011-08-29 21 views
24

Chciałbym uzyskać listę wszystkich zainstalowanych aplikacji (NSArray). Moja aplikacja jest aplikacją jailbreak i znajduje się w/Applications, więc Sandbox nie ma problemu. Czy istnieje sposób na uzyskanie listy aplikacji sklepu z aplikacjami? Widziałem to już w innych aplikacjach (Activator, SBSettings ...). Nie mam pojęcia, jak to zrobić, ponieważ wszystkie piaskownice aplikacji mają tak duży kod, więc nie wiem, w jaki sposób można uzyskać dostęp do folderu .app wewnątrz piaskownicy.Wyświetl listę wszystkich zainstalowanych aplikacji.

Odpowiedz

13

Można użyć tego fragmentu kodu:

#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

Czy to nie jest prywatny API? – iJatrat

+5

To nie jest prywatny interfejs API, ale otrzymujemy dostęp do prywatnego folderu. Apple odrzuci twoją aplikację. Użyj tego kodu tylko dla iPhone'a z jailbreakiem. – Igor

+2

@Fedorchuk, jak mogę uzyskać tę listę zainstalowanych aplikacji z normalnych urządzeń z systemem iOS, mam na myśli bez jailbroken iPhones, plz mi pomóc to zrobić. – maddysan

6

Na iPhones z jailbrowaniem można po prostu przeczytać folder /Applications. Wszystkie zainstalowane aplikacje tam idą. Tylko lista katalogów w /Applications użyciu NSFileManager:

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

To czyta tylko wstępnie zainstalowane aplikacje i aplikacje cydia, mówię o aplikacjach w sklepie z aplikacjami. – JonasG

+1

Wypróbuj folder aplikacji użytkownika mobilnego, a następnie: '/ private/var/mobile/Applications' –

+0

@ BjörnMarschollek: Dziękuję bardzo. Bardzo mi pomogłem. – Pushkraj

2

Istnieje również AppList library, który zrobi wszystko, od brudnej roboty dla ty: rpetrich/AppList Jest używany w wielu zmianach w Jailbreak, więc nie wiem, dlaczego nie było tu sugerowane wcześniej.

Jednym ze sposobów uzyskania tylko aplikacji AppStore jest sprawdzenie wartości isSystemApplication dla każdej aplikacji zwróconej na liście. Te z wartością ustawioną na NO są zwykłymi aplikacjami AppStore. Istnieje również funkcja , więc być może byłoby nawet możliwe wcześniejsze filtrowanie listy.

Powiązane problemy