macOS SwiftUI开发:如何将自研App加入Markdown文件打开方式列表
macOS SwiftUI应用添加到Markdown文件打开方式列表配置指南
适配环境:Xcode 13.4.1、macOS 12部署目标
1. 配置文档类型声明(核心配置)
这一步是告诉系统你的应用支持打开Markdown类型文件:
- 打开Xcode项目,选中对应Target,切换到
Info配置标签 - 找到
Document Types区块,点击左下角+号新增文档类型- Name字段填:
Markdown 文档 - Types字段按顺序填入以下UTI(统一类型标识),覆盖系统识别的所有Markdown类型:
net.daringfireball.markdown(Markdown官方标准UTI,必填)public.plain-textcom.unknown.md
- 勾选
Is Editor选项,标记应用具备该类型文件的编辑能力 - Handler Rank下拉选择
Owner(作为主编辑器优先展示),如果仅作为备选编辑器可选Alternate - 可在Icon区域自定义md文件关联的显示图标,留空则使用系统默认图标
- Name字段填:
2. 补充导入UTI声明(兼容全场景md文件)
为了覆盖.markdown/.mdown/.mkd等非.md后缀的Markdown文件,需要补充类型声明:
- 还是在Target的
Info标签页,找到Imported UTIs区块,点击+号新增- Description填:
Markdown File - Extensions字段填入所有要关联的后缀:
md、markdown、mdown、mkd - UTI字段填:
net.daringfireball.markdown - Conforms To字段添加
public.plain-text,声明该类文件属于纯文本子类 - MIME Types填:
text/markdown
- Description填:
3. 适配SwiftUI文件打开逻辑
配置完类型声明后,需要让应用能响应系统的文件打开请求,分两种场景处理:
- 如果你用SwiftUI原生
DocumentGroup做文档管理,不需要额外写代码,系统会自动处理文件加载,示例结构:
@main struct MarkdownEditorApp: App { var body: some Scene { DocumentGroup(newDocument: MarkdownDocument()) { file in EditorView(document: file.$document) } } }
- 如果你用自定义
WindowGroup实现编辑器逻辑,需要添加onOpenURL修饰符接收文件路径,注意处理沙盒权限:
@main struct MarkdownEditorApp: App { var body: some Scene { WindowGroup { EditorView() .onOpenURL { fileURL in // 获取沙盒外文件的访问权限 guard fileURL.startAccessingSecurityScopedResource() else { return } defer { fileURL.stopAccessingSecurityScopedResource() } // 读取文件内容、加载到编辑器的业务逻辑 do { let content = try String(contentsOf: fileURL, encoding: .utf8) // 把内容传递给视图模型即可 } catch { print("文件读取失败: \(error.localizedDescription)") } } } } }
4. 刷新系统打开方式缓存
配置完成编译App后,把生成的.app文件拖到「应用程序」文件夹,打开终端执行以下命令重建Launch Services数据库缓存,让配置立刻生效:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/你的应用名称.app
执行完成后右键点击任意md文件,就能在「打开方式」列表里看到你的应用了。
常见问题排查:如果刷新后还是不显示,优先检查Document Types里的UTI是否填写正确,
net.daringfireball.markdown不能漏填;调试阶段Xcode每次重新编译会改变App的缓存路径,重复执行上述lsregister命令即可重新关联。
内容的提问来源于stack exchange,提问作者Cary
相关产品推荐
相关产品推荐

