macOS保存TextClipping格式文件
macOS保存TextClipping格式文件

macOS保存TextClipping格式文件

textClipping 是 macOS(源自早期 Mac OS)拖选/拖拽文本生成的一种“剪辑”文件格式:当你在某个 App(如 TextEdit、Safari、Pages……)选中文本,拖到桌面或 Finder 窗口,就会生成 .textClipping 文件。 

实现方法

1、Xcode导入GitHub仓库TextClippingKit:https://github.com/dagronf/TextClippingKit

2、TextClippingKit保存方法:

// 字符串生成 TextClipping 格式的数据
let data = try TextClipping.Encode("This is a test")

// 将富文本写入 TextClipping 文件
let ats = NSAttributedString(...)
try TextClipping.Encode(ats, to: ...some file URL...)

使用示例

拖拽到访达并创建富文本内容的TextClipping格式文件的示例:

struct ContentView: View {
    let attributed: NSAttributedString = {
            let s = NSMutableAttributedString(string: "Hello Clipping!", attributes: [
                .font: NSFont.boldSystemFont(ofSize: 18),
                .foregroundColor: NSColor.red
            ])
            return s
        }()
    
    var body: some View {
        Text("Hello Clipping")
            .padding()
            .background(Color.yellow)
            .onDrag {
                // 1. 生成 textClipping Data
                guard let clipData = try? TextClipping.Encode(attributed) else {
                    return NSItemProvider()
                }

                // 2. 写入临时目录
                let tempURL = FileManager.default.temporaryDirectory.appendingPathComponent("clip.textClipping")
                try? clipData.write(to: tempURL)

                // 3. 使用 NSItemProvider 提供文件 URL
                return NSItemProvider(contentsOf: tempURL)!
            }
    }
}

使用TextClipping.Encode方法创建 TextClipping Data数据,将该数据写入到临时目录,使用NSItemProvider(contentsOf:_)方法返回文件URL。

最终的效果是,通过拖拽的形式,保存富文本内容为TextClipping格式文件。

总结

textClipping 本质上是 macOS 的一种剪贴/拖拽历史遗留文件格式,它封装了文本(可能带样式)+ Metadata(metadata / resource fork / multiple representations)。

现代 macOS 很少使用 resource fork,新应用 / 沙盒环境对 resource fork 支持有限 / 不推荐 — 这意味着不能指望以标准 Swift Data API 生成一个完全兼容、在所有 macOS 版本上都能被认作 textClipping 的文件。

对多数现代应用而言,更推荐使用 RTF / HTML /普通文本 /文件 URL 这种方式 — 因为它们有明确 UTI(Uniform Type Identifier)、有标准 API 支持(RTF via NSAttributedString, HTML via Data, etc.),而 textClipping 属于“怪异兼容 / 历史废工”。

参考链接

1、GitHub TextClippingKit:https://github.com/dagronf/TextClippingKit

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注