概要
- 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上のアイコンにドロップして受け取れるようになりました。