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 IdCFBundleIdentifier ),就打开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身份运行命令 。