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

iphone objective-c ios

15123 просмотра

7 ответа

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

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

Автор: Unicorn Источник Размещён: 13.11.2019 11:43

Ответы (7)


13 плюса

Решение

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

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

4 плюса

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

-(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

2 плюса

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

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

2 плюса

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

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

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

1 плюс

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

#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 плюса

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

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

0 плюса

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