自前のUTIを定義(とりあえずpublic.dataから継承)して,そのためのMDImporterを作ってメタデータを作成。

これで自前のデータ形式をSpotlightで検索できる。


ファイル名と,検索結果の表示を変えるには,kMDItemDisplayNameを設定すればいい。
kMDItemDisplayNameの内容が検索結果に表示される。

しかし,このやり方では問題がある。

検索結果を表示し,結果の名前部分をシングルクリックまたはReturnキーを押すと,普段のFinderと同じようにファイル名編集モードに入る。
そのときのファイル名はkMDItemDisplayNameのものになっているから,Return→Returnとするだけで,本来のファイル名がkMDItemDisplayNameの内容に書き変わってしまう。
また,ファイル名編集モードに入った覚えがなくても勝手にファイル名が変わってしまうということもあった。


kMDItemDisplayNameは日本語やファイル名にふさわしくない文字を含んでいるかもしれないし,他のファイルと同じ内容が入っているかもしれないので,この挙動は危険である。
そもそも,アプリ側またはユーザ側の都合によって,ファイル名を変えたくないこともある。

問題が発生しない場合もある。

例えば,Safariのブックマークの検索結果。
kMDItemDisplayNameによって,ファイル名と検索結果の表示が変わっているが,検索結果の上でファイル名を変更することができない。また,パスバーにファイルパスが表示されない。

この違いがどこから発生するかは謎だけれど,

どうやらFinder.appやSpotlight.app内部のMDOperationsAllowed.plistとか,CoreServices.frameworkのMetadata.framework内部のMDPredicate.plistに直接書かれている様子。
これ以外に関連するファイルをまだ見つけられていないので,ハックにならない通常のカスタマイズができるのか分からない。

正しいやり方は分からないけれど,とりあえずファイル名が勝手に変わるのを防ぐには,

自前のUTIをcom.apple.safari.bookmarkから継承するように変更すればいい。
これで検索結果でファイル名の編集が出来無くなるし,ファイルパスの表示も無くなる。
もちろんSpotlightの検索結果では,Webpagesのカテゴリに表示されることになる。


このUTIはどうみてもブックマークじゃないなと思ったら,他の,検索結果でファイルパスが表示されないUTIから継承するようにすればいい。MDOperationsAllowed.plistが参考になるかもしれない。
いい継承元UTIが見つからなければ,諦めるしか。