简介
建议不要默认就开启自启动,可以放到设置中,让用户自己选择开启/关闭。
Mac OS上运行的App,想要支持用户登录后App自动启动的功能,可以使用Service Management Framework 或 Shared File List实现。对于沙箱开启的应用,苹果推荐的做法是使用Service Management Framework;对于沙箱未开启的应用,苹果推荐使用Shared File List。Service Management Framework对于沙箱未开启的APP也是可以实现登录后自动启动的。二者的区别主要如下:
.使用Service Management Framework方式添加的登录项不会显示在系统偏好设置->用户与群组->登录项中,只有把应用.app文件移到废纸篓,自动启动才会失效。
.使用System Preferences方式添加的登录项会显示在系统偏好设置->用户与群组->登录项中,因此可以勾选隐藏按钮来控制自动启动的功能是否生效。
以下是Service Management Framework的实现方式
步骤
1.在主项目中添加target
我们需要注册一个Helper Target App用来作为开机自启动我们的NeewerLiveProject(主项目),点击Targets下面的加号,添加一个新的OS X APP。取名为NeewerLiveHelper(帮助项目)
2.分别开启NeewerLiveProject和NeewerLiveHelper的App Sandbox,注意两边的设置要一致
3.配置属性
-
删除NeewerLiveHelper(帮助项目)中的windows,让它没有可展示的Window。
-
设置NeewerLiveHelper(帮助项目)的Info中Application is background only为YES
-
在NeewerLiveProject(主项目)中添加CopyFile到Contents/Library/LoginItems
-
在NeewerLiveProject(主项目)中设置Build Setting 下Strip Debug Symbols During Copy为NO, 这个是默认的为No
-
在NeewerLiveProject(主项目)链接所需要的库Cocoa.framwork 和ServiceManagerment.framework
4.代码添加
- 主项目NeewerLiveProject AppDelegate方法中
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
//在启动主项目的时候 发送通知 关闭帮助程序
[[NSDistributedNotificationCenter defaultCenter]postNotificationName:@"TerminateAppHelperNotificationName" object:[NSBundle mainBundle].bundleIdentifie