Vorrei ottenere un elenco di tutte le app installate (NSArray). La mia app è un'app jailbreak e si trova in/Applicazioni quindi Sandbox non è un problema lì. C'è un modo per ottenere un elenco di app store app? L'ho già visto in altre app (Activator, SBSettings ...). Non ho idea di come fare questo, perché tutte le sandbox delle app hanno quel codice enorme, quindi non so come sarebbe possibile accedere alla cartella .app all'interno della sandbox.Ottieni l'elenco di tutte le app installate
risposta
È possibile utilizzare questo frammento di codice:
#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
Su iPhone jailbroken, è possibile leggere la cartella /Applications
. Tutte le applicazioni installate vanno lì. Basta elencare le directory in /Applications
utilizzando NSFileManager
:
NSArray *appFolderContents = [[NSFileManager defaultManager] directoryContentsAtPath:@"/Applications"];
Dopo alcune ricerche ho trovato un quadro chiamato iHasApp. Qui è una buona soluzione per restituire un dizionario con nome dell'applicazione, identificatore e l'icona: Finding out what Apps are installed
C'è anche il AppList library
, che farà tutto il lavoro sporco per you: rpetrich/AppList È utilizzato in molte modifiche al jailbreak, quindi non so perché non è stato suggerito qui prima.
Un modo per ottenere solo app AppStore è controllare il valore di isSystemApplication
per ogni app restituita nell'elenco. Quelli con il valore impostato su NO
sono normali app AppStore. C'è anche una funzione applicationsFilteredUsingPredicate:predicate
, quindi forse sarebbe anche possibile filtrare l'elenco in anticipo.
Questa unsing è un'API privata? – iJatrat
Questa non è un'API privata, ma abbiamo accesso alla cartella privata. Apple rifiuterà la tua app. Utilizzare questo codice solo per iPhone jailbroken. – Igor
@Fedorchuk, come posso ottenere questo elenco di applicazioni installate dai normali dispositivi iOS, voglio dire senza iPhone jailbroken, per favore aiutatemi a fare questo. – maddysan