[Swift][macOS][iOS]UTType の登録方法

     
Document-based なアプリや Drag&Drop 対応をすると必要になる UTType の登録方法をあらためてまとめます。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Monterey 12.3 Beta
  • Xcode 13.3 beta
  • iOS 15.2

UTType

macOS や iOS では、ファイルの拡張子に依存せず ダブルクリックすることで、対応するアプリケーションでそのファイルを開くことができます。

その背景にあるのが、UTType です。

Apple のドキュメントは、こちら

背景説明のドキュメントは、こちら

UTType の定義

UTType の定義は、2種類必要になります。
・OS 向けに、アプリが使用する タイプの提示
・アプリのコード向けに、使用タイプの定義

ファイルをダブルクリックで開くことや、ドラッグ&ドロップは OS が管理しています。

OS は、この UTType の情報を使用して、特定のアプリで指定されたファイルを開くことができるかどうか やドラッグ&ドロップで受け付けることができるかどうかについて 判断しています。

OS が必要とする情報は、Info.plist (的なもの)に定義して OS に提示する必要があります。

OS 向けに、アプリが使用する タイプの提示

以下のように、Xcode のプロジェクト内で 定義します。

以下は、アプリ独自のタイプを定義しているので、Exported Type として定義していますが、外部で定義されているタイプを使用するときは、Imported Type として定義します。

ExportedType

ドキュメントのタイプとして使用する時には、さらに Document Type としても定義する必要があります。

アプリのコード向けに、使用タイプの定義

アプリケーション内部からも 対応するタイプを参照する必要があります。

そのための定義です。

定義方法に特に制限はありませんが、UTType の extension で static に定義するのをよく見ます。


import UniformTypeIdentifiers

extension UTType {
    static var mdBundle: UTType {
        UTType(exportedAs: "com.smalldesksoftware.markdownbundle", conformingTo: .package)
    }
}

まとめ: UTType の登録方法

アプリが使用する UTType の定義について、あらためてまとめました。

うっかり 一方でも忘れると 期待通りの動作にならないので注意が必要です。

UTType の登録方法
  • 2つの箇所で設定が必要
  • Info.plist に定義して、OS 側から認識できるようにする
  • UTType の extension に static で定義して、コードから使用できるようにする

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。