Подтвердить что ты не робот

Получить список всех установленных приложений

Я хотел бы получить список всех установленных приложений (NSArray). Мое приложение - приложение для джейлбрейка и находится в /Applications, поэтому Sandbox здесь не проблема. Есть ли способ получить список приложений для приложений приложений? Я уже видел это в других приложениях (Activator, SBSettings...). Я понятия не имею, как это сделать, потому что все песочницы приложений имеют этот огромный код, поэтому я не знаю, как можно было бы получить доступ к папке .app внутри песочницы.

4b9b3361

Ответ 1

Вы можете использовать этот фрагмент кода:

 #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

Ответ 2

В jailbroken iPhones вы можете просто прочитать папку /Applications. Все установленные приложения идут туда. Просто перечислите каталоги в /Applications с помощью NSFileManager:

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

Ответ 4

Также есть AppList library, который сделает для вас всю грязную работу: rpetrich/AppList Он использовался во многих трюках с помощью джейлбрейка, поэтому я не знаю, почему это раньше не предлагалось.

Один из способов получить только приложения AppStore - проверить значение isSystemApplication для каждого приложения, возвращенного в списке. Те, у которых значение NO установлено, являются обычными приложениями AppStore. Также существует функция applicationsFilteredUsingPredicate:predicate, поэтому, возможно, даже будет возможно предварительно отфильтровать список.