macOS 上的“打开方式”如何在内部填充?

Posted

技术标签:

【中文标题】macOS 上的“打开方式”如何在内部填充?【英文标题】:How is "Open with" on macOS populated internally? 【发布时间】:2018-08-13 11:25:09 【问题描述】:

我知道我可以通过编辑我的应用程序包中的Info.plist 文件将我的应用程序与某个扩展名相关联:

...
<key>CFBundleTypeExtensions</key>
  <array>
    <string>myext</string>
</array>

虽然这可行,但我的“打开方式”列表中充斥着我在该机器上开发的不同版本的应用程序的重复条目。甚至还有我从未在那台计算机上打开过的真正旧版本的条目! (这是一台与 Dropbox 同步的新机器,因此我的文件系统中有旧版本。)

似乎 macOS 甚至会在 /Application 之外扫描应用程序包,并将找到的所有应用程序添加到“打开方式”中。一种解决方法是使用我在此处某处找到的此命令重置“打开方式”列表,因此我认为: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain user;killall Finder

如何在内部填充“打开方式”列表? macOS 是否真的在扫描我的驱动器以查找带有 CFBundleTypeExtensions 条目的 Info.plist 文件?除了删除(或压缩)它们之外,还有什么方法可以避免我的“打开方式”列表中到处都是旧版本?

注意:我没有使用 Xcode,而是使用 clang 编译器在命令行上构建我的应用程序并通过 bash 脚本创建 Info.plist。

【问题讨论】:

【参考方案1】:

如何在内部填充“打开方式”列表? macOS真的是 扫描我的驱动器以查找 Info.plist 文件 CFBundleTypeExtensions 条目?

我想是的,是的。检查Launch Services 的文档,特别是“应用程序注册”部分。具体来说,操作系统可以通过以下方式找到您的应用并进行注册:

内置后台工具,在系统启动或新系统启动时运行 用户登录后,自动搜索应用程序文件夹 系统、网络、本地和用户域,并注册任何新的 它在那里找到的应用程序。 (此操作类似于 在早期版本的 Mac OS 中“重建桌面”。)

发现者 当它意识到它们时自动注册所有应用程序, 例如当它们被拖到用户的磁盘上或当用户 导航到包含它们的文件夹。

当用户尝试打开 在该文件中找不到首选申请的文件 启动服务数据库,Finder 会显示一个对话框询问用户 选择用于打开文档的应用程序。那么它 在启动之前注册该应用程序。


除了删除(或压缩)它们之外,还有什么方法可以避免我的“打开方式”列表中出现旧版本?

我不确定那部分。可能不会,尽管似乎一旦您使用问题中的命令重置启动服务数据库,旧版本不应该被添加回Open With 列表,除非您正在做一些事情来触发重新添加。是这样吗?

【讨论】:

感谢您为我指出正确的文档。我刚刚使用 iTerm2 中的 unzip 命令解压缩了一个包含旧版本应用程序包的存档。我确保在该目录中没有打开查找器窗口。即便如此,新解压缩的应用程序也几乎立即列在“打开方式...”中。删除应用程序包并清空垃圾箱再次删除了该条目。似乎在任何地方创建新文件都会触发 Launch Services 数据库的更新。 很高兴知道!谢谢:)

以上是关于macOS 上的“打开方式”如何在内部填充?的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataAdapter 如何在内部工作?

在 VS Code 中使用 Git Bash 终端 - 如何强制它在内部打开

您如何允许在内部 Windows 身份验证 Intranet 上上传多个文件?

使用 postgresql 将第三个表与其他两个表链接以在内部具有动态填充数据

VecDeque环缓冲区如何在内部工作?

如何使用 1 个数据卷和 2 个 MacOS 版本?