【问题标题】:How does e.g. TextWrangler generates the preview in finder?例如如何TextWrangler 在 finder 中生成预览?
【发布时间】:2015-03-23 23:23:06
【问题描述】:

我的申请差不多完成了。用户可以编辑特殊文件。现在我想提供一个 Finder 预览,但我卡住了。

我观看了有关 Quick Lock 的苹果视频,但我很困惑。

例如,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>

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

【问题讨论】:

  • 部分取决于UTI
  • .js 将被解释为操作系统已经知道的 JavaScript 文件,并且可能默认使用 QL 渲染器来处理纯文本。
  • 我必须在我的主应用程序中说出来吗?我可以说我的应用程序处理的是纯文本文件吗?
  • 通常它只是对 Info.plist 的补充,但 Xcode 有一个 UI 用于此。查看基于文档的应用程序编程指南以及 TextEdit 示例代码。然后查看 TextWrangler 的 Info.plist 或任何其他应用程序。
  • 如果尚未为用户安装 QuickLook 插件,您可能需要编写自己的 QuickLook 插件并让您的应用将其安装到正确的位置 (/Library/QuickLook/)。 (取决于你想要什么样的预览)

标签: cocoa swift quicklook


【解决方案1】:

您的应用似乎只适用于 JSON 文件。也就是说,它们不是 JSON 文件的某种特化。

因此,您不应尝试导出任何 UTI。您正在使用系统定义的 UTI,并且不应导出它们。您只需导入它们。 (导出 UTI 意味着您正在尝试定义 UTI。这与您的应用可以写入/保存的文件类型无关。)

然后,在您的 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>

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

【讨论】:

  • 嗨,肯,感谢您的解释。我理解第一部分,并修复它。第二部分我在理论上理解,但在实践中存在问题。你有时间给我举个例子。以我的知识水平,我很难做到这一点。
  • 我在答案中添加了一些示例 Info.plist 条目。
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2018-03-29
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
相关资源
最近更新 更多