iOS 6.x 在越狱时打开命令行
Posted
技术标签:
【中文标题】iOS 6.x 在越狱时打开命令行【英文标题】:iOS 6.x open command line on jailbreak 【发布时间】:2013-03-04 13:15:26 【问题描述】:在 ios 6.x 之前,我使用 open package_id
在 iOS 设备上从命令行打开应用程序。
在 iOS 6.x 上,如果我使用此命令 SpringBoard 会崩溃。
Open 可从 BigBoss 获得,作者是 Conrad Kramer。
BigBoss 的open
命令是否有替代或修复方法?
【问题讨论】:
它是否需要成为一个命令行工具,或者您是否正在尝试编写一个应用程序,并以编程方式? 命令行工具,但如果可以通过编程方式完成,那么我可以编写命令行工具:D 我在 iOS 6.1 中遇到了同样的问题。open
工具对于开发越狱应用程序(构建后部署脚本)非常有用。
【参考方案1】:
更新:
看起来原来的/usr/bin/open
已经在 Cydia 上针对 iOS 6 进行了更新,所以我建议你先尝试一下。
原答案:
我也想念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
用户的身份成功使用它。 See here for adding an entitlement。您的可执行文件需要一个 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
注意:我没有测试过这个,但是this answer states that an alternative to using entitlements is to run the command as root。
【讨论】:
以上是关于iOS 6.x 在越狱时打开命令行的主要内容,如果未能解决你的问题,请参考以下文章