iOSやmacOSでファイルの種類を判定・指定するために重要な役割を果たすのが「UniformTypeIdentifiers」フレームワークです。
このフレームワークを使うことで、ファイル形式やデータタイプを安全かつ効率的に扱うことができます。
この記事では UniformTypeIdentifiers の基本的な概要や構造、代表的な使い方、活用シーン、注意点までをわかりやすく丁寧に解説します。
UniformTypeIdentifiers とは?
UniformTypeIdentifiers(略してUTType)は、Appleが提供するファイルタイプの識別・処理のための仕組みです。
たとえば「JPEG画像」「テキストファイル」「PDF」など、拡張子やMIMEタイプをベースに、統一された識別子で管理・処理できるようになります。
iOS 14 / macOS 11 からは旧来の MobileCoreServices(kUTType〜
)に代わり、UniformTypeIdentifiers
フレームワークとして刷新され、SwiftらしいAPIで記述できるようになりました。
基本的な構造と特徴:
UTType
という構造体で各ファイルタイプを表現- 型安全かつ補完が効くため、ミスが減りやすい
.plainText
や.png
などプリセットされたプロパティが多数用意されている- 拡張子・MIMEタイプ・UTI文字列からの変換も可能
主要なプロパティやメソッド
UniformTypeIdentifiersフレームワークでは、以下のようなプロパティやイニシャライザを使ってファイルタイプを判定・生成できます。
1 2 3 4 5 |
import UniformTypeIdentifiers let textType = UTType.plainText print(textType.identifier) // "public.plain-text" |
主な使い方は以下の通りです。
メソッド・プロパティ | 説明 |
---|---|
UTType.plainText |
プレーンテキスト型(.txt) |
UTType(filenameExtension:) |
拡張子からUTTypeを生成 |
UTType(mimeType:) |
MIMEタイプからUTTypeを生成 |
type.conforms(to: .image) |
あるタイプが別のタイプに準拠しているかを確認 |
type.supertypes |
上位のカテゴリを取得(例:.jpeg → .image) |
type.filenameExtensions |
対応する拡張子一覧 |
例えば以下のように使います:
1 2 3 4 |
if let type = UTType(filenameExtension: "pdf") { print(type) // public.pdf } |
拡張性の高い構造で、アプリ独自のカスタムタイプも定義可能です。
UniformTypeIdentifiers の活用シーン
UniformTypeIdentifiers フレームワークは、以下のような場面で強力に役立ちます。
PhotosPicker
やfileImporter()
などでユーザーが選べるファイルタイプを制限したいとき- ファイル読み込み・保存時に、対象ファイルの種類を安全にチェックしたいとき
Drag & Drop
やClipboard
経由で受け取ったデータの種類を判定したいとき- アプリが扱うデータ形式の管理や拡張が必要なとき
- カスタムファイルタイプを定義して他のアプリと連携したいとき
これらの処理を、文字列ベースの判定ではなく、型安全な方法で実装できるため、保守性や信頼性が大幅に向上します。
具体例:FileImporterやPhotosPickerとの連携例
SwiftUIでファイル選択UIを表示する際に、UniformTypeIdentifiersで型を制限することで、対象ファイルのみ選ばせることが可能です。
1 2 3 4 5 |
.fileImporter( isPresented: $isPresented, allowedContentTypes: [.pdf, .plainText] ) |
また、PhotosPickerでは以下のように画像ファイルのみに限定できます。
1 2 3 4 5 |
PhotosPicker( selection: $selectedItem, matching: .images ) |
このように、APIの引数として UTType
を使うことで、シンプルかつ安全にユーザー操作を制御できます。
注意点
UniformTypeIdentifiers を使用する上で、以下の点に注意してください。
import UniformTypeIdentifiers
を忘れずに明記する必要があります- iOS 14 / macOS 11 以前では使用できません(旧APIとの互換に注意)
- 拡張子やMIMEタイプからの変換は完全ではない場合もあります(マイナーな形式は返ってこない可能性あり)
- SwiftUIやUIKitのファイル操作系APIでは、必ず
UTType
を指定する形に変わってきています(旧来の文字列型は非推奨)
まとめ
今回は UniformTypeIdentifiers フレームワークについて詳しく紹介しました。
- ファイルやデータ形式を統一的・型安全に扱うためのフレームワーク
- Swift標準の
UTType
型で、拡張子やMIMEタイプを簡潔に扱える - ファイル選択やドラッグ&ドロップ、共有、保存処理でのフィルタリングに必須
- SwiftUIの
.fileImporter()
や.PhotosPicker()
との連携も簡単で強力 - アプリ独自のファイルタイプを定義して拡張することも可能
UniformTypeIdentifiers フレームワークはややわかりにくいですが、これからの開発ではますます重要になってくるはずです。
ぜひ積極的に取り入れて、アプリ開発に活かしてくださいね!