我很感激帮助创建一个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
感谢您的帮助
答案 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;
}