iOS 6.x より前open package_id
は、iOS デバイスのコマンド ラインからアプリを開いていました。iOS 6.x でこのコマンドを使用すると、SpringBoard がクラッシュします。Open は BigBoss から入手でき、作者は Conrad Kramer です。
open
BigBoss からのコマンドの代替または修正はありますか?
オリジナル/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 として実行することを示しています。