Obtener una lista de todas las aplicaciones instaladas

Me gustaría obtener una lista de todas las aplicaciones instaladas (NSArray). Mi aplicación es una aplicación jailbreak y está ubicada en / Applications, por lo que Sandbox no es problema allí. ¿Hay alguna forma de obtener una lista de aplicaciones de la tienda de aplicaciones? Ya lo he visto en otras aplicaciones (Activator, SBSettings …). No tengo idea de cómo hacer esto, porque todos los sandboxes de aplicaciones tienen ese código enorme, así que no sé cómo sería posible acceder a la carpeta .app dentro del entorno limitado.

Puedes usar este fragmento de código:

#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 

En iPhones jailbroken, puede leer la carpeta /Applications . Todas las aplicaciones instaladas van allí. Simplemente liste los directorios en /Applications usando NSFileManager :

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

Después de algunas investigaciones, encontré un marco llamado iHasApp . Aquí hay una buena solución para devolver un diccionario con el nombre, identificador e ícono de la aplicación: Descubrir qué aplicaciones están instaladas

También está la AppList library , que hará todo el trabajo sucio para usted: rpetrich / AppList. Se usa en muchos ajustes de Jailbreak, por lo que no sé por qué no se sugirió antes.

Una forma de obtener aplicaciones AppStore sería verificar el valor de isSystemApplication para cada aplicación devuelta en la lista. Aquellos con el valor establecido en NO son aplicaciones regulares de AppStore. También hay una función applicationsFilteredUsingPredicate:predicate , por lo que quizás incluso sería posible filtrar la lista de antemano.