I’ve been searching for some decent documentation on how to create a Quick Look plugin. It took me several months before I finally found a way to develop the plugin. With many thanks to a soon to be released book by The Big Nerd Ranch.
For those wondering on what Quick Look does, here is Apple’s explanation.
In this blog post I’ll show you how to…
create a simple Quick Look plugin
support a custom file type
debug your plugin with Xcode
Setup your Xcode project
Now let’s start developing!
Create a new Quick Look project
Change the extension for both
GeneratePreviewForURL.cto .m. (This allows you to use Objective-C code and frameworks in these files)
Support an extension
In this example I want to support the
.10to1 extension so that I can preview this file as a text file.
Below is an example on what you have to add to the
Info.plist to support the
<key>UTImportedTypeDeclarations</key> <array> <dict> <key>UTTypeIdentifier</key> <string>be.10to1.quicklook</string> <key>UTTypeDescription</key> <string>10to1 document</string> <key>UTTypeConformsTo</key> <array> <string>public.data</string> </array> <key>UTTypeTagSpecification</key> <dict> <key>public.filename-extension</key> <array> <string>10to1</string> </array> </dict> </dict> </array> <key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>QLGenerator</string> <key>LSItemContentTypes</key> <array> <string>be.10to1.quicklook</string> </array> </dict> </array>
Be aware, the default project template for a Quick Look plugin already has the following line of code included in the plist.
<key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>QLGenerator</string> <key>LSItemContentTypes</key> <array> <string>SUPPORTED_UTI_TYPE</string> </array> </dict> </array>
If you want to create a plugin for an existing UTI type, you just have to change
SUPPORTED_UTI_TYPE string with for example public.png for a PNG image.
But if your plugin supports a non existing UTI type you have to define it in the plist under the
UTImportedTypeDeclarations key. If you want to find out to what UTI type your file conforms to, just use the
mdsl executable and you’ll find the UTI type(s) in key
More information can be found here.
Render the preview
This is the view shown after the space button is pressed. This will display the content of the
Add the Cococa framework
Add some generation code inside the
GeneratePreviewForURLfunction as done in this file
Render the thumbnail
This is the icon with a generated content that is shown in your Finder window.
Add the WebKit framework
Add some generation code inside the
GenerateThumbnailForURLfunction as done in this file
But how do we debug a Quick Look plugin? You can’t just run it as an executable. Therefore we use
qlmanage provided by Apple.
We first have to copy the plugin to
~/Library/QuickLook after a successfull build, otherwise your plugin will not run correctly with Xcode.
Add a New Copy Files build phase to your target
Select Absolute Path and enter ~/Library/QuickLook as the Subpath
Add the generated file to the files list
Run the plugin using
- Because you can’t select qlmanage in the Finder you have to copy the binary to your project root
cp /usr/bin/qlmanage PROJECT_ROOT/.
Edit your scheme and select the Run/Info tab
Select the qlmanage executable in your project root
In the Run/Arguments tab you can add the folling
Arguments Passed On Launchto render the preview:
Next up, run the application and the
dummy.10to1 file will be used as the selected file.
To test the thumbnail generation you could to the same, add the same argument but with
-t in the Arguments tab:
But this didn’t to the trick (I have no idea why…), so you can manually run this command in your Terminal in order to test the preview generation:
qlmanage -t dummy.10to1
After all this we have created our Quick Look plugin.
If you want do distribute the plugin, just Archive & Save it.
.10to1 file and enjoy the plugin! :)
- Reload the Quick Look generator list
- List the UTI types for the given file, very handy when defining your supported UTI format