Dockアイコンにドロップされたファイルを処理する

Non Document-basedアプリケーションで、Dockアイコンにファイルをドラッグ&ドロップできるように実装しようとしたら、意外と情報が見つからず苦労したのでまとめておく。

Info.plistでDocument Typeを指定する

Info.plistのCFBundleDocumentTypesに、Document Typeを登録すると、そのDocument Typeに合致するファイルをDockのアプリアイコン上にドラッグ&ドロップできるようになる。

 <key>CFBundleDocumentTypes</key>
 <array>
 <dict>
 <key>CFBundleTypeName</key>
 <string>ImageFile</string>
 <key>CFBundleTypeExtensions</key>
 <array>
 <string>png</string>
 <string>jpg</string>
 <string>jpeg</string>
 <string>gif</string>
 <string>tiff</string>
 </array>
 </dict>
 </array>

CFBundleTypeExtensionsの中に、対応させたい拡張子のリストを登録する。CFBundleTypeNameには、複数のDocument Typeを登録した場合に識別するための名前を入力しておく。(Xcode上の設定画面以外で、どこかで表示されるのかは不明…)

Infoタブ上で設定することもできる。Extensionsはカンマ区切りで入力すると、自動的にarrayで保存してくれる。

AppDelegateで処理する

ファイルがドロップされると、AppDelegateのapplication:openFiles:が呼ばれる。これを実装しないと実行時にエラーが発生する。

 func application(_ sender: NSApplication, openFiles filenames: [String]) {
    debugPrint(filenames)
 }

ドロップされたファイルの一覧を取得できるので、そこで適宜処理してあげればOK。

参考リンク

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です