photo01

今日もコード書いてる??

OSXのQuickLook。FinderでSpaceキーを押すだけでざっくりファイルの詳細がわかるQuickLookが便利過ぎ。テキストでも画像でも音声でもモデルデータでも対応してればなんでも見られる。

んで、そのQuickLookって自作できるんだね!!自分で作れる事を知ってプチブームです。でした。

GitHubで公開中⇒tek-nishi/QLOgg 

という訳で、以下QuickLookプラグインを自作する為のメモ書き。


実はQuickLookプラグインの雛形はXcodeに入っています。

photo02
File→New→Projectと操作して表示される雛形から選ぶだけでよい。

photo03
  • GeneratePreviewForURL.c
    QuickLook時に独自のプレビューを生成する
    関数GeneratePreviewForURLにて実装
  • GenerateThumbnailForURL.c
    ファイルを選んだ時に独自サムネイルを生成する
    関数GenerateThumbnailForURLにて実装 
主に触るのはこの2つ。Objective-Cで書きたい人は拡張子を.c→.mにしておく。

photo04
続いて、対象ファイルを決める。雛形のinfo.plistの、SUPPORTED_UTI_TYPEと書いてある場所に、QuickLook対象のUTIを書き込む。

UTIはOSXのファイルの種類を決定する識別子。これはコンソールで

mdls hoge.txt 

として表示されるhoge.txt(実在するファイルである事!!)の情報の中の
kMDItemContentTypeと、kMDItemContentTypeTreeがUTIを指していると思われる。

といっても、大抵の場合はファイルの拡張子で事足りる。その場合は以下のようにinfo.plistに書く。

photo06
まず、一番上の階層にImported Type UTIsを追加。必須項目も一緒に追加されるので、Conforms to UTIsに(たぶん)システムで定義済みのUTIを書く。public.textとかpublic.imageとか、プレビューしたい書類のおおまかな分類を決める。 ⇒システム定義のUTI

続いてIdentifierに、他と被りそうにない識別子を書く。

Equivalent Typesにpublic.filename-extensionを追加。対応したいファイルの拡張子を書く(Arrayなので複数対応も可)。

最後に、Descriptionを追加してファイルの簡単な説明を追加。

photo05
それができたら、はじめに説明したSUPPORTED_UTI_TYPEをIdentifierで決めた識別子に置き換えて完了!!


続いて、テスト環境の設定。

QuickLookプラグインは直接起動できないので、ビルド時に所定のフォルダにコピーする必要がある。
 
photo07
TARGETSの対象ターゲット→Build Phasesと操作。

photo08
続いてEditor→Add Build Phase→Add Copy Files Build Phaseと操作してコピーフェーズを追加。

photo09
DistinationをAbsolute Pathに変更。
Pathは ~/Library/QuickLook と入力(ディレクトリが存在しない場合は作っておく)
※OSXを使う全ユーザーを対象にしたいなら、ここは /Library/QuickLook にする。
最後に「+」を押して、コピーするファイル(今回はQuickLookプラグイン)を追加。

photo10
Schemeにテスト実行の手順を追加。
 
photo11
Run→Run→Infoと操作。

photo12
Executableに /usr/bin/qlmanageを追加。これはあらかじめFinderで/usr/binを表示しておき、そのフォルダをドラッグアンドドロップすると楽。

photo13
Argumentsタブ、Arguments Passed On Launchに-p hoge.txtと入力。hoge.txtはQuickLook対象ファイル。パスが通っていないとプレビューできないので~/Documents/hoge.txtなどと書く事。

サムネイルの動作チェックの場合はArguments Passed On Launchに-t hoge.txtと書く。

その他のqlmanageの動作は、コンソールで

qlmanage -h

として確認できる。

photo14
試しにこんな感じにプログラムを書いてビルド→実行してみて、コンソールにNSLogの結果が表示されたらオッケィ!!

ビルドされたQuickLookプラグインは~/Library/QuickLookにコピーされ、qlmanage経由で起動される仕組みになっている。

実装の詳細については以下の情報を参照すべし。プログラミングにも近道は無い!!

オマケ

Finderのファイルアイコンもいい感じにサムネイル内容にしたい場合。
photo1
plistで定義されているQuick Look thumbnail minimum sizeの値を小さくしておけば、Finderでいい感じに表示される…かも。
photo2
こんなかんじにね。


ではまた次回。