- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要在用户登录时启动我的 Mac 应用程序。
这是我做的:
我创建了一个新的 Coca 应用程序目标。
• build设置将“跳过安装”设置为"is"
• Info.plist“应用程序仅在后台”为"is"
• 在主应用和辅助应用上都启用了沙盒。
• 向主应用程序添加了复制文件阶段:Wrapper、Contents/Library/LoginItems,添加了 Helper.app
Helper应用的AppDelegate.swift
import Cocoa
import ServiceManagement
extension Notification.Name {
static let killLauncher = Notification.Name("killLauncher")
}
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@objc func terminate() {
NSApp.terminate(nil)
}
func applicationDidFinishLaunching(_ aNotification: Notification) {
print("hi")
let mainAppIdentifier = "co.myprogress.osx"
let runningApps = NSWorkspace.shared.runningApplications
let isRunning = !runningApps.filter { $0.bundleIdentifier == mainAppIdentifier }.isEmpty
if !isRunning {
DistributedNotificationCenter.default().addObserver(self,
selector: #selector(self.terminate),
name: .killLauncher,
object: mainAppIdentifier)
let path = Bundle.main.bundlePath as NSString
var components = path.pathComponents
components.removeLast()
components.removeLast()
components.removeLast()
components.append("MacOS")
components.append("TODOs Menubar") //main app name
let newPath = NSString.path(withComponents: components)
NSWorkspace.shared.launchApplication(newPath)
}
else {
self.terminate()
}
}
func applicationWillTerminate(_ aNotification: Notification) {
// Insert code here to tear down your application
}
}
主应用的AppDelegate.swift
func applicationDidFinishLaunching(_ aNotification: Notification) {
let launcherAppId = "co.myprogress.TodosMenubarHelper"
let runningApps = NSWorkspace.shared().runningApplications
let isRunning = !runningApps.filter { $0.bundleIdentifier == launcherAppId }.isEmpty
let ret = SMLoginItemSetEnabled(launcherAppId as CFString, true)
print(ret)
if isRunning {
DistributedNotificationCenter.default().post(name: .killLauncher,
object: Bundle.main.bundleIdentifier!)
}
}
测试
• Cmd + B 构建应用程序
• 右键单击产品中的 .app > 在 Finder 中显示
• 已启动的应用程序
• 注销
• 重新登录——预期:应用程序启动。发生了什么:应用程序没有启动
最佳答案
不是一个完整的解决方案,但可能有助于调试:
我关注了this tutorial其中描述的步骤与您的步骤非常相似。我还将应用程序存档并导出为 Developer ID 应用程序,并将其安装到/Applications 中。
结果:它对我也不起作用。
打开 Console.app
后,system.log
显示了很多如下行,每 10 秒出现一次:
May 24 21:18:16 FooBar com.apple.xpc.launchd[1] (my.domain.TestHelper[43372]): Could not resolve CFBundleIdentifier specified by service: -10814: my.domain.TestHelper
即通过 SMLoginItemSetEnabled
注册 helper 有效,但系统找不到它。手动打开主应用程序并禁用登录时启动功能后,不再显示任何消息。注销似乎也有效。
最后我尝试在 Terminal.app 中手动打开主应用程序:
$ open -b my.domain.Test
它从各种 Xcode 构建位置和文件中打开了许多旧构建!因此,宁愿使用干净的系统来尝试该功能。否则,启动服务会打开主应用程序或辅助应用程序的意外版本。从 Xcode 测试该功能似乎是不可能的。
Apple还记录了登录项工作必须满足的一些条件。
有了一个干净的系统,我可以让它工作。
关于swift - 实现了助手应用程序但未在登录时启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50417312/
有时我需要(为了让我的开发更快)在我的代码中对一些东西进行硬编码。这可能是凭据,或者可能只是一个允许我测试某些功能的 hack。由于很多原因,我从来不想将这段代码推送到主代码库甚至开发分支。一段时间以
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我经常发现自己从类中提取常见行为到只包含一组静态方法的帮助程序/实用程序类中。我经常想知道是否应该将这些类声明为抽象类,因为我真的想不出实例化这些类的正当理由? 将这样的类声明为抽象类的优点和缺点是什
如果我这样做: $obj = factory(Object::class)->make(); collect($obj); 我返回了一个类型的集合: Illuminate\Support\Collec
我有一个应用程序,我可以在其中列出 parent 和 child 。当我添加一个 child 时,我需要获得一个 parent 列表作为下拉列表显示。有没有类似 collection_select 的
我有渲染组件( source ),用于从 Controller 字段渲染组件/助手。它适用于 ember 1.9.1,但在更新到 ember 1.12.1 后,我发现 API 发生了变化。之后upda
我刚开始使用 Rails,还有很多东西需要学习,所以我可能会比平常更频繁地在 Stackoverflow 上询问初学者 Rails/Ruby 问题。 我只是想弄清楚 Helpers 在 Rails 中
我在 Web 上使用 VS Express 2012。我的项目是一个 MVC 4 项目。 我正在尝试创建一个助手来创建一个菜单项,该菜单项是带有标签的 png 图像。我几乎剪切并粘贴了这段代码: Ac
我正在尝试在我的 Vue 页面中映射我商店的状态变量: export default { data: () => ({ localData: []
我目前正在开发一个 Rails 插件,用于生成 iPhone 特定的 HTML 元标记。我尝试使用 ActionView::TestCase 进行单元测试,但不断收到相同的错误。请参阅下面的文件内容和
我正在努力解决一个与变量声明相关的非常基本的问题。我已经阅读了有关变量的所有内容,但我不知道我的问题是否与 1) 我如何声明变量或 2) 我如何设置变量的范围有关。 首先,我对 Meteor 中变量的
我想知道是否可以将参数传递给 Meteor Helper 并在 HTML 中插入返回对象的属性,而不仅仅是返回最终值。我有这样的东西: HTML: {{#each conversation}}
我正在尝试为我的 Ember 应用程序构建一个新的条件助手。值得一提的是,我正在使用使用 Handlebars 2.0 的 Ember 1.10.1,并且我无法升级它,如果能很好地解决这个版本的 Em
我最近从 Dreamweaver 迁移到 aptana,并尝试使 aptana 尽可能相似;) 已经做了很多更改,但我仍然找不到使代码字体变小的方法(在 Dreamweaver 中代码更清晰,因为字体
我有以下模板: {{#each helperOne "1" "2" }} Lorem upsom {{#each}} helper : template.tempName.h
我有这个简单的代码块,它位于我的一个模板上,但我想将其作为助手放置,以便我的所有 View 都可以访问它。 @hidden(field: Field) = { @defining(field)
使用正则表达式,我正在替换 **text in bold**至 text in bold在一个字符串中,然后显示 message使用 {{{message}}}在我的 EmberJS 模板上。问题是我
是否有任何非常有用和健壮的 C++ 网络库?和库来帮助他们更好地运行?诸如使用 << 时自动进行字节序转换之类的东西,阻止读取直到结构或 w/e 您的读取完全传输,有助于调试协议(protocol)的
模板 {{#each tags}} {{#isObject this}} Object {{else}}
我有返回 JSON 的函数: Template.mainmenu.menuitem = function() { var jsonObj = { items: [ { ur
我是一名优秀的程序员,十分优秀!