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 在越狱时打开命令行的主要内容,如果未能解决你的问题,请参考以下文章

ios命令行安装卸载应用

iOS 5.1.1越狱教程

如何在iphone,ipad上安装一些常用命令行命令

iOS:在非越狱手机上进行Hook注入

使用 Xcode 在越狱 iOS 设备上进行开发调试

Mac_如何通过命令行装包到ios手机