阅读之前建议先看下 Run a daemon (as root) on iOS,因为很多配置都和iOS10里面是一样的;
1.环境:iOS 11.0.1
Xcode9.4
安装最新版MonkeyDev(ps:已经安装的就更新,庆总有更新:fix invalid provision)
2.Xcode新建项目,选择:
3.建好的工程如下:
其中monkeydev.entitlements文件就是MD更新后新增的;我把main.c改为了main.mm;将里面代码改为:
用来验证守护进程是否正确运行;
4.进入工程Finder中,在package文件夹下面新建两个文件夹,名字及关系为:/Library/LaunchDaemons/,在LaunchDaemons文件夹中创建plist文件,名字为com.ztwl.demo.plist;保证和contol里面的package名字一致;
如图:
plist里面代码为:
<?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>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.ztwl.demo</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/demo</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>SessionCreate</key>
<true/>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
</dict>
</plist>
5.同样打开Finder,进入DEBIAN文件夹下,添加两个文件postinst、prerm;
prerm 代码为:
#!/bin/sh
chown -R root:wheel /usr/bin/demo
chown -R root:wheel /Library/LaunchDaemons/com.ztwl.demo.plist
/bin/launchctl unload /Library/LaunchDaemons/com.ztwl.demo.plist
/bin/launchctl load /Library/LaunchDaemons/com.ztwl.demo.plist
prerm 代码为:
#!/bin/sh
/bin/launchctl unload /Library/LaunchDaemons/com.ztwl.demo.plist
其中 postinst文件:是插件安装后执行的脚本;
prerm文件:软件卸载前需要执行的脚本。
6.工程配置好端口号等参数,编译插件;
7.验证:我用console查看,效果如下
补充:参考iOS10 iphoneDaemonTool
至此iOS11上面守护进程运行完毕。
记录了实现过程,感谢狗神及庆总的帮助。有不对的地方请指正。