Специальный API для запуска приложения из моего приложения

Я задал вопрос здесь, но ответ поможет мне открыть новую тему. Вскоре я хочу запустить бесплатное приложение в Appstore из своего приложения, но приложение, которое я хочу запустить, не имеет схемы URL. Комментарии к моему другому вопросу говорят, что использование некоторых специальных API, таких как SBSLaunchApplicationWithIdentifier, или классов, таких как UIDocumentInteractionController, делают это возможным. Может кто-нибудь, пожалуйста, помогите мне, как запустить приложение из моего приложения. заранее спасибо

1 ответ

Решение

Позвольте мне сначала сказать, что этот метод только джейлбрейк! Он использует частные API, которые Apple может прекратить поддерживать в любой момент в будущей версии!

Давайте вернемся к этому, этот метод использует [UIApplication launchApplicationWithIdentifier:suspended:] приватный метод:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO];

Из того, что я тестировал, вызов этого метода из приложения, не работающего от имени пользователя root, бесполезен, очевидно, что SpringBoard (или LaunchServices) разрешает только корневым приложениям запускать другие приложения с использованием этого метода.

Итак, сначала вам нужно сделать джейлбрейк вашего iPhone, а затем запустить приложение как root.

Чтобы ваше приложение работало от имени пользователя root, вам нужно поместить его в /Applications/YourApp.app вместо обычного / User / Applications / UUID /YourApp.app.

Вы можете установить OpenSSH с помощью Cydia и использовать SSH для доступа к оболочке вашего телефона.

Затем, после того, как ваше приложение окажется в нужном месте, вам нужно установить разрешения, например:

Я бы использовал те же, что и Cydia:

chown -R root:wheel /Applications/YourApp.app

Далее небольшой трюк. Бинарному файлу понадобится бит setuid:

chmod 4755 /Applications/YourApp.app/YourApp

И на последнем этапе SpringBoard не открывает приложения с битом setuid, но открывает скрипт (который может открыть другое приложение)! Просто измените имя двоичного файла на что-то вроде YourApp_:

mv /Applications/YourApp.app/YourApp /Applications/YourApp.app/YourApp_

И создайте новый файл с именем YourApp в папке вашего приложения с помощью следующего сценария:

#!/bin/bash
CrrDir=$(dirname "$0")
exec "${CrrDir}"/YourApp_

Теперь просто подождите (есть приложение для Cydia), и вы готовы к работе.

Извините, если это кажется трудным, это не так, я не помню, где я это узнал, но это было давно. Этот метод отлично работает во всех версиях iOS, и я только что протестировал его с iOS 5.1.

Опять же, ваше приложение не будет одобрено Apple, если вы делаете это.

Другие вопросы по тегам