web-dev-qa-db-ja.com

インストールされているすべてのアプリのリストを取得する

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

26
JonasG

次のコードスニペットを使用できます。

 #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
14
Igor

ジェイルブレイクされたiPhoneでは、/Applicationsフォルダを読み取るだけです。インストールされているすべてのアプリケーションがそこに移動します。 NSFileManagerを使用して、/Applicationsのディレクトリをリストするだけです。

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

汚い処理をすべて行うAppList libraryもあります。 rpetrich/AppList 多くのジェイルブレイクの微調整で使用されているので、なぜそうではなかったのかわかりません。前にここで提案しました。

AppStoreアプリのみを取得する1つの方法は、リストで返された各アプリのisSystemApplicationの値を確認することです。値がNOに設定されているものは、通常のAppStoreアプリです。関数applicationsFilteredUsingPredicate:predicateもあるので、リストを事前にフィルタリングすることもできます。

2
newenglander

いくつかの調査の後、私は iHasApp というフレームワークを見つけました。アプリ名、識別子、アイコンを含む辞書を返すための良い解決策は次のとおりです: インストールされているアプリを見つける

2
JonasG