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

Cocoa 例如,TextWrangler如何在finder中生成预览?,cocoa,swift,quicklook,Cocoa,Swift,Quicklook,我的申请书快写完了。用户可以编辑特殊文件。现在我想提供Finder预览,但我被卡住了 我看了苹果关于快锁的视频,但我很困惑 例如,TextWrangler具有文件内容的可伸缩视图。这就是我想要的文件 你能告诉我怎么做吗? 到目前为止,我的知识是我必须编写一个QuickLock插件。XCode模板是c中的wirtten,所以我建议我必须使用c,而不是swift。 如果我是对的,有两个问题: -如何从文件中获取包含文本内容的滚动视图 -如何将.qlgenerator放入主项目的Contents/L

我的申请书快写完了。用户可以编辑特殊文件。现在我想提供Finder预览,但我被卡住了

我看了苹果关于快锁的视频,但我很困惑

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

你能告诉我怎么做吗?

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

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

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

<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>
CbundleDocumentTypes
CbundleTypeExtensions
json
CbundleTypeConfigile
图标_512x512@2x
CbundleTypeName
JSON文档
Cbundletypeostypes
正文
CbundleTypeRole
编辑
lsItemContentType
public.json
public.text
公共数据
公共物品
公共内容
NSDocumentClass
$(产品\模块\名称)。文档
UTExportedTypeDeclarations
Uttypecommisto
public.json
UTTypeDescription
JSON源文件
UTTypeIconFile
图标_512x512@2x
UTTypeIdentifier
public.json
Uttypetag规范
public.filename-extension
json
UtiImportedTypeDeclarations
Uttypecommisto
public.json
UTTypeDescription
JSON源文件
UTTypeIconFile
图标_512x512@2x
UTTypeIdentifier
public.json
Uttypetag规范
public.filename-extension
json
但这仍然是没有预览文本甚至没有图标的预览:

您的应用程序似乎只处理JSON文件。也就是说,它们不是JSON文件的某种特殊化

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

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

不幸的是,
public.json
符合
public.text
而不是
public.plain text
,而且系统似乎没有为此提供QuickLook预览。所以,你的文件不是免费的

您可以做的是导出一个新的UTI,它同时符合
public.json
public.plain text
。新的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。js将被解释为操作系统已经知道的JavaScript文件,并且可能默认为使用QL呈现程序进行纯文本。我必须在我的主应用程序中这样说吗?我可以说我的应用程序处理的是纯文本文件吗?一般来说,它只是Info.plist的一个补充,但是Xcode有一个用于此的UI。查看基于文档的应用程序编程指南以及TextEdit示例代码。然后查看TextWrangler的Info.plist或任何其他应用程序。如果尚未为用户安装QuickLook插件,您可能需要编写自己的QuickLook插件,并让应用程序将其安装到正确的位置(
/Library/QuickLook/
)。(取决于你想要什么样的预览)嗨,肯,谢谢你的解释。我理解第一部分,并修复了它。第二部分我在理论上理解,但在实践中有问题。你有时间给我举个例子吗。根据我的知识水平,我很难正确回答。我在答案中添加了一些示例Info.plist条目。
    <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>