2011-08-29 12 views
24

インストールされているすべてのアプリケーション(NSArray)のリストを取得したいと考えています。私のアプリは脱獄アプリであり、/ Applicationsにありますので、サンドボックスは問題ありません。アプリストアアプリのリストを取得する方法はありますか?私はすでに他のアプリでこれを見てきました(Activator、SBSettings ...)。どのようにすればいいのか分かりません。アプリのサンドボックスにはすべて膨大なコードが含まれているため、サンドボックス内の.appフォルダにどのようにアクセスできるかわかりません。インストールされているすべてのアプリケーションのリストを取得

答えて

13

あなたは、このコードスニペットを使用することができます。

#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 
+0

これは非公開のAPIですか? – iJatrat

+5

これはプライベートAPIではありませんが、プライベートフォルダにアクセスできます。 Appleはあなたのアプリを拒否します。このコードはjailbroken iPhone専用です。 – Igor

+2

@Fedorchuk、どのように私は通常のiOSデバイスからこのインストールされたアプリケーションリストを取得できますか?私はjailbrokenのiPhoneなしでこれを行うのに役立つPLZを意味します。 – maddysan

6

jailbreakされたiPhoneでは、/Applicationsフォルダを読むことができます。インストールされているすべてのアプリケーションがそこに行きます。ただ、NSFileManagerを使用して/Applications内のディレクトリをリスト:

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

これは、あらかじめインストールされているアプリとcydiaアプリだけを読み込みます。私はアプリストアのアプリについて話しています。 – JonasG

+1

'mobile'ユーザのアプリケーションフォルダを試してください:'/private/var/mobile/Applications' –

+0

@BjörnMarschollek:どうもありがとう。私は私をたくさん助けました。 – Pushkraj

2

私はiHasAppと呼ばれるフレームワークを発見したいくつかの研究の後。ここでは、アプリ名、識別子とアイコンで辞書を返すために良い解決策がある:Finding out what Apps are installed

2

のための汚い仕事のすべてを行いますAppList libraryは、もありますあなた: rpetrich/AppList これは多くの脱獄の調整で使用されているので、私は以前にここで示唆されなかった理由はわかりません。

AppStoreアプリだけを取得する方法の1つは、リストに返された各アプリの値をisSystemApplicationで確認することです。値がNOに設定されているものは、通常のAppStoreアプリです。 の機能もありますので、あらかじめリストをフィルタリングすることも可能でしょう。

関連する問題