怎么做,例如TextWrangler在finder中生成预览?

时间:2015-03-23 23:23:06

标签: cocoa swift quicklook

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

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

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

你能给我一个提示怎么做吗? enter image description here

到目前为止,我的知识是我必须编写一个QuickLock插件。 XCode模板在c中是wirtten,所以我建议我必须使用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>

但这仍然是没有预览文字或图标的预览: enter image description here

1 个答案:

答案 0 :(得分: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>

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