6

我在博物馆展览中使用一些 iPad,运行其他人开发的应用程序。尽管我们已经介绍了 Home 按钮,但我发现应用程序偶尔会崩溃,将用户留在主屏幕上。从这里他们可以访问其他未经授权的应用程序。

如果 iPad 越狱能给我们提供我们需要的解决方案,博物馆并不反对越狱,所以我一直在研究使用带有 KeepAlive 标签的 launchd 并将 .plist 文件放入 /Library/LaunchAgents 目录的想法阻止应用程序在崩溃时关闭或重新生成它

到目前为止,我已经成功地使它与 iPad 附带的默认应用程序以及 Cydia 安装的应用程序一起工作,但我无法让它重新启动我们想要的应用程序。我已经从 /User/Applications 目录和 /Applications 尝试过,有人建议这可能会有所作为,但没有乐趣。有人可以提出一个可能的解决方案还是我在浪费时间?我从下面的 plist 文件中插入了 XML。

   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.MVFieldguide.launchd</string>
<key>ProgramArguments</key>
    <array>
    <string>/Applications/Field Guide 2010.app/Field Guide 2010</string>
    </array>

<key>RunAtLoad</key>
    <true/>

<key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <true/>
    </dict>

4

2 回答 2

3

这不起作用,因为 App Store 应用程序未保存在 Applications 文件夹中。我可以想到两个选择。

  1. 在 Cydia 中安装 AppLinks。这将创建每个 App Store 应用程序的符号链接并将它们放在 /var/mobile/AppLinks 中。然后在您的 plist 文件中将应用程序的路径作为

    /var/mobile/AppLinks/Field Guide 2010/Field Guide 2010

  2. 您可以从 Xcode 获取 ipa 并提取 .app 包,而不是按照惯例将应用程序安装到 iPad 上。然后手动将其安装到 /Applications/ 中,您将能够以您拥有的方式使用您的launchd plist。

我推荐第一个选项,因为它允许您在不手动将 .app 包放入 Applications 文件夹的情况下更新应用程序。使用第一个选项根本不会改变您更新应用程序的工作流程。

另外,请注意,如果您这样做,则必须在更新应用程序以退出之前删除 plist,因为我认为您无法在应用程序运行时更新它。

于 2011-05-08T00:33:28.127 回答
1

iOS 6.0 可能会针对将设备锁定为某种模式进行某种修复...我不知道 (NDA)

被黑的 iOS 5.1 仍然可以执行以下操作:

使用具有捆绑标识符的应用程序....

你可以用 com.apple.calculator 打开计算器....不需要文件夹!

这是您放入launchd文件夹的脚本...

首先从 cydia 安装 Open 应用程序,以便您可以使用“open com.apple.calculator”终端命令

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>com.perceptdev.tink</string>
    <key>ProgramArguments</key>
    <array>
        <string>open</string>
        <string>com.orbitusrobotics.thegatekeeper</string>
        <string></string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>10</integer>
    <key>WatchPaths</key>
    <array/>
</dict>
</plist>
于 2012-07-15T13:57:59.683 回答