iOS 6.x打开越狱命令行
在iOS 6.x之前,我使用open package_id
在iOS设备上从命令行打开应用程序。 在iOS 6.x,如果我使用这个命令SpringBoard崩溃。 打开可从BigBoss获得,作者是Conrad Kramer。
有没有替代或修复来自BigBoss的open
命令?
更新:
它看起来像原来的/usr/bin/open
已经在Cydia上更新了iOS 6,所以我build议你先尝试一下。
原始答案:
我也想open
! 但是,直到它更新为iOS 6,你可以build立自己的非graphics应用程序(只是一个main
,而不是UIApplicationMain()
),并自己做同样的事情。
我将跳过parsing来自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
用户。 请参阅此处添加权利 。 你需要一个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
注意:我没有testing过这个,但是这个答案指出,使用授权的替代方法是以root身份运行命令 。