OSXのQuickLook。FinderでSpaceキーを押すだけでざっくりファイルの詳細がわかるQuickLookが便利過ぎ。テキストでも画像でも音声でもモデルデータでも対応してればなんでも見られる。
という訳で、以下QuickLookプラグインを自作する為のメモ書き。
実はQuickLookプラグインの雛形はXcodeに入っています。
File→New→Projectと操作して表示される雛形から選ぶだけでよい。
- GeneratePreviewForURL.c
QuickLook時に独自のプレビューを生成する
関数GeneratePreviewForURLにて実装 - GenerateThumbnailForURL.c
ファイルを選んだ時に独自サムネイルを生成する
関数GenerateThumbnailForURLにて実装
主に触るのはこの2つ。Objective-Cで書きたい人は拡張子を.c→.mにしておく。
続いて、対象ファイルを決める。雛形のinfo.plistの、SUPPORTED_UTI_TYPEと書いてある場所に、QuickLook対象のUTIを書き込む。
UTIはOSXのファイルの種類を決定する識別子。これはコンソールで
mdls hoge.txt
として表示されるhoge.txt(実在するファイルである事!!)の情報の中の
kMDItemContentTypeと、kMDItemContentTypeTreeがUTIを指していると思われる。
といっても、大抵の場合はファイルの拡張子で事足りる。その場合は以下のようにinfo.plistに書く。
まず、一番上の階層にImported Type UTIsを追加。必須項目も一緒に追加されるので、Conforms to UTIsに(たぶん)システムで定義済みのUTIを書く。public.textとかpublic.imageとか、プレビューしたい書類のおおまかな分類を決める。 ⇒システム定義のUTI
続いてIdentifierに、他と被りそうにない識別子を書く。
Equivalent Typesにpublic.filename-extensionを追加。対応したいファイルの拡張子を書く(Arrayなので複数対応も可)。
最後に、Descriptionを追加してファイルの簡単な説明を追加。
それができたら、はじめに説明したSUPPORTED_UTI_TYPEをIdentifierで決めた識別子に置き換えて完了!!
続いて、テスト環境の設定。
QuickLookプラグインは直接起動できないので、ビルド時に所定のフォルダにコピーする必要がある。
TARGETSの対象ターゲット→Build Phasesと操作。
続いてEditor→Add Build Phase→Add Copy Files Build Phaseと操作してコピーフェーズを追加。
続いてEditor→Add Build Phase→Add Copy Files Build Phaseと操作してコピーフェーズを追加。
DistinationをAbsolute Pathに変更。
Pathは ~/Library/QuickLook と入力(ディレクトリが存在しない場合は作っておく)
※OSXを使う全ユーザーを対象にしたいなら、ここは /Library/QuickLook にする。
最後に「+」を押して、コピーするファイル(今回はQuickLookプラグイン)を追加。
Schemeにテスト実行の手順を追加。
Run→Run→Infoと操作。
Executableに /usr/bin/qlmanageを追加。これはあらかじめFinderで/usr/binを表示しておき、そのフォルダをドラッグアンドドロップすると楽。
Executableに /usr/bin/qlmanageを追加。これはあらかじめFinderで/usr/binを表示しておき、そのフォルダをドラッグアンドドロップすると楽。
Argumentsタブ、Arguments Passed On Launchに-p hoge.txtと入力。hoge.txtはQuickLook対象ファイル。パスが通っていないとプレビューできないので~/Documents/hoge.txtなどと書く事。
サムネイルの動作チェックの場合はArguments Passed On Launchに-t hoge.txtと書く。
その他のqlmanageの動作は、コンソールで
として確認できる。
qlmanage -h
として確認できる。
試しにこんな感じにプログラムを書いてビルド→実行してみて、コンソールにNSLogの結果が表示されたらオッケィ!!
ビルドされたQuickLookプラグインは~/Library/QuickLookにコピーされ、qlmanage経由で起動される仕組みになっている。
実装の詳細については以下の情報を参照すべし。プログラミングにも近道は無い!!
- Quick Lookプログラミングガイド(日本語 2007年)を参照
- XcodeのHelp→Documentation and API ReferenceでGeneratePreviewForURLとかGenerateThumbnailForURLとかで検索する
- Githubで公開されている先人たちのQuickLookプラグインを参考にする