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.

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