ファイルタイプの処理は、iPhone OS 3.2で新しく追加され、既存のカスタムURLスキームとは異なります。特定の種類のドキュメントを処理するようにアプリケーションを登録できます。ドキュメントコントローラーを使用するアプリケーションは、これらのドキュメントの処理を独自のアプリケーションに引き渡すことができます。
たとえば、私のアプリケーションMolecules(ソースコードが利用可能)は、.pdbおよび.pdb.gzファイルタイプを処理します(電子メールまたは他のサポートされているアプリケーションで受信した場合)。
サポートを登録するには、Info.plistに次のようなものが必要です。
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Document-molecules-320.png</string>
<string>Document-molecules-64.png</string>
</array>
<key>CFBundleTypeName</key>
<string>Molecules Structure File</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<string>org.gnu.gnu-zip-archive</string>
</array>
</dict>
</array>
メールおよびドキュメントを表示できるその他のアプリケーションでサポートされているタイプのアイコンとして使用される2つの画像が提供されます。LSItemContentTypes
キーはあなたのアプリケーションで開くことができるという統一タイプ識別子症(UTI)のアレイを提供することができます。システム定義のUTIのリストについては、AppleのUniform Type Identifiers Referenceを参照してください。UTIの詳細については、AppleのUniform Type Identifiers Overviewを参照してください。この機能はMac全体に移植されているため、これらのガイドはMacデベロッパーセンターにあります。
上記の例で使用されたUTIの1つはシステム定義でしたが、もう1つはアプリケーション固有のUTIでした。システム上の他のアプリケーションがそれを認識できるように、アプリケーション固有のUTIをエクスポートする必要があります。これを行うには、次のようなセクションをInfo.plistに追加します。
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.plain-text</string>
<string>public.text</string>
</array>
<key>UTTypeDescription</key>
<string>Molecules Structure File</string>
<key>UTTypeIdentifier</key>
<string>com.sunsetlakesoftware.molecules.pdb</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>pdb</string>
<key>public.mime-type</key>
<string>chemical/x-pdb</string>
</dict>
</dict>
</array>
この特定の例com.sunsetlakesoftware.molecules.pdb
では、MIMEタイプに対応する.pdbファイル拡張子を付けてUTIをエクスポートしますchemical/x-pdb
。
これにより、アプリケーションは、メールに添付されたドキュメントやシステム上の他のアプリケーションからのドキュメントを処理できるようになります。メールでは、タップアンドホールドして、特定の添付ファイルを開くことができるアプリケーションのリストを表示できます。
添付ファイルを開くと、アプリケーションが起動し、-application:didFinishLaunchingWithOptions:
アプリケーションのデリゲートメソッドでこのファイルの処理を処理する必要があります。この方法でMailからロードされたファイルは、到着したメールボックスに対応するサブディレクトリの下のアプリケーションのDocumentsディレクトリにコピーされるようです。次のようなコードを使用して、アプリケーションデリゲートメソッド内でこのファイルのURLを取得できます。
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
これは、カスタムURLスキームの処理に使用した方法と同じです。次のようなコードを使用して、ファイルのURLを他のURLから分離できます。
if ([url isFileURL])
{
// Handle file being passed in
}
else
{
// Handle custom URL scheme
}
-application:didFinishLaunchingWithOptions:
アプリデリゲートでは、ファイルを処理するために開いたときにアプリがバックグラウンドで実行されなかった場合にのみ呼び出されることに注意してください。