ファイル、URL、およびテキストからアプリのドック アイコンへのドロップを受け入れることができるようにしたいと考えています。ファイル (public.file-url) は URL (public.url) のサブタイプであるため、Info.plist に 2 つのサービス エントリだけを追加しました。
Services
Item 0 (processURL)
Instance method Name = processURL
Send Types
Item 0 = public.url
Menu
Menu item title = Process URL
Item 1 (processString)
Instance method Name = processString
Send Types
Item 0 = public.plain-text
Menu
Menu item title = Process Text
次に、 を-applicationDidFinishLaunching
呼び出し、アプリケーション デリゲートに[NSApp setServicesProvider: self]
いくつかのメソッド (-processString:userData:error
および) を記述しました。-processURL:userData:error
アプリ アイコンは、3 種類すべてのドロップを受け入れるようになりました。この-processURL:...
メソッドでは、ローカル ファイルかどうかを簡単に確認できるため、両方のケースを処理できます。
ただし、1つのケースはまだ私を逃れています。ウィンドウのプロキシ アイコンをアプリにドラッグしようとすると、ドロップを受け入れることができるかのようにアイコンが強調表示されますが、メソッドが呼び出されません。
Xcode、ターミナル、プレビュー、およびいくつかのサードパーティ アプリからプロキシ アイコンをドロップしようとしましたが、サービス メソッドを呼び出すものはありませんでした。しかし奇妙なことに、Finder からドロップされたプロキシ アイコンは正常に機能しました。
(物理階層のベース タイプ) に変更しようとしpublic.url
ましpublic.item
たが、メソッドがまだ Finder 以外のプロキシ アイコンに対して呼び出されません。
-types
Finder がアプリにプロキシ アイコンを正常にドロップすると、提供されるpboard は次のようになります。
- "public.file-url",
- "CorePasteboardFlavorType 0x6675726C",
- "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn",
- NSFilenamesPboardType、
- "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu",
- 「Apple URL ペーストボードタイプ」
これらをそれぞれ「送信タイプ」として直接使用してみました。「public.file-url」と「NSFilenamesPboardType」は、ドロップを受け入れるかのようにアイコンを強調表示しますが、受け入れません。当然のことながら、他のものはドック アイコンを強調表示しません。
通常のファイルとは異なる UTI を持つプロキシ アイコンへの参照が見つかりません。彼らは?それは奇妙だろう。
プロキシ アイコンを任意のウィンドウからターミナル ウィンドウにドラッグできるため、これが可能であることはわかっています。私は何が欠けていますか?
更新: NSView から、「public.url」を含めると、上記の Finder-registerForDraggedTypes
とまったく同じリストで、すべてのアプリからプロキシ アイコンがドロップされます。-types
したがって、ドック アイコンを介してドロップを受け取ることは明らかに特別なことです。これは何らかの形でまだ可能です。(Finder 以外の) ウィンドウ (Xcode の .xcworkspace など) からプロキシ アイコンをターミナル ドック ウィンドウにドラッグすると、問題なく認識されます。