我正在为越狱的 iPhone 构建一个守护程序应用程序,并遵循 stackoverflow 上的几个问题和答案中描述的指导原则,当然还有 Chris Alvares 的网页:http://chrisalvares.com/blog/38/creating-an-iphone-daemon-part-4/ http://chrisalvares.com/blog/38/creating-an-iphone-daemon-part-4/
Jailcoder 对 Xcode 和项目进行了修补,使其可以在我的设备上运行。
这里的一篇文章指出,现在不再需要使用开放工具链模板。将应用程序上传到 /Applications 目录并在 /System/Library/LaunchDaemons 中添加 plist 文件就足够了。
我已执行上述步骤,但守护进程未启动,或者至少在我检查时未运行。在 Xcode 管理器中提供的设备日志中,在任何地方都找不到应用程序的名称或其捆绑 ID。我至少预计会出现错误并给出无法启动的原因。
将 plist 文件的内容复制到 /System/Library/LaunchDaemons:
<?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>dmn.NoUIDaemon.plist</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/Applications/NoUIDaemon.app/NoUIDaemon</string>
<string></string>
<string></string>
</array>
<key>StandardErrorPath</key>
<string>/dev/null</string>
</dict>
</plist>
问题:有没有办法调试为什么它不会启动守护程序应用程序?或者除了将应用程序上传到 /Applications 并将 plist 文件添加到 LaunchDaemons 目录之外,我是否可能错过了一个步骤?
EDIT:
我的主要日常内容:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
启动 /Applications/NoUIDaemon.app/NoUIDaemon 时出错:
R-iPod:/ root# /Applications/NoUIDaemon.app/NoUIDaemon
-sh: /Applications/NoUIDaemon.app/NoUIDaemon: Bad CPU type in executable
请注意,当我从 Xcode 在我的设备上运行该应用程序时,该应用程序确实可以正常工作。
尽管守护进程无法手动启动,但 Nate 问题的答案:
1)LaunchDaemons中的plist文件确实名为dmn.NoUIDaemon.plist
2)我犯了一个“错误”,忘记了标签内容中的 .plist 部分,所以我尝试了这两个值,最后有和没有 .plist,当然没有区别。
3)我使用reboot命令安装应用程序和plist文件后重新启动了设备
4)我已确保所有权限都是相同的(0775)
5) 当 CPU 问题解决但仍然不起作用时,将尝试此操作
最终编辑:
要在跳板上隐藏守护程序应用程序图标,请将以下内容添加到 .app 中的 Info.plist:
<key>SBAppTags</key>
<array>
<string>hidden</string>
</array>