iPhone アプリケーションにファイルの種類を関連付けるにはどうすればいいですか? 質問する

iPhone アプリケーションにファイルの種類を関連付けるにはどうすればいいですか? 質問する

iPhone アプリをファイルの種類に関連付ける方法について。

これ有益な質問です。アプリをカスタム URL プロトコルに関連付けることができることを知りました。

それはほぼ1年前のことですが、それ以来Appleは「ドキュメントサポート」を導入し、アプリがファイルタイプに関連付けられるようになりました。ドキュメンテーション不明なファイルの種類に遭遇したときに、他の適切なアプリを起動するようにアプリを設定する方法について説明します。つまり、URL プロトコルの登録のように、関連付けはどのアプリでもすぐには機能しません。

こうなると、次のような疑問が湧いてきます。Safari や Mail などのシステム アプリは、関連付けられたアプリケーションを選択するためのこのシステムを実装しているのでしょうか。それとも、これまでどおり何もしないのでしょうか。

ベストアンサー1

ファイルタイプの処理は iPhone OS 3.2 で新しく導入され、既存のカスタム URL スキームとは異なります。特定のドキュメントタイプを処理するようにアプリケーションを登録すると、ドキュメントコントローラを使用するアプリケーションは、これらのドキュメントの処理を独自のアプリケーションに引き渡すことができます。

例えば私のアプリケーション分子(ソース コードが利用可能) は、電子メールまたは別のサポートされているアプリケーションで受信された場合に、.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キーを使用すると、アプリケーションで開くことができる Uniform Type Identifiers (UTI) の配列を提供できます。システム定義の UTI の一覧については、Apple の統一型識別子リファレンスUTIに関するさらに詳しい情報はAppleの統一型識別子の概要この機能は 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:。この方法でメールから読み込まれたファイルは、アプリケーションの Documents ディレクトリ内の、そのファイルが到着した電子メール ボックスに対応するサブディレクトリにコピーされるようです。次のようなコードを使用して、アプリケーション デリゲート メソッド内でこのファイルの URL を取得できます。

NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];

これは、カスタム URL スキームの処理に使用したのと同じアプローチであることに注意してください。次のようなコードを使用して、ファイル URL を他の URL から分離できます。

if ([url isFileURL])
{
    // Handle file being passed in
}
else
{
    // Handle custom URL scheme
}

おすすめ記事