「自作アプリの独自ファイルをFinderやFilesアプリで正しく認識させたい」「拡張子 .mydata のファイルをダブルクリックしたら自分のアプリが開くようにしたい」——こういった要件を実現するのが UTExportedTypeDeclarations です。
これはAppleが定めた Uniform Type Identifier(UTI) という仕組みの一部で、macOS / iOS 向けアプリの Info.plist に記述します。
この記事では UTI の基本概念から始め、UTExportedTypeDeclarations の役割・書き方・UTImportedTypeDeclarations との使い分けまでを体系的に解説します。
Uniform Type Identifier(UTI)とは
UTI とは、macOS / iOS がファイルやデータの種類を識別するために使う文字列識別子です(Apple Developer Documentation「UTType」)。
Mac OS X 10.3(Panther)で導入されました。
従来のファイル識別方法には次のような問題がありました。
- ファイル拡張子:同じ
.txtでもUTF-8とShift-JISの区別ができない - MIMEタイプ:アプリによって表記揺れがある(
image/jpgとimage/jpegなど) - OSType(4文字コード):Classic Mac OS 時代の遺産でモダンな用途に向かない
UTI はこれらを統一する文字列で、逆引きドメイン名形式(reverse-DNS形式)で記述します(Uniform Type Identifier – Wikipedia)。
| 種類 | UTI 文字列 |
|---|---|
| JPEG画像 | public.jpeg |
| PDFドキュメント | com.adobe.pdf |
| ZIP圧縮ファイル | public.zip-archive |
| 独自フォーマット(例) | com.yourcompany.yourapp.document |
UTIの階層(コンフォーマンス)
UTI は親子関係(コンフォーマンス)を持つ点が特徴です(Apple Developer「Uniform Type Identifiers Overview」)。
例えば public.jpeg は public.image に準拠し、public.image は public.data に準拠しています。
この階層があるため「JPEGを開けるアプリ」も「画像全般を開けるアプリ」も、同じファイルを正しく処理対象として認識できます。
UTExportedTypeDeclarations とは
UTExportedTypeDeclarations は、自分のアプリ(または組織)が所有・管理する独自ファイルタイプを、システム全体に宣言するための Info.plist キーです(Apple Developer Documentation「UTExportedTypeDeclarations」)。
「エクスポート(Exported)」という名前が示す通り、このキーで宣言した UTI は他のアプリからも参照・利用可能になります。
自分が作ったファイルフォーマットの「所有者(Owner)」として登録する際に使います。
具体的な用途としては次のようなケースが代表的です。
- 自作アプリ専用の独自フォーマット(例:
.mydata)を新規定義したい - Finderやファイルピッカーでカスタムアイコンやファイル名を表示させたい
- 他のアプリが自分のフォーマットを参照できるようにしたい
UTImportedTypeDeclarations との違い
UTExportedTypeDeclarations と対になるキーが UTImportedTypeDeclarations です。
2つの使い分けはそのUTIの「所有者」が誰かで決まります(Apple Developer「Declaring New Uniform Type Identifiers」)。
| キー | 意味 | 使うケース |
|---|---|---|
| UTExportedTypeDeclarations | 自分が所有するUTIを宣言・公開する | 自作フォーマット、自社独自拡張子 |
| UTImportedTypeDeclarations | 他者が所有するUTIをシステムに教える | 競合アプリや他社フォーマットをサポートしたいが、相手のアプリが未インストールの可能性がある場合 |
インポートは暫定的な宣言です。
もし宣言の対象アプリ(本来の所有者)がインストールされていれば、そちらの宣言が優先されます(Apple Developer Forums「Defining custom file types」)。
Info.plist への書き方
基本構造
UTExportedTypeDeclarations の値は配列(Array)で、各要素は辞書(Dictionary)です。
1つの辞書が1つのUTI宣言に対応します。
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<!-- 必須:UTI の識別子文字列 -->
<key>UTTypeIdentifier</key>
<string>com.yourcompany.yourapp.document</string>
<!-- 必須:親UTI(何に準拠するか) -->
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<!-- 推奨:拡張子やMIMEタイプとのマッピング -->
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>mydata</string>
</array>
<key>public.mime-type</key>
<array>
<string>application/x-yourcompany-document</string>
</array>
</dict>
<!-- 省略可:Finderで表示されるファイルの説明文 -->
<key>UTTypeDescription</key>
<string>My App Document</string>
</dict>
</array>
主なキーの説明
| キー | 必須 | 説明 |
|---|---|---|
| UTTypeIdentifier | 必須 | UTIの一意識別子。com.会社名.アプリ名.形式名 の形式で命名 |
| UTTypeConformsTo | 必須 | 親UTI。テキスト系なら public.text、それ以外は public.data が基本 |
| UTTypeTagSpecification | 推奨 | 拡張子・MIMEタイプ・OSTypeのマッピング |
| UTTypeDescription | 省略可 | Finderやファイルピッカーに表示されるユーザー向け説明文 |
| UTTypeIconFile | 省略可 | カスタムアイコンファイル名(.icns を Resources フォルダに配置) |
| UTTypeReferenceURL | 省略可 | フォーマット仕様を説明する参照URL |
UTTypeConformsTo の選び方
UTTypeConformsTo に指定するUTIは、自分のフォーマットの性質に合わせて選びます。
| 自分のフォーマットの種類 | 指定推奨の親UTI |
|---|---|
| 人間が読めるテキスト | public.plain-text または public.text |
| XML形式のデータ | public.xml |
| バイナリデータ(独自仕様) | public.data |
| ZIP互換アーカイブ | public.zip-archive |
| 画像ファイル | public.image |
なお、ファイルフォーマットの場合は必ず public.data または com.apple.package のどちらかがコンフォーマンス階層のルートに含まれるようにしてください。
そうしないとシステムがディスク上のアイテムとして正しく認識できません(Apple Developer「Declaring New Uniform Type Identifiers」)。
CFBundleDocumentTypes との組み合わせ
UTExportedTypeDeclarations でUTIを宣言しただけでは、「このアプリがそのファイルを開ける」とはシステムに伝わりません。
ファイルを開く対応を宣言するには、CFBundleDocumentTypes キーも併せて設定する必要があります(Apple Developer Forums「Defining custom file types」)。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>My App Document</string>
<key>CFBundleTypeRole</key>
<string>Editor</string> <!-- Editor(読み書き)or Viewer(読み取りのみ) -->
<key>LSHandlerRank</key>
<string>Owner</string> <!-- 自分が所有者なので Owner -->
<key>LSItemContentTypes</key>
<array>
<string>com.yourcompany.yourapp.document</string>
</array>
</dict>
</array>
LSHandlerRank の値は次の意味を持ちます。
| 値 | 意味 |
|---|---|
| Owner | このUTIの所有者。UTExportedTypeDeclarations と組み合わせる際に使う |
| Default | 既定の処理アプリ候補として登録 |
| Alternate | 代替アプリとして登録(他のアプリが優先) |
| None | ランクなし(Open With候補には出ない) |
Xcode での設定方法
コード直接記述でなく、Xcodeのビジュアル設定画面でも同じ内容を設定できます。
- Xcodeでプロジェクトを開き、対象のターゲットを選択
- 「Info」タブを開く
- 「Exported Type Identifiers」(= UTExportedTypeDeclarations)セクションを展開、または「+」ボタンで追加
- 各フィールドに
UTTypeIdentifier・UTTypeConformsTo・UTTypeTagSpecificationなどを入力
Xcode 12 以降では、UTExportedTypeDeclarations で宣言したカスタムUTIを UniformTypeIdentifiers フレームワークの UTType として Swift コードから直接参照できます(Apple Developer Tech Talk「Uniform Type Identifiers — a reintroduction」)。
import UniformTypeIdentifiers
extension UTType {
// Info.plist の UTTypeIdentifier と同じ文字列を指定
static let myDocument = UTType("com.yourcompany.yourapp.document")!
}
注意点
ドキュメントの「obsolete」警告について
Apple公式ドキュメントの一部には「このドキュメントは更新されていない」という警告が表示されています。
ただし UTExportedTypeDeclarations キー自体は引き続き有効で、Xcode 16 以降でも標準的な設定方法として使われています(Apple Developer Forums「Uniform Type Identifiers」)。
UTIの一意性
UTI文字列はグローバルに一意である必要があります。com.apple.* や public.* などAppleが管理するドメインは使用できません。
必ず com.会社名.* や jp.会社名.* など自社が管理するドメインをルートに据えた命名にしてください(Apple Developer「Declaring New Uniform Type Identifiers」)。
Windows レジストリとの関係
UTExportedTypeDeclarations は macOS / iOS 固有の仕組みです。
機能的な目的(ファイルの関連付けとアプリ登録)はWindowsのHKEY_CLASSES_ROOT配下の拡張子キー・ProgIDキーと似ていますが、実装場所・形式・スコープは異なります。
まとめ
UTExportedTypeDeclarations は、macOS / iOS アプリが自分自身の所有する独自ファイルタイプをシステムに公開宣言するための Info.plist キーです。UTTypeIdentifier(識別子)・UTTypeConformsTo(親UTI)・UTTypeTagSpecification(拡張子やMIMEタイプとのマッピング)の3点セットが基本構造になります。
他者が定義したフォーマットを「このアプリも開ける」と補助的に宣言したい場合は、代わりに UTImportedTypeDeclarations を使うのが正しい使い分けです。
宣言後は CFBundleDocumentTypes と組み合わせることで、はじめてファイルのオープン処理がアプリと紐づきます。
参考情報源:
- Apple Developer Documentation「UTExportedTypeDeclarations」
- Apple Developer「Declaring New Uniform Type Identifiers」
- Apple Developer Tech Talk「Uniform Type Identifiers — a reintroduction」(WWDC 2020)
- Apple Developer Documentation「UTType」
- Uniform Type Identifier – Wikipedia(2025年時点)
- Apple Developer「Uniform Type Identifiers Overview」(PDF)


コメント