2

在创建 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 安装了一个名为“Background Manager”的包 - [据我了解,它使所有应用程序有效地认为它们正在前台运行]。

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 打开应用程序,因此似乎有所不同Script.app 在 iOS5 和 iOS6 上的运行方式之间。我想如果 Script.app 可以通过脚本打开应用程序。

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

谢谢你的帮助

4

1 回答 1

3

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

一个问题是 iOS 期望正常的“应用程序”快速启动,并开始响应正常的 UI 应用程序事件。如果您使用我原来的脚本启动器,它实际上不会创建一个UIApplication,而只是system()从主程序调用。假设调用system()很快完成,没有问题。但是,如果你的脚本需要 20 秒才能运行,那就太长了,iOS 会终止应用程序。

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

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

这是一个预构建的二进制文件,它调用名为 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;
}
于 2013-10-22T09:57:50.763 回答