2

背景

我正在学习 Objective-C 和 Cocoa,我认为创建简单的程序来满足我的需求将是一件好事。我已经具备扎实的 .NET C# 背景、一些 Python 知识和一点 C。

我尝试做的一个“简单的第一个应用程序”是一个用于Arduino草图文件的简单 QuickLook 插件。我认为这将是一项简单的任务,因为这些文件是纯文本类 C 脚本,唯一“不同”的是它们具有 .pde 扩展名。

我在ArduinoQuickLook的GitHub 上上传了该项目作为参考(第一个提交包含一个 vanilla Xcode 4.1 QuickLook 插件项目)。

我发现了什么

环顾网络,我发现了这些资源:

我有什么问题

  1. 它们都使用GeneratePreviewForURL.mGenerateThumbnailForURL.m文件,但是当我在 Xcode 4.1 中创建项目时,它创建了GeneratePreviewForURL.cGenerateThumbnailForURL.c(注意 .c 而不是 .m)。

  2. QLStephen 和 QLColorCode 都#import <Foundation/Foundation.h>在它们的GeneratePreviewForURL.mGenerateThumbnailForURL.m文件中使用,但如果我尝试#import它会产生很多错误。(也许是因为我的文件是 .c 而不是 .m?)

  3. 我不清楚我如何声明我的插件将处理哪些文件,我知道我需要更改ArduinoQuickLook/ArduinoQuickLook-Info.plist(第 14 行)但我必须在那里写什么?像cc.arduino.pde什么?

4

2 回答 2

4

这个关于创建 Quicklook 插件的教程很好地解释了事情,但总结一下:

第 1 点和第 2 点是相关的——出于某种奇怪的原因,Quicklook 插件模板只包含.c文件——因此,导入 Obj-CFoundation.h标头会导致错误。

您应该能够将文件从 to 重命名.c.m它将按预期工作。

我不清楚我如何声明我的插件将处理哪些文件

您需要做两件事 - 一是cc.arduino.pde通过更改您提到的行来说明您的插件处理的 UTI(统一类型标识符)(例如):

<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>QLGenerator</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>cc.arduino.pde</string>
        </array>
    </dict>
</array>

...但您还必须描述该 UTI(主要是为了将文件扩展名映射到该 UTI)

声明 UTI 有两种略有不同的方法,[如“声明新的统一类型标识符”]所述:

您的 UTI 声明必须是导入或导出的:

  • 导出的 UTI 声明意味着该类型可供所有其他方使用。例如,使用专有文档格式的应用程序应将其声明为导出的 UTI。
  • 导入的 UTI 声明用于声明捆绑包不拥有但希望在系统上看到可用的类型。例如,假设视频编辑程序使用专有格式创建文件,其 UTI 在其应用程序包中声明。如果您正在编写可以读取此类文件的应用程序或插件,则必须确保系统知道专有的 UTI,即使实际的视频编辑应用程序不可用。为此,您的应用程序应在其自己的包中重新声明 UTI,但将其标记为导入声明。

对于 Quicklook 插件,您可能需要一个“导入的”UTI 声明,您可以在其中将类似这样的内容添加到 Info.plist:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>cc.arduino.pde</string>
        <key>UTTypeReferenceURL</key>
        <string>http://www.example.com</string>
        <key>UTTypeDescription</key>
        <string>Arduino PDE file</string>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.c-source</string>
            <string>public.text</string>
        </array>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>pde</string>
            </array>
        </dict>
    </dict>
</array>
于 2012-07-07T19:02:49.230 回答
2

这是为 Processing 和 Arduino .pde 文件提供 QuickLook 的项目的源代码:https ://github.com/kroko/ProcessingQL 我知道这个问题已经有一年的历史了,但是这个项目可能对其他尝试这个的人有帮助。

于 2012-11-29T18:55:52.410 回答