iOS应用程序来运行脚本

时间:2013-10-17 15:58:43

标签: iphone ios bash jailbreak

我很感激帮助创建一个iOS应用程序来运行/var/mobile/script.sh中的指定脚本。我编写的脚本在我的越狱6.1.2 iphone上“一次性”打开了许多指定的应用程序。目前,我通过启动MobileTerminal并从命令行手动运行script.sh文件来运行脚本。我希望能够通过Springboard创建一个可以直接运行/var/mobile/script.sh的应用程序。

我没有Mac,因此我无法自行编译应用程序。我也没有太多的编程经验,所以我很感激任何帮助。我看到了一个类似的答案:iOS execute shell script from Activator

上面提供的答案非常接近我要找的内容。但是我对Script.app有两个问题:

1)由于我编写的脚本打开了许多其他应用程序,大约需要两分钟才能完成,Script.app会在大约20秒后被iOS自动杀死。我不确定是否需要设置标志“didFinishLaunchingWithOptions”以允许Script.app继续运行以便它可以完成运行我的脚本?我已经通过Cydia安装了一个名为“后台管理器”的软件包 - [据我所知,它使所有应用程序都有效地认为它们在前台运行]。

2)我之前在iOS 5上测试过上面列出的Script.app,Script.app确实运行了大约20秒,将应用程序带到了我的script.sh中列出的前台。在iOS 6.1.2上,Script.app在script.sh中运行某些命令[例如killall命令]但是当涉及通过脚本打开指定的应用程序时,它将不会打开任何应用程序[有20秒的空白黑屏,然后脚本应用程序关闭而没有通过script.sh文件打开任何应用程序] 。但是在iOS 6.1.2中,如果Script.app启动并立即按下主页按钮返回到Springboard,Script.app将在前20秒内通过我的script.sh打开应用程序,所以看起来有所不同在iOS5和iOS6上运行Script.app的方式。我想如果Script.app可以通过script.sh打开应用程序,而不必在iOS6上启动Script.app之后立即按下主页按钮

在我的脚本文件中,我使用名为“open”的命令行包来指定要通过其CFBundleIdentifier打开的应用程序:http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=openData

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

这是一种适合您的技术。它不一定是我解决它的方式,但该解决方案旨在解决您没有Mac / Xcode的问题。

一个问题是iOS期望正常的“应用程序”快速启动,并开始响应正常的UI应用程序事件。如果您使用my original script launcher,则实际上并不会创建UIApplication,而只是从主程序中调用system()。假设对system()的调用快速完成,则没有问题。但是,如果你的脚本需要20秒才能运行,那就太长了,iOS将会杀死该应用。

可以构建一个普通的UI应用程序,调用UIApplicationMain(),并在应用程序完成启动后启动长时间运行的脚本。但实际上,您并没有构建应用。您只想使用SpringBoard图标启动脚本。所以,我认为这个解决方案没有多大意义。

您可能想要的是一个非图形守护程序来为您运行长脚本。为此,您可以构建Launch Daemon,这可能就是我解决问题的方法。但是,没有Xcode,这很难。另一种选择是利用SBSettings拥有的特权守护进程。 You can use it to run your script。然后,您的“app”只需触发通知即告诉SBSettings运行该脚本。然后它几乎可以立即退出。

这是pre-built binary that invokes a script named com.mycompany.script(获取版本1.1)。在iPhone上安装此应用程序(可以正常安装,在沙箱区域中)。

然后,您需要将脚本放在(此完全路径和文件名)中:

/var/mobile/Library/SBSettings/Commands/com.mycompany.script

例如,其内容可能是:

#!/bin/sh
/usr/bin/open com.mycompany.AppOne
/usr/bin/open com.mycompany.AppTwo
/usr/bin/open com.mycompany.AppThree
exit 0;

您将应用包ID传递给open。你可以在里面放任何你想要的东西。确保登录iPhone并在脚本上设置正确的权限:

cd /var/mobile/Library/SBSettings/Commands/
chmod 755 com.mycompany.script 
chown mobile.mobile com.mycompany.script 

然后重新启动(重新弹出可能足以让SBSettings识别您的新脚本)。


注意:对于那些编码员的人来说,这个应用程序的主程序基本上只包含以下代码:

#include <notify.h>

int main(int argc, char *argv[])
{
   notify_post("com.mycompany.script");
   return 0;
}