例如如何TextWrangler 在 finder 中生成预览?

How does e.g. TextWrangler generates the preview in finder?

我的申请快完成​​了。用户能够编辑特殊文件。现在我想提供 Finder 预览,但我卡住了。

我看了有关快速锁定的苹果视频,但我很困惑。

例如,TextWrangler 具有文件内容的可滚动视图。这就是我想要的文件。

你能告诉我怎么做吗?

到目前为止,我的知识是我必须编写一个 QuickLock 插件。 XCode 模板是用 c 编写的,所以我建议我必须使用 c,而不是 swift。 如果我是对的两个问题: - 如何从文件中获取带有文本内容的滚动视图 - 如何将 .qlgenerator 放入我的主项目的 Contents/Library/.. 文件夹中?

非常感谢您的帮助。两天的阅读并不总是能弄清楚事情的方法。

*** 更新 ** 这是我的 info.plist CFBundleDocumentTypes

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>json</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon_512x512@2x</string>
        <key>CFBundleTypeName</key>
        <string>JSON Document</string>
        <key>CFBundleTypeOSTypes</key>
        <array>
            <string>TEXT</string>
        </array>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.json</string>
            <string>public.text</string>
            <string>public.data</string>
            <string>public.item</string>
            <string>public.content</string>
        </array>
        <key>NSDocumentClass</key>
        <string>$(PRODUCT_MODULE_NAME).Document</string>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.json</string>
        </array>
        <key>UTTypeDescription</key>
        <string>JSON source file</string>
        <key>UTTypeIconFile</key>
        <string>Icon_512x512@2x</string>
        <key>UTTypeIdentifier</key>
        <string>public.json</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>json</string>
            </array>
        </dict>
    </dict>
</array>
<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.json</string>
        </array>
        <key>UTTypeDescription</key>
        <string>JSON source file</string>
        <key>UTTypeIconFile</key>
        <string>Icon_512x512@2x</string>
        <key>UTTypeIdentifier</key>
        <string>public.json</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>json</string>
            </array>
        </dict>
    </dict>
</array>

但这仍然是没有预览文字甚至图标的预览:

您的应用似乎只能处理 JSON 个文件。也就是说,它们不是 JSON 文件的一些特化。

因此,您不应尝试导出任何 UTI。您正在使用系统定义的 UTI,您不应导出它们。你只需导入它们。 (导出 UTI 意味着您正在尝试定义 UTI。这与您的应用程序可以使用哪些类型的文件无关write/save。)

然后,在您的 LSItemContentTypes 数组中,只列出 public.json。您的应用无法打开任意 文本、数据或内容。它只能打开 JSON 数据。所以,就列出来吧。

不幸的是,public.json 符合 public.text 而不是 public.plain-text 并且系统似乎没有为此提供 QuickLook 预览。因此,您的文件不会免费获得。

您可以做的是导出一个同时符合 public.jsonpublic.plain-text 的新 UTI。您的新 UTI 应该使用不同的文件扩展名,以区别于系统定义的 public.json 的扩展名。然后,将字典添加到 CFBundleDocumentTypes,其中包含您的独特文档类型的详细信息。这样,您的应用仍然可以导入 .json 文件以及您的自定义文档类型。我希望只有您的自定义类型才能获得 QuickLook 预览。

例如,您可以将其放入 UTExportedTypeDeclarations 数组中:

    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.json</string>
            <string>public.plain-text</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Your Document Type Description</string>
        <key>UTTypeIconFile</key>
        <string>Icon_512x512@2x</string>
        <key>UTTypeIdentifier</key>
        <string>com.yourcompany.yourapp.yourdocumenttypename</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>yourdocumentextension</string>
            </array>
        </dict>
    </dict>

您必须填写我放入的各种占位符,因为我不知道什么是好的值。您会发明一个对您的应用程序有意义的文件扩展名。同样,你会根据你公司的反向域名发明一个 UTI,类似于你的包标识符。

然后,将其添加到 CFBundleDocumentTypes 数组作为第一个元素:

    <dict>
        <key>CFBundleTypeExtensions</key>
        <array>
            <string>yourdocumentextension</string>
        </array>
        <key>CFBundleTypeIconFile</key>
        <string>Icon_512x512@2x</string>
        <key>CFBundleTypeName</key>
        <string>Your Document Type Description</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.yourcompany.yourapp.yourdocumenttypename</string>
        </array>
        <key>NSDocumentClass</key>
        <string>$(PRODUCT_MODULE_NAME).Document</string>
    </dict>

显然,您需要再次填写占位符。