Вопрос:

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

iphone objective-c ios

15123 просмотра

7 ответа

1217 Репутация автора

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

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

Автор: Unicorn Источник Размещён: 06.01.2011 12:02

Ответы (7)


13 плюса

11564 Репутация автора

Решение

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

Автор: Nickolay Olshevsky Размещён: 06.01.2011 12:05

2 плюса

953 Репутация автора

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

Автор: joshpaul Размещён: 06.01.2011 02:45

2 плюса

553 Репутация автора

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

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

Автор: Peter H Размещён: 02.10.2012 10:56

4 плюса

808 Репутация автора

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

-(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содержит другую информацию о приложении.

Автор: avinash Размещён: 14.05.2013 11:11

0 плюса

1672 Репутация автора

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

Автор: Akshat Singhal Размещён: 20.02.2014 07:03

1 плюс

1569 Репутация автора

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

#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's all installed apps
Автор: Anurag Sharma Размещён: 28.07.2016 01:06

0 плюса

1392 Репутация автора

Вы можете использовать цель времени выполнения 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>.

Автор: abhinavroy23 Размещён: 08.07.2017 01:05
32x32