问题标签 [launch-services]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - LSMinimumSystemVersion 的默认值是什么?
macOS 应用程序可以通过在其文件中包含LSMinimumSystemVersion
密钥来指定所需的最低操作系统版本。Info.plist
如果此密钥不存在,应该会发生什么?
macos - 如何启动新实例而不是专注于点击应用程序图标
如果单击应用程序的图标,有没有办法让应用程序启动一个新实例而不是关注现有应用程序?LaunchServices 可能有一种方法,它是属性文件 info.plist。
EG 如果您在 Dock 中有 TextEdit,第一次单击它会启动一个新应用程序。但第二次点击关注的是现有的。
只有终端中的直接调用总是启动一个新实例:
ios - 处理 URL 的 iOS 应用程序未显示在“打开方式...”菜单中(例如在 Safari 中)
当单击 iOS Safari 中的“共享”按钮(从工具栏或长按链接)时,我希望我的应用程序显示为“在...中打开”选项(例如“在新闻中打开"),这样我的应用程序(另一种类型的网络浏览器)就可以打开Safari 共享的任何内容http://
或URL。https://
我已经在我的文件中注册了文档类型“URL”(我认为它是正确的类型——如果这个假设是错误的,请纠正我!)我可以从 Apple 的“注册应用程序支持的文件类型”文档info.plist
中猜到。 ,他们的技术问答,以及这些相关的 StackOverflow 帖子1 2 3:CFBundleDocumentTypes
我还写了这个存根方法AppDelegate.swift
(尽管我认为它实际上与让我的应用程序显示为“在...中打开”选项的第一阶段的成功无关):
...但是,我的应用程序仍未显示为“在...中打开”选项。我必须补充一点,应用程序图标与应用程序正确绑定,并且info.plist
文件在 Xcode 中打开正常,所以我可以确认它没有损坏。
所以我有三个问题:
长按链接并点击“共享...”按钮后,Safari 共享的文档类型确实是“URL”吗?
按下 Safari 工具栏中的图形按钮后,看起来像(混淆地也称为“共享”按钮),Safari 共享的文档类型是否像以前一样,“URL”?
我
CFBundleDocumentTypes
是否为 URL 类型的文档编写了正确的文档?或者如果 Safari 共享其他内容,它是什么(以及我应该如何编写它)?
macos - OSX LaunchAgent LaunchDaemon 通过 XPC 通信
我正在尝试从 LaunchDaemon 传达我的 xpc 服务。
LaunchDaemon 是命令行可执行文件,LaunchAgent 是 xpc 服务。
从主服务(LaunchDaemon)启动我的连接,如下所示:
Xpc-service 监听如下:
在我的情况下,我收到连接无效错误,我的 xpc 甚至无法启动。
LaunchAgent & LaunchDaemon 加载完美,代码签名也完成。帮我找出可能导致问题的原因?提前致谢。
objective-c - 封装和生成另一个应用程序并注入参数
我的问题是我有一个孩子.app
,我想在注入一些参数后运行它。想要做的是将应用程序作为父应用程序运行(启动它同步并将焦点/激活事件传播到子应用程序)。
我的目标是创建一个启动另一个应用程序的“父应用程序”,例如OtherApp.app
. 它应该看起来好像“父应用程序”是 OtherApp.app
(即不在扩展坞中显示为单独的应用程序,但窗口OtherApp.app
应该包含在“父应用程序”中)。我想这样做的原因是我可以在OtherApp.app
不修改.app
自身的情况下传递一些初始化变量。
我采取的方法
第一种方法是最简单的。只需使用
system(@"VAR=VALUE /Applications/OtherApp.app")
. 然而,这样做的问题是“父应用程序”将立即退出并OtherApp.app
在 Dock 中作为单独的应用程序打开。第二种方法:我尝试过使用
/li>NSWorkspace
withNSRunningApplication
但是它不是同步的,问题是“父应用程序”将再次立即死亡:第三种方法是使用启动服务。然而,这就是我的问题所在——我找不到任何不推荐使用的 API 可以让我传递环境变量或“启动服务密钥”(例如 LSUIElement),也找不到让我传递环境变量的方法。这也立即退出(我不熟悉 Launch Services 的内部结构,也许有人可以启发我?)
/li>
可能的解决方案
- 创建一个
NSApplication
与之通信的OtherApp.app
“父应用程序”不会立即退出。这里的问题是,现在它们是 Dock 中的两个应用程序,而且保持焦点同步似乎是一项更复杂的任务。 - 弄清楚如何将环境变量传递给
LS
(启动服务)API,并以某种方式控制生成的应用程序的焦点。 - 以某种方式访问捆绑包并动态加载虽然我通常不能与可执行文件一起使用
NSApplicationMain
(它会抛出一个错误)。OtherApp.app
NSBundle
现在,#2 感觉是最好的选择,尽管我们将不胜感激对替代解决方案的任何帮助。
macos - macOS `ps` 为某些 XPC 服务提供包标识符而不是路径
Contents/Library/LoginItems
如Apple 文档中所述,我的 macOS 应用程序可以使用 Apple 的服务管理框架启动一个不露面的帮助应用程序。有趣的是,当我请求 unixps
程序给我命令/路径时,对于这个助手进程,它会给出包标识符。例子:
它给了我相同的答案,无论是否-c
选择ps
.
因为我的应用程序有多种风格和版本,每个版本都包含不同的帮助程序,并且因为用户可能有多个安装,并且由于启动服务有时奇怪的行为,出于自我测试和诊断目的,我想获得路径正在运行的助手的包或可执行文件。
为什么要ps
给出捆绑标识符?我怎样才能得到路径?
macos - 查找启动 OS X 应用程序的文件名
设置文件信息,您可以将应用程序与特定文件类型相关联,以便在单击时启动应用程序。我的问题是应用程序如何发现导致它启动的文件的完整文件名。
macos - 确定是否允许在 macOS 中启动应用程序
有没有办法以编程方式确定是否允许在 macOS 的安全和隐私设置中启动应用程序?
我正在尝试以静默方式启动从 Cocoa 应用程序中从 Web 下载的 .app,但如果用户不允许来自 Mac App Store 外部的应用程序,我的应用程序将无法启动,并出现一个建议用户更改的对话框他们的设置。我想知道该应用程序是否会成功启动,如果不会,请自行打开安全和隐私设置,以便用户更改它们。
基本上,我正在寻找函数 AppIsAllowedToLaunch:
我尝试了什么:
- open(2) 总是返回零退出代码,无论应用程序是否成功启动
[NSWorkspace.sharedWorkpace launchApplicationAtURL:options:configuration:error]
返回 的实例NSRunningApplication
。这个对象不仅不允许我检查应用程序是否已成功启动,而且它还要求我尝试启动应用程序以查看发生了什么,而不是事先执行检查,这是我需要的- 开源的 open(2) 替代方案大多已过时,并且不反映允许用户阻止非 Mac App Store 应用程序启动的安全和设置更改。不幸的是,原来的 open(2) 不是开源的。
spctl -a /path/to/app.app
如果根据安全和隐私设置不允许应用程序启动,将正确返回 3。但是,如果应用程序需要 root 权限才能运行(并且我正在启动的应用程序需要),它也会返回 3,所以我不能使用这种方法。
为了检查应用程序是否可以成功启动,必须查询一些系统框架(可能是LaunchServices
或Security
)或系统数据库(类似于)。/var/db/SystemPolicyConfiguration/KextPolicy
我的应用程序没有经过沙盒处理,也没有通过 Mac App Store 分发。它以用户权限运行。
swift - MIME 类型的所有应用程序 URL
此外LSCopyDefaultApplicationURLForURL
,还有LSCopyApplicationURLsForURL
获取所有应用程序的功能,而不仅仅是默认应用程序。
如果您只想获取 MIME 类型的默认应用程序,可以使用LSCopyDefaultApplicationURLForContentType
,但它似乎没有获取所有支持的应用程序的等价物。
如何在磁盘上没有实际文件的情况下获取 MIME 类型的所有受支持应用程序?
swift - 无法从 Catalina 上的 Today 小部件启动包含应用程序
macOS Catalina 10.15.2
Xcode 11.3 斯威夫特 5
在 Widget 中执行的以下代码在完成时始终返回“false”:
包含小部件扩展的主应用程序位于 Applications 文件夹中,可以通过 Automator 工作流程中的“打开 URL”启动。系统日志中没有错误消息。在小部件模拟器和实时 Today/Notification 应用程序下启动尝试失败。否则,主应用程序和 wiidget 将按预期工作。
这个问题看起来很像这个。
任何建议表示赞赏。
我在 Mojave 系统上得到了相同的结果。在进一步搜索中,我发现了这篇2014 年的文章。此代码有效:
Apple 似乎从未在 OSX 中添加代码来支持最新的 Today Widget Extension 文档。