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 上的“打开方式”如何在内部填充?的主要内容,如果未能解决你的问题,请参考以下文章
在 VS Code 中使用 Git Bash 终端 - 如何强制它在内部打开
您如何允许在内部 Windows 身份验证 Intranet 上上传多个文件?