iOSやmacOSアプリでファイルの種類を識別したいときに便利なのが「UTType(Uniform Type Identifier)」です。
ファイルの読み込み・書き出し・共有・フィルタリングなど、様々な場面でファイルタイプの明示が必要になる際に使われます。
この記事では UTType の基本的な意味や使い方、具体的な使用例、注意点までわかりやすく丁寧に解説します。
UTType とは?
UTType は、Appleが定義した「ファイルやデータの種類を識別する統一的な仕組み」です。
たとえば .png
や .txt
、.mp4
など、拡張子に応じた「意味のある識別子」をプログラム内で扱えるようにしたものです。
iOS 14以降では、古い UTType のAPI(kUTType〜)の代わりに UniformTypeIdentifiers
フレームワークが導入され、よりSwiftらしく記述できるようになりました。
たとえば以下のように使います:
1 2 3 4 5 |
import UniformTypeIdentifiers let type = UTType.png print(type.identifier) // "public.png" |
- let type = UTType.png で、UTType 型の .png プロパティを取得しています
- UTType.png は、「PNG画像(.png)」を表す統一型識別子(UTI)です
- この
type
変数は、.png
のファイルタイプを表すオブジェクト(型:UTType
)になります "public.png"
は、macOSやiOSの内部でも使われている公式の識別名で、たとえばファイルピッカーやMIMEタイプのマッピングなどに使われます
このように、画像・動画・テキスト・音声などの種類を、文字列ではなく型安全な形で扱えるのが特徴です。
具体例:PhotosPickerで画像タイプを指定する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import SwiftUI import PhotosUI struct ContentView: View { @State private var selectedItem: PhotosPickerItem? var body: some View { PhotosPicker( selection: $selectedItem, matching: .images, // ここでUTTypeを使っている label: { Text("写真を選択") } ) } } |
.images
を指定することで、ユーザーが画像ファイルのみを選べるようになります。
.images
は内部的に複数のUTType(png, jpeg, heic など)を含んだグループです。
具体例:ドキュメントのインポートで特定ファイルタイプだけ許可する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import SwiftUI import UniformTypeIdentifiers struct FileImportView: View { @State private var isImporterPresented = false var body: some View { Button("ファイルを選択") { isImporterPresented = true } .fileImporter( isPresented: $isImporterPresented, allowedContentTypes: [.plainText, .pdf], // ここでUTTypeを使っている allowsMultipleSelection: false ) { result in // ファイルの処理 } } } |
.plainText
(テキストファイル)と .pdf
のみを許可してファイル選択UIを表示しています。
UTTypeの主な種類(よく使うもの)
UTType には多数の種類がありますが、代表的なものを以下にまとめます。
タイプ | 説明 |
---|---|
.plainText |
プレーンテキスト(.txt) |
.pdf |
PDFファイル |
.png |
PNG画像 |
.jpeg |
JPEG画像 |
.heic |
HEIC画像(iPhone標準) |
.image |
画像全般(png, jpeg, heic 含む) |
.movie |
動画ファイル全般 |
.audio |
音声ファイル |
.json |
JSONファイル |
.spreadsheet |
表計算(ExcelやNumbers) |
.rtf |
リッチテキスト形式 |
これらは UTType.
プレフィックス付きで記述することで、コード補完も効きやすくなっています。
UTTypeの活用シーン
UTType は以下のような場面で活躍します。
- ファイルピッカーで選択可能なファイルの種類を制限したいとき
- ファイル保存時に拡張子とMIMEタイプを自動的に指定したいとき
- ユーザーの選択したファイルの種類を判定したいとき
- SwiftUIの
.fileImporter()
や.fileExporter()
の引数として使いたいとき - Drag & Drop などで取り扱うファイルタイプを絞りたいとき
拡張子の文字列ではなく、型安全にファイルタイプを指定できるため、ミスを減らし保守性を高めることができます。
UTType を使うときの注意点
UTType は型安全かつ柔軟にファイルの種類を扱える便利な仕組みですが、いくつかの制約や落とし穴もあります。
正しく活用するために、次の点には注意しておきましょう。
import UniformTypeIdentifiers
を忘れずに記述する必要があります- iOS 14 以前では使用できません(kUTType との混在に注意)
.filenameExtension
などで拡張子ベースに変換する場合もありますが、全てのタイプに対応しているとは限りませんUTType(filenameExtension:)
で拡張子からUTTypeを推定できますが、非標準の拡張子は判別できないこともあります
これらを踏まえて、対象OSやファイル形式のバリエーションを意識しながら実装すると、より安定した動作が期待できます。
特に互換性や拡張性を考慮した設計が重要です。
まとめ
今回は UTType を紹介しました。
- UTType は Apple が定義したファイル種類を表す識別子
- SwiftUIやiOSの各種APIで、ファイルの種類を型安全に指定するのに使われる
- 画像・テキスト・動画・PDF・JSONなど、用途に応じて豊富な種類がある
- PhotosPickerやfileImporterなど、ファイル入出力処理で重要な役割を果たす
- 文字列や拡張子ではなく、定義済みのUTTypeを使うことで可読性と安全性が向上する
ファイルの種類を正確に管理したい場面では、UTTypeを積極的に使うことで、より堅牢で洗練されたコードを書くことができます。
ぜひ活用してみてください!