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.
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
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"];
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.
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