例如如何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.json
和 public.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>
显然,您需要再次填写占位符。
我的申请快完成了。用户能够编辑特殊文件。现在我想提供 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.json
和 public.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>
显然,您需要再次填写占位符。