ファインダだけでなく他のアプリへもドラッグ&ドロップできるようにしよう。
ペーストボード(NSPasteboard)へ他のデータタイプも登録する。
NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[pboard declareTypes:[NSArray arrayWithObjects:NSFilesPromisePboardType, NSFilenamesPboardType, NSTIFFPboardType, nil] owner:self];
[pboard setPropertyList:[NSArray arrayWithObject:[filename pathExtension]]
forType:NSFilesPromisePboardType];
[pboard setData:[image TIFFRepresentation] forType:NSTIFFPboardType];
[pboard setPropertyList:[NSArray arrayWithObject:filename]
forType:NSFilenamesPboardType];
これで大抵のアプリへドラッグ&ドロップできるようになった。
なお Mail.app はファインダと同じくNSFilesPromisePboardTypeを使っていて添付ファイル用のフォルダへコピーすることを期待しているようだ。ドロップ時に呼出される namesOfPromisedFilesDroppedAtDestination: の引数を見ると、コピー先のURL指定はこんな感じだった。
file://localhost/private/var/folders/0d/0dNdrhYNHnqjC2KaQLPHu++++TI/-Tmp-/com.apple.mail.drag-T0x710f70.tmp.4L3Dui/
ファインダ向けのコードそのまま(ファイルを指定フォルダへコピーする)でうまく動いた。