阅读之前建议先看下 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"?>KeepAlive Label com.ztwl.demo ProgramArguments /usr/bin/demo RunAtLoad SessionCreate StandardErrorPath /dev/null inetdCompatibility Wait
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查看,效果如下:
至此iOS11上面守护进程运行完毕。
记录了实现过程,感谢狗神及庆总的帮助。有不对的地方请指正。