概要
- Dock上のアイコンにファイルをドラッグし、アプリ側で受け取る方法を紹介します。
参考
-
iOS 11からのアプリ間ファイル共有
-
Document Types・Exported and Imported UTIsなどの全体の解説がありがたいです。
-
- Dropping Files onto Dock Icon in Cocoa
- Document Types vs. Exported and Imported UTIs
- [iOS]今からはじめるドキュメントベースApp - Qiita
- MIMEとは
実装
-
注意: 設定に問題ないのに動作が変更されない、というときは一度クリーンアップ(
Shift + Command + k)しましょう。 - まずは
TAEGETS>Document Typeに下記の通り追加します。-
Nameは任意ですね。
-
-
identifierに目的のUTIを記述します。 - 複数ある場合はカンマ区切りで記述します。
- UTIを確認したい場合は以下を参照。
- ちなみに
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が受け取れません。-
jpegをExtensionsに追加すればいいですが網羅することが難しくなるので、やはりUTIで指定するのが便利そうですね。
-
- 最後に
AppDelegate.swiftに以下を記述します。 - それぞれ、単ファイル・複数ファイルを受け付けた場合の処理をここに記述できます。
func application(_ sender: NSApplication, openFile filename: String) -> Bool {
print(filename)
return true
}
func application(_ sender: NSApplication, openFiles filenames: [String]) {
print(filenames)
}
- 以上でファイルをDock上のアイコンにドロップして受け取れるようになりました。

