3

iOS 6.x より前open package_idは、iOS デバイスのコマンド ラインからアプリを開いていました。iOS 6.x でこのコマンドを使用すると、SpringBoard がクラッシュします。Open は BigBoss から入手でき、作者は Conrad Kramer です。

openBigBoss からのコマンドの代替または修正はありますか?

4

1 に答える 1

7

アップデート:

オリジナル/usr/bin/openはCydiaのiOS 6にアップデートされているようですので、まずはそちらをお試しいただくことをお勧めします。


元の回答:

openも懐かしい!ただし、iOS 6 用に更新されるまでは、独自の非グラフィカル アプリ (mainプログラムではなくプログラムUIApplicationMain()) を作成して、同じことを自分で行うことができます。

からのコマンド ライン引数の解析は省略しますが、開きたいアプリのBundle Id ( )int main(int argc, char *argv[]がわかったら、 SpringBoardServicesプライベート フレームワークを開き、それを使用してアプリを起動します。CFBundleIdentifier

#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です。 エンタイトルメントの追加については、こちらを参照してください。次のように、実行可能ファイルには entitlements.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 として実行することを示しています。

于 2013-03-16T23:13:12.407 に答える