Dock上のアイコンにファイルをドラッグし、アプリ側で受け取る方法


概要

  • Dock上のアイコンにファイルをドラッグし、アプリ側で受け取る方法を紹介します。

参考

実装

  • ちなみにinfo.plist的には以下の通りになります。
  • ただしplistを直接編集したときに、上記画面との同期が怪しいです。
  • 一旦Xcodeを閉じないとうまく行かなかったりするので、info.plistを直接編集するのは避けたほうが良さそうです。
<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array/>
            <key>CFBundleTypeIconFile</key>
            <string></string>
            <key>CFBundleTypeName</key>
            <string>ImageType</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.jpeg</string>
                <string>public.png</string>
            </array>
        </dict>
        <dict/>
    </array>
  • またはExtensinonsに開きたいファイルの拡張子を設定することも可能です。
  • ただし問題点として以下の例では*.JPGは受け取れますが*.jpegが受け取れません。
    • jpegExtensionsに追加すればいいですが網羅することが難しくなるので、やはりUTIで指定するのが便利そうですね。

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
    print(filename)
    return true
}

func application(_ sender: NSApplication, openFiles filenames: [String]) {
    print(filenames)
}
  • 以上でファイルをDock上のアイコンにドロップして受け取れるようになりました。