Как удалить приложение iOS программно, используя частную структуру для устройства без джейлбрейка

Я делаю собственное (Enterprise) приложение. Я хочу программно удалить другие установленные приложения с устройства iOS. Я успешно получил информацию об установленных приложениях (например, имя, bundleId, версию, значок и т. д.), используя методы частной платформы Apple. Подскажите, пожалуйста, как мне это сделать (например, удалить приложение). Спасибо.


person iOS_Learner    schedule 12.08.2015    source источник
comment
Я думаю, вам понадобится доступ суперпользователя.   -  person Blind Ninja    schedule 12.08.2015
comment
@ХарвантС. Что такое доступ суперпользователя?   -  person iOS_Learner    schedule 12.08.2015
comment
Доступ суперпользователя @Salman означает, что вам нужно сделать джейлбрейк вашего устройства, и вы станете суперпользователем.   -  person Badal Shah    schedule 12.08.2015
comment
SUDO Ключевое слово в Linux и Unix. Это означает Super User DO . @BadalShah Да.   -  person Blind Ninja    schedule 12.08.2015
comment
@BadalShah Спасибо за объяснение. Но я не хочу делать джейлбрейк своего устройства.   -  person iOS_Learner    schedule 12.08.2015
comment
@ХарвантС. Я нашел один метод в частных заголовках .... То есть - (BOOL) uninstallApplication: (id) arg1 withOptions: (id) arg2; Это в рабочем пространстве LSApplication. Он принимает два аргумента. Я передал первый идентификатор пакета аргументов, а второй аргумент был нулевым. Этот метод успешно удалил приложение, но после этого произошел сбой.   -  person iOS_Learner    schedule 12.08.2015
comment
@BadalShah Я нашел один метод в частных заголовках .... То есть - (BOOL) uninstallApplication: (id) arg1 withOptions: (id) arg2; Это в рабочем пространстве LSApplication. Он принимает два аргумента. Я передал первый идентификатор пакета аргументов, а второй аргумент был нулевым. Этот метод успешно удалил приложение, но после этого произошел сбой.   -  person iOS_Learner    schedule 12.08.2015
comment
У меня он работает без сбоев, но иногда метод возвращает NO.   -  person Blind Ninja    schedule 12.08.2015
comment
К вашему сведению: вы можете сделать джейлбрейк своего телефона и скрыть Cydia, если вас это устраивает.   -  person Munim    schedule 12.08.2015
comment
@Thibaud Дэвид любые предложения   -  person iOS_Learner    schedule 19.08.2015
comment
Вы когда-нибудь получали надежное решение для этого?   -  person newenglander    schedule 05.05.2016


Ответы (3)


Вот решение (без джейлбрейка, без сбоев), но оно не работает каждый раз. Иногда не удалось удалить приложение и вернуть NO.

NSBundle *b = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/MobileCoreServices.framework"];
BOOL success = [b load];
if(success)
{
    Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace");
    id si = [LSApplicationWorkspace valueForKey:@"defaultWorkspace"];

    SEL selector=NSSelectorFromString(@"uninstallApplication:withOptions:");
    BOOL what=[si performSelector:selector withObject:@"Bundle_ID" withObject:nil];
}
person Blind Ninja    schedule 12.08.2015

Это невозможно с устройством без взлома, даже с частными API.

person Rukshan Marapana    schedule 12.08.2015
comment
@sleepwalkersfx Я нашел один метод в частных заголовках .... То есть - (BOOL) uninstallApplication: (id) arg1 withOptions: (id) arg2; Это в рабочем пространстве LSApplication. Он принимает два аргумента. Я передал первый идентификатор пакета аргументов, а второй аргумент был нулевым. Этот метод успешно удалил приложение, но после этого произошел сбой. - person iOS_Learner; 12.08.2015

Вам понадобится решение MDM, которое дает компании довольно большую власть над зарегистрированными устройствами. Используя программное обеспечение iOS, нет никакого способа. И я просто предполагаю, что ваше предприятие не подпустит к себе взломанные телефоны!

person gnasher729    schedule 12.08.2015