1. ホーム
  2. アイオス

[解決済み】iPhoneアプリケーションにファイルタイプを関連付けるには?

2022-03-27 18:53:46

質問

iPhoneアプリとファイルの種類を関連付けるというテーマで。

これ 情報提供の質問 アプリがカスタムURLプロトコルに関連付けられることを知りました。

これは約1年前のことですが、その後Appleはさらに一歩進んで、アプリがファイルタイプと関連付けられるようにする「ドキュメントサポート」を導入しました。には多くの話題があります。 ドキュメント 未知のファイルタイプに遭遇したときに、他の適切なアプリを起動するようにアプリを設定する方法についてです。つまり、URLプロトコルの登録のように、どのアプリでもいきなり関連付けができるわけではありません。

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

解決方法は?

ファイルタイプの取り扱いは、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 キーを使用すると、アプリケーションが開くことができる統一型識別子 (UTI) の配列を指定することができます。 システムで定義された UTI の一覧は、Apple の 統一型識別子リファレンス . UTI のさらに詳しい情報は、Apple の 統一型識別子(Uniform Type Identifiers)の概要 . この機能は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 UTIの拡張子が.pdbで、MIMEタイプは chemical/x-pdb .

これで、メールに添付された文書や、システム上の他のアプリケーションからの文書を、アプリケーションが扱えるようになります。 メールでは、タップ&ホールドで、特定の添付ファイルを開くことができるアプリケーションのリストを表示することができます。

添付ファイルを開くと、アプリケーションが起動するので、このファイルの処理を -application:didFinishLaunchingWithOptions: アプリケーションのデリゲートメソッドです。 このようにしてメールから読み込まれたファイルは、アプリケーションのDocumentsディレクトリに、どのメールボックスに到着したかに対応するサブディレクトリの下にコピーされるようです。 このファイルの URL は、アプリケーションのデリゲートメソッド内で、次のようなコードを使って取得できます。

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

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

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