使用帮助程序启用mac os app的自动登录时出错

den*_*xic 17 macos objective-c

我正在尝试在Tim的教程后登录时自动启动我的应用程序:http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/

我按照说明写了这封信,但是当我重新登录我的电脑时出现错误,如下所示:

Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper[25725]): Could not resolve CFBundleIdentifier specified by service: -10814: com.myApp.macgap.helper
Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Run Code Online (Sandbox Code Playgroud)

概述:

  • 我有一个名为"myApp"的主应用程序(ID:com.myApp.macgap)
  • 在那个应用程序中,我有一个ID为com.myApp.macgap.helper的帮助应用程序
  • 当您启动主应用程序并转到首选项时,您可以选择启用自动登录(以符合Apple合规性规则)
  • 我退出计算机,重新登录并查看控制台以查看发生了什么(这就是我如何获得上面的代码)

值得一提的另一点是,当我在应用程序上显示"显示包内容"并双击帮助应用程序时,它会启动主应用程序...

byb*_*byb 11

我刚才遇到了完全相同的问题,在寻找解决方案时发现了这个(未答复的)问题.

至少在我的情况下,当我将应用程序(从Xcode作为dev-id签名.app)导出到新的OS X安装/帐户而没有我的所有开发内容时,这个所需的功能正常工作.当然,它也必须在/ Applications中,如问题中提到的教程中所述.

我不确定为什么应用程序的这个功能在我的开发机器上不起作用.也许问题可能是由于某种形式的冲突与我在磁盘上的应用程序的所有其他几乎完全相同的副本(我有一个不同版本的应用程序的存档,加上Xcode存储本身的副本),所有这些都是相同的捆绑ID当然.

希望这有助于这种或那种方式!


Ian*_*hek 11

这一切都归结为launchd和launchctl的工作原理,正如已经回答的那样,常规用例通常可以通过重新安装应用程序并确保应用程序位于应用程序文件夹中来解决.但是,另一种情况是@byb正在谈论,当你的开发机器上发生这种情况时 - 这可能是由无效的启动配置引起的.

运行时,SMLoginItemSetEnabled它会将您的包标识符与launchd服务中的其他信息一起注册.稍后,当您的应用更改,清理或发生其他事情(由launchd接收)时,launchd可能会禁用该特定登录项.显然,有时候这种情况并不顺利,并且连续的调用SMLoginItemSetEnabled将无法按预期工作,或者代理/助手应用程序根本无法启动.

首先要尝试的是更改启动器的包标识符.如果这解决了问题,请尝试弄清楚原件有什么问题.运行launchctl print-disabled "user/$(id -u)"以显示已禁用的服务和登录项关联.如果输出包含您令人不安的捆绑标识符 - 您很幸运.

我没有找到使用launchctl按名称删除已禁用服务的方法,必须通过手动编辑配置文件来完成.因为它们是系统拥有的,所以您将无法简单地单击和编辑,而是以root身份启动Xcode并删除必要的引用.

sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/loginitems.$(id -u).plist"
sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/disabled.$(id -u).plist"
Run Code Online (Sandbox Code Playgroud)

重新启动,运行launchctl print-disabled "user/$(id -u)"以确认已删除的项目不再在列表中.再试SMLoginItemSetEnabled一次,希望现在它能按预期工作.


小智 5

我遇到了同样的问题,删除了应用程序的其他副本,除了/ Applications中的一个为我解决了问题.要删除Xcode生成的.app文件,您可以运行Product-> Clean.