我正在学习Objective-C和Cocoa,我认为创建简单的程序来满足我的需求将是一件好事。我已经拥有一个可靠的.NET C#背景,一些Python知识和一些C。
我尝试做的一个“简单的第一个应用程序”是一个简单的QuickLook插件,用于Arduino的草图文件。我认为这将是一个简单的任务,因为这些文件是纯文本C类脚本,唯一“不同”的东西是它们有.pde扩展名。
我在ArduinoQuickLook上的GitHub上传了项目作为参考(第一个提交包含一个vanilla Xcode 4.1 QuickLook插件项目)。
环顾网络我找到了这些资源:
他们都使用 GeneratePreviewForURL.m 和 GenerateThumbnailForURL.m 文件,但是当我在Xcode 4.1中创建项目时,它创建了 GeneratePreviewForURL.c 和 GenerateThumbnailForURL.c (注意.c而不是.m)。
QLStephen和QLColorCode都在其 GeneratePreviewForURL.m 和 GenerateThumbnailForURL.m 文件中使用#import <Foundation/Foundation.h>
,但如果我尝试{{1}它会产生很多错误。 (也许是因为我的文件是.c而不是.m?)
我不清楚我如何声明我的插件将处理哪些文件,我知道我需要更改ArduinoQuickLook/ArduinoQuickLook-Info.plist(第14行),但我必须在那里写些什么?像#import
?
答案 0 :(得分:4)
这tutorial on creating a Quicklook plugin很好地解释了事情,但总结一下:
第1点和第2点是相关的 - 由于某些奇怪的原因,Quicklook插件模板只包含.c
个文件 - 因此,导入Obj-C Foundation.h
标头会导致错误。
您应该能够将文件从.c
重命名为.m
,它将按预期工作。
我不清楚如何声明我的插件将处理哪些文件
你需要做两件事 - 一个是说你的插件处理的UTI(统一类型标识符)(例如cc.arduino.pde
),通过改变你提到的那一行:
<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>
答案 1 :(得分:2)
以下是为Processing和Arduino .pde文件提供QuickLook的项目的源代码:https://github.com/kroko/ProcessingQL我知道这个问题已有一年了,但是这个项目可能对尝试此操作的其他人有帮助。