2010/11/21

iOSアプリケーションを特定のファイル形式に対応させる方法について

前回の記事「UIDocumentInteractionControllerを用いて別アプリケーションを開くメニューを表示する方法について」では選択したファイルからクイックビューや対応可能なアプリケーションを呼び出す方法について説明しました。今回は、アプリケーションを特定のファイル形式に対応させ、前回の記事で用いたUIDocumentInteractionControllerから利用可能にさせる方法を説明し、ここで利用する統一型識別子 (UTI) についても簡単に説明します。

詳細はAppleの公式ドキュメント「iOS Application Programming Guide」の「Implementing Standard Application Behaviors」を参照してください。なお、この文書はiOSの場合について言及しており、Mac OS Xの場合とは詳細が異なります。

Info.plist

アプリケーションが特定のドキュメントタイプ (ファイル形式) に対応するには、Info.plistでキーCFBundleDocumentTypesを設定する必要があります。CFBundleDocumentTypesはディクショナリ型の配列で、各ディクショナリがひとつのドキュメントタイプについて指定しています。

iOSにおけるCFBundleDocumentTypes内の各ディクショナリは次のキーを含んでいます。

  • CFBundleTypeName
    (文字列) ドキュメントタイプの名前 (必須)
  • CFBundleTypeIconFiles
    (配列) このドキュメントタイプに対応するアイコン画像リソースを示すファイル名の配列。22×29ピクセル (iPad用は64×64) のアイコンを用意する、らしいのですがどこで使用されているのかいまいちよくわかっていません。なければアプリケーションアイコンから生成されるようです
  • LSItemContentTypes
    (配列) このドキュメントタイプがサポートする統一型識別子 (UTI; Uniform Type Identifier) 形式の文字列の配列
  • LSHandlerRank
    (文字列) アプリケーションがこのドキュメントタイプをどの程度サポートしているかを示すランク。優先度が高いほうから順番に、 Owner (このタイプの作成可能) > Alternate (このタイプの閲覧可能) > None (扱えないがドロップは可能) > Default (ドロップの不可)

例えば、アプリケーションをHTMLを含むテキストファイル全般に対応させたい場合には、Info.plistで次のように指定します。テキストファイル全般に対応したUTI形式は「public.text」ですので、LSItemContentTypesではそれを指定しています。

URLリクエストの受け入れ

Info.plistを設定後、別のアプリケーションから与えられるファイルを扱えるようにします。これには「独自カスタムURLスキームを設定する方法」と同様に、application:handleOpenURL:もしくはapplication:didFinishLaunchingWithOptions:を利用します。コード例を次に示します。

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {
    if ([url.scheme isEqualToString:@"file"]) {
        NSString* str = [NSString stringWithContentsOfURL:url
                           encoding:NSUTF8StringEncoding error:nil];
        viewController.textView.text = str;
        return YES;        
    } else if ([url.scheme isEqualToString:@"mySampleApp"]) {
        // カスタムURLスキームの処理 (省略)
    }
}

統一型識別子 (UTI) について

キーLSItemContentTypesで用いるUTI形式は同じファイル形式を意味する拡張子、OSType、MIMEタイプをまとめて扱えるようにするものです。例えば、OSTypeのJPEG、拡張子の.jpg、拡張子の.jpeg、MIMEタイプのimage/jpegなどはUTI形式では「public.jpeg」と表現できます。

  • UTIは階層構成で、ファイルについてはpublic.dataがルート
  • UTIの表記はDNS表記と似た形式で、英数字とドット(.)とハイフン(-)のみ使用可能
  • ドメインpublicは予約ドメイン
  • 多重継承も可能

なお、画像やテキストなどの一般的な形式は既に定義されており、「System-Declared Uniform Type Identifiers」の表1にあるシステム定義のUTIをグラフ化したものは次のようになります。これはシステム定義済みのもの全てを示しておらず、WindowsビットマップやAdobe Reader形式などは別の表で示されているので、このグラフには存在しません。

上記画像のSVGファイル (最近のブラウザなら、リンク先の「Open」で表示することができます)

まとめ

アプリケーションを特定のファイル形式に対応させる方法と統一型識別子 (UTI) について説明しました。

関連項目

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。