web-dev-qa-db-fra.com

Obtenir la liste de toutes les applications installées

Je souhaite obtenir une liste de toutes les applications installées (Nsarray). Mon application est une application Jailbreak et est située dans/Applications, donc Sandbox n'est pas un problème là-bas. Y a-t-il un moyen d'obtenir une liste des applications d'App Store? J'ai déjà vu cela dans d'autres applications (activateur, sbsettings ...). Je ne sais pas comment faire cela, car toutes les boîtes de sandbox d'applications ont ce code énorme, donc je ne sais pas comment il serait possible d'accéder au dossier .app dans le bac à sable.

26
JonasG

Vous pouvez utiliser cet extrait de code:

 #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
14
Igor

Sur les iPhones jailbreakes, vous pouvez simplement lire le /Applications dossier. Toutes les applications installées vont là-bas. Il suffit de répertorier les répertoires dans /Applications utiliser NSFileManager:

NSArray *appFolderContents = [[NSFileManager defaultManager] directoryContentsAtPath:@"/Applications"];
7
Björn Marschollek

Il y a aussi le AppList library, qui fera tout le travail sale pour vous: RPtrich/Applister Il est utilisé dans beaucoup de modificateurs de jailbreak, donc je ne sais pas pourquoi il n'a pas été suggéré ici avant.

Une façon d'obtenir juste des applications d'appStore serait de vérifier la valeur de isSystemApplication pour chaque application renvoyée dans la liste. Ceux qui ont la valeur définie sur NO sont des applications d'appStore régulières. Il y a aussi une fonction applicationsFilteredUsingPredicate:predicate, il serait peut-être même possible de filtrer la liste à l'avance.

2
newenglander

Après quelques recherches, j'ai trouvé un cadre appelé ihasapp . Voici une bonne solution pour renvoyer un dictionnaire avec nom d'application, identifiant et icône: Découvrez quelles applications sont installées

2
JonasG