iOS 6.x открыть командную строку на побег из тюрьмы
До iOS 6.x я пользовался open package_id
открыть приложение из командной строки на устройстве iOS. На iOS 6.x, если я использую эту команду, SpringBoard вылетает. Open доступен от BigBoss, автор Конрад Крамер.
Есть ли альтернатива или исправление для open
команда от BigBoss?
1 ответ
Обновить:
Похоже на оригинал /usr/bin/open
был обновлен для iOS 6 на Cydia, поэтому я рекомендую вам сначала попробовать.
Оригинальный ответ:
я скучаю open
, тоже! Но, пока он не будет обновлен для iOS 6, вы можете просто создать свое собственное неграфическое приложение (просто main
программа, а не UIApplicationMain()
) и сделать то же самое самостоятельно.
Я пропущу разбор аргументов командной строки из int main(int argc, char *argv[]
, но как только вы знаете Bundle Id (CFBundleIdentifier
) приложения, которое вы хотите открыть, откройте частную платформу SpringBoardServices и используйте ее для запуска приложения:
#include <dlfcn.h>
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
-(void) openApp: (NSString*) bundleId {
// the SpringboardServices.framework private framework can launch apps,
// so we open it dynamically and find SBSLaunchApplicationWithIdentifier()
void* sbServices = dlopen(SBSERVPATH, RTLD_LAZY);
int (*SBSLaunchApplicationWithIdentifier)(CFStringRef identifier, Boolean suspended) = dlsym(sbServices, "SBSLaunchApplicationWithIdentifier");
int result = SBSLaunchApplicationWithIdentifier((__bridge CFStringRef)bundleId, false);
dlclose(sbServices);
}
Этот код требует com.apple.springboard.launchapplications
разрешить вашей программе командной строки успешно использовать ее, так как mobile
пользователь. Смотрите здесь для добавления права. Для вашего исполняемого файла вам понадобится файл authorlements.xml, например:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.springboard.launchapplications</key>
<true/>
</dict>
</plist>
А затем подпишите его
ldid -Sentitlements.xml MyCommandLineTool
Примечание. Я не проверял это, но в этом ответе говорится, что альтернативой использованию прав является запуск команды от имени пользователя root.