在我的Mac应用程序中,我一直在SMCopyAllJobDictionaries()用来检查应用程序是否会在登录时自动启动.基本上,我得到所有登录项的数组,并检查我的Bundle ID是否在数组中.
此函数调用一直有效,直到Mavericks,但在Yosemite中已弃用.根据Apple的说法,
此例程已弃用,将在以后的版本中删除.没有提供替代品.
但是,我怎么能在优胜美地做同样的工作呢?我必须检查我的应用程序是否在登录项列表中,以便正确显示一个复选框.我找不到Apple的相关文档.
谷歌给了我:http://developer.apple.com/samplecode/LoginItemsAE/index.html
我认为必须有比使用AppleScript Events更好的方法.
所以我下载了Growl来源.他们使用Apple开发人员文章中的确切来源.
有没有更好的办法?
(我在系统偏好设置中指的是帐户中的登录项,即在用户以编程方式登录时启动我的程序)
实际上,我阅读了以下文件:
我不太明白,有谁知道该怎么办?
而且,这是什么意思:
注意:在调用SMLoginItemSetEnabled函数之前,首先通过使用帮助应用程序包的URL调用LSRegisterURL函数来注册Launch Services.
有没有关于如何使用LSRegisterURL和SMLoginItemSetEnabled的示例?
我需要一种方法来从一个作为我的安装程序的一部分运行的postflight脚本向Login Items添加一个应用程序.它需要在10.5+上工作.优选地,它可以在bash脚本中工作.我的申请已经需要管理权.
我在这里找到的方法:带有参数的Mac OS登录项?似乎是在正确的轨道上(包括在下面)...但是当我在命令行上尝试它并且我不确定如何为所有用户安装或者如果我需要添加逻辑以检查是否在调用此代码之前,它已添加到启动项中.
#!/bin/bash
/usr/bin/osascript -e "tell application \"System Events\" to make new login item with properties { path: \"$1\", hidden:false } at end"
Run Code Online (Sandbox Code Playgroud)
我怀疑我也可以用launchd做点什么.但是,我不确定哪种方法是跨版本兼容性的最佳实践.
注意:我不想在我的应用程序中使用一些objective-c代码添加它.我需要安装程序来添加它. 目前,我所做的是在安装后启动应用程序,然后使用LSSharedFileListRef将其添加到代码中的Login Items ...可以在此处找到该方法的示例:如何在登录时打开应用程序?.这个不合适的原因是我需要在登录屏幕上通过命令行使用Apple Remote Desktop安装我的应用程序.因此,应用程序安装后无需自动启动.
我的应用程序的用户可以选择他们是否想要(或不)在他们的会话启动时启动我的应用程序.
为此,我使用LSSharedFileListRef,如下所述:如何在登录时打开您的应用程序?
我现在想要的是知道我的应用程序是在会话启动时自动启动还是通过单击Dock中的图标来启动.实际上,我必须在这两种情况下采取不同的行动.
我感觉不可能在以下委托方法中使用通知的参数来执行此操作:
- (void)applicationDidFinishLaunching:(NSNotification *)notification
Run Code Online (Sandbox Code Playgroud)
我看过以下帖子,但他们没有帮助:
我怎么知道我的应用程序是如何在Mac OS上启动的?=>没有答案,除了一些链接到其他帖子,这些链接没有帮助...
知道用户是否启动了应用程序 =>我没有看到如何设置/获取此帖子中定义的"Y"参数
Mac OS X:登录时打开应用程序,不显示主窗口 =>处理启动时隐藏或不隐藏主窗口的事实; 我想要的更通用:如何知道应用程序是如何启动的?
有人可以帮帮我吗?
谢谢 !
macos ×4
cocoa ×2
app-startup ×1
autologin ×1
bash ×1
objective-c ×1
osx-yosemite ×1
packagemaker ×1
session ×1
startup ×1
xcode ×1