2013-10-17 112 views
2

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

我没有Mac,所以我无法自己编译应用程序。我也没有太多的编程经验,所以我很感谢提供的任何帮助。我所看到的一个答案是相似的:iOS execute shell script from Activator

以上所提供的答案是非常接近我所期待的。不过,我现在有两个Script.app问题:

1)由于我编写的脚本打开了大量需要大约两分钟才能完成的其他应用程序,Script.app会在iOS自动被杀死后大约20秒。我不确定是否需要设置标志“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,并且按下主页按钮以将您返回到跳板,则Script.app将在前20秒内通过我的script.sh打开应用程序,因此看起来有区别Script.app在iOS5和iOS6上运行的方式之间。我想如果Script.app可以通过script.sh打开应用程序,而不需要在iOS 6上启动Script.app后立即按下主页按钮。在我的脚本文件中,我使用名为“open”的命令行包,具体哪个应用通过其CFBundleIdentifier打开:http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=openData

感谢您的帮助

+0

由于内特 - 我已经重新编写了原来的问题。我希望事情更清晰一些...... – Rhys

+0

这仅限我个人使用。主屏幕图标可以很好地完成这个技巧。 – Rhys

+0

是的,我可以SSH到手机没有问题。我使用iFile来修改.plist文件等 – Rhys

回答

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。然后,您的“应用程序”只需发出通知告诉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; 
} 
+0

谢谢Nate。有一点可怕的时刻在那里一秒钟。我启动了你的应用程序 - 它通过SBSettings守护进程完成了脚本的执行。奇怪它执行脚本TWICE!我让它跑了30分钟,然后我注意到Springboard似乎已经冻结了。又过了一两分钟,iPhone就再次出现了。当Springboard再次显示时,99%的应用程序图标丢失:-( 我重新启动设备,幸运的是所有的应用程序又回来了,手机工作正常。 – Rhys

+0

http://thebigboss.org/guides-iphone -ipod-ipad/sbsettings-toggle-spec我不确定这是否与以下内容有关:您的切换将在跳板中运行,这意味着如果您的切换泄漏内存,则系统将泄漏内存。 ,跳板就会崩溃,您将进入安全模式 – Rhys

+0

因此,我想知道您描述的其他方法是:“构建一个正常的UI应用程序,调用UIApplicationMain(),并在应用程序完成后启动长时间运行的脚本启动“会更安​​全吗?至少这样,应用程序本身就会崩溃,而不是让整个iPhone停止运行。这样做还有一个好处,如果我在执行脚本的过程中强制退出应用程序, ld停止执行脚本?由于脚本需要2分钟才能运行,所以如果我应该改变主意,最好有一个简单的方法来停止脚本,而不必等待。4it2finish – Rhys

相关问题