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

Можно ли программно узнать имена всех приложений, установленных на моем устройстве iOS? Есть ли какой-либо API для этого?

Спасибо за помощь

Ответы

Ответ 1

Нет, в приложениях iOS нет доступа к информации о других приложениях из-за изолированной среды.

Ответ 2

Да, возможно получить список всех установленных приложений

-(void) allInstalledApp
{    
    NSDictionary *cacheDict;

    NSDictionary *user;

    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";

    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];

    NSString *path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];

    cacheDict    = [NSDictionary dictionaryWithContentsOfFile: path];

    user = [cacheDict objectForKey: @"User"];

    NSDictionary *systemApp=[cacheDict objectForKey:@"System"];
}   

systemApp Dictionary содержит список всех связанных с системой приложений и user Dictionary содержит другую информацию о приложении.

Ответ 3

Не с устройства. Однако с рабочего стола вы можете заглянуть в библиотеку iTunes.

Ответ 4

Есть способы сделать это без взломанного устройства и не отклонить ваше приложение.
1. получить список текущих запущенных процессов см. этот. Вам нужно будет перевести имя процесса в имя приложения.
2. Проверьте, не зарегистрировано ли в каких-либо приложениях уникальная схема URL с UIApplicationDelegate canOpenURL. Есть несколько сайтов, каталогизирующих известные схемы URL, этот является лучшим.

Если приложение в настоящее время не запущено и не регистрирует настраиваемую схему URL-адресов, оно не будет обнаружено этими методами. Мне интересно услышать метод, который будет разрешен в магазине приложений, который работает лучше, чем это.

Ответ 5

попробуйте это, он будет работать даже с устройствами без пароля:

#include <objc/runtime.h>
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
SEL selector=NSSelectorFromString(@"defaultWorkspace");

NSObject* workspace = [LSApplicationWorkspace_class performSelector:selector];

SEL selectorALL = NSSelectorFromString(@"allApplications");

NSLog(@"apps: %@", [workspace performSelector:selectorALL]);//will give you all **Bundle IDS** of user all installed apps

Ответ 6

Вы можете сделать это, установив, установлено ли приложение или нет, с помощью метода canOpenURL или путем проверки фоновых процессов и их сопоставления с именем интересующего вас приложения.

Ответ 7

Вы можете использовать цель выполнения c, чтобы получить список всех установленных приложений. Он даст вам массив объектов LSApplicationProxy.

Ниже приведен фрагмент кода, который печатает имя всех приложений, установленных на вашем устройстве.

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:NSSelectorFromString(@"defaultWorkspace")];
NSMutableArray *array = [workspace performSelector:NSSelectorFromString(@"allApplications")];

NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
for (id lsApplicationProxy in array) {
    if(nil != [lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]){
        [mutableArray addObject:[lsApplicationProxy performSelector:NSSelectorFromString(@"itemName")]];
    }
}
NSLog(@"********* Applications List ************* : \n %@",mutableArray);

Не забудьте включить <objc/runtime.h>.