objective-c - todas - que significa facebook app manager
Obtener una lista de todas las aplicaciones instaladas (4)
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.
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
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"];
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
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.