Xcode 4.6 で QuickLook Plug-In を作る手順

先日初めて QuickLook Plug-In を作ったのだけど、Web 上にある日本語の情報がどれも古くてちょっと大変だったので、とりあえず現状で最新の Xcode 4.6 を使った場合の手順をメモ。


因に作ったプラグインはこれ。

QuickLook Plug-In を作る手順

1. Xcode の [File]->[New]->[Project...] で「OS X」の「System Plug-in」から「Quick Look Plug-In」を選択

2. 作成されたプロジェクトの GenerateThumbnailForURL.c と GeneratePreviewForURL.c の拡張子を .m に変更


3. サポートするファイルの拡張子を Info.plist で指定
ここで 2つのルートに分かれる。


a. 自分の作ったアプリケーション独自のファイルでないファイルをサポートする場合(例えば .png や .json 等)
その場合には既にほぼ設定がされているので簡単。
CFBundleDocumentTypes の LSItemContentTypes にある SUPPORTED_UTI_TYPE をサポートするファイルのものに変更するだけで OK。
今回は .json をサポートするプラグインを作成するので、ここには「public.json」と入力。因に .png なら「public.png」になる。

もしどうすれば良いのかわからない場合は mdls コマンドで確認できる。
.json のファイルを確認した様子はこんな感じ。

iMac-coreI3-27:puyoMOON paraches$ mdls /Users/paraches/Desktop/enchantMOON_base/develop/puyo/puyoMOON/info.json 
kMDItemContentCreationDate     = 2013-08-22 05:53:32 +0000
kMDItemContentModificationDate = 2013-08-22 05:53:32 +0000
kMDItemContentType             = "public.json"
kMDItemContentTypeTree         = (
    "public.json",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2013-09-02 03:26:22 +0000
kMDItemDisplayName             = "info.json"
kMDItemFSContentChangeDate     = 2013-08-22 05:53:32 +0000
kMDItemFSCreationDate          = 2013-08-22 05:53:32 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "info.json"
kMDItemFSNodeCount             = 47284
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 501
kMDItemFSSize                  = 47284
kMDItemFSTypeCode              = ""
kMDItemKind                    = "JSON File"
kMDItemLogicalSize             = 47284
kMDItemPhysicalSize            = 49152
iMac-coreI3-27:puyoMOON paraches$ 

というわけで、kMDItemContentType の「puboic.json」を選択することになる。


b. 自分の作ったアプリケーションのファイルをサポートする場合
自分のアプリケーションでドキュメント用に設定した値を設定する。
UTImportedTypeDeclarations と CFBundleDocumentTypes を設定すれば良いのかな?
上記「参考にしたページ」のリンク先に結構詳しく書いてある。


4. プロジェクトに Cocoa framework を追加

5. GeneratePreviewForURL.m/GenerateThumbnailForURL.m に Import を追加

以上で、QuickLook Plug-In を作成するプロジェクトの準備は完了!
でも、このままコードを書き始めてもデバッグが辛いので、デバッグをサクっとできるようにしてみる。

QuickLook Plug-In のデバッグを Xcode で行う方法

Xcode で QuickLook Plug-In のデバッグを行う仕組みはこんな感じ。
1. Xcode で「Run」する
2. プラグインがビルドされる
3. 自動的に「qlmanage」が起動してビルドされたプラグインにテスト用ドキュメントを指定してプラグインが起動
4. 画面にテスト用ドキュメントが QuickLook を使用して表示される


というわけで、設定の手順は以下の通り。
1. プロジェクトの scheme から「Run」を選択して「Info」タブで「Executable」に「qlmanage」を選択

「qlmanage」は「/usr/bin」フォルダにあるので、Finder で開いておいてから「Executable」のファイル選択ダイアログを表示して「qlmanage」を選択すると簡単。


2. 「Arguments」タブで「Arguments Passed On Launch」に「+」をクリックして項目を追加
増やす内容は「-p テスト用ファイルの path」。

自分の場合はホームディレクトリに「info.json」を置いたので「-p ~/info.json」とした。
(サムネイルのテスト用は「-t テスト用ファイルの path」を入力する。)


3. プロジェクトの TARGETS を選択して「Build Phases」タブを表示、右下の「+Add Build Phase」から「Copy Files」を選択
「Copy Files」で「+」をクリックして「Destination」を「Absolute Path」、「Subpath」を「~/Library/QuickLook」とする。

QuickLook のプラグインを作ろうとする人が自分のライブラリに「QuickLook」フォルダを作ってないとは思わないけど、ない場合は作る。


以上で「Run」するとビルドされて qlmanage が QuickLook 画面を表示してくれる。


後は GenerateThumbnailForURL.m と GeneratePreviewForURL.m に、サムネイル/プレビュー表示用のコードを書いていけば OK!
その辺りは Xcode のバージョンによらないので、上記「参考にしたページ」を参照して日の丸表示する辺りからあれこれやってみれば簡単なはず。