如何配置macOS Swift应用使其出现在所有文件的「Open With」菜单?
如何让Swift macOS应用出现在所有文件的「Open With」右键菜单中
首先明确:通过配置UTI(Uniform Type Identifier)实现目标是可行的,你的当前配置存在几个需要调整的地方,同时需要处理系统缓存问题,以下是具体解决方案:
1. 修正Info.plist配置
public.item是涵盖所有文件、文件夹等项目的顶层UTI,但仅配置它还不够,需要补充相关参数确保系统识别:
替换你的现有配置为以下内容(注意替换YourDocumentClass为你实际的NSDocument子类):
<key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeName</key> <string>Any File</string> <key>CFBundleTypeRole</key> <string>Editor</string> <key>LSHandlerRank</key> <string>Alternate</string> <key>LSItemContentTypes</key> <array> <string>public.item</string> <string>public.data</string> </array> <key>NSDocumentClass</key> <string>$(PRODUCT_MODULE_NAME).YourDocumentClass</string> <key>LSSupportsOpeningDocumentsInPlace</key> <true/> </dict> </array>
关键调整说明:
LSHandlerRank设为Alternate:避免将应用设为所有文件的默认打开方式,仅作为可选选项出现在「Open With」菜单中,符合需求。- 添加
public.data:覆盖所有文件数据类型,与public.item配合确保所有文件都能识别你的应用。 NSDocumentClass:必须指定正确的文档类(如果使用系统默认NSDocument,可写为$(PRODUCT_MODULE_NAME).NSDocument),否则系统会忽略该配置。LSSupportsOpeningDocumentsInPlace:启用后允许应用直接打开原位置文件,是「Open With」菜单识别应用的关键标识。
2. 重置Launch Services缓存
系统的Launch Services缓存可能导致新配置不生效,执行以下命令重置缓存:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
执行完成后,重启应用或系统。
3. 测试注意事项
- 不要直接从Xcode启动测试:建议从Build文件夹的
.app包右键选择「打开」,或归档导出应用后测试,避免Xcode调试环境干扰配置识别。 - 查看完整菜单:右键文件时按住
Option键,可显示完整的「Open With」列表,确认应用是否出现。
内容的提问来源于stack exchange,提问作者Stephan
相关产品推荐
相关产品推荐

