[解決済み】iPhoneアプリケーションにファイルタイプを関連付けるには?
質問
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
}
関連
-
[解決済み] Info.plist ユーティリティのエラーです。"そのようなファイルがないため、Info.plistを開くことができませんでした"
-
[解決済み] UITabBar アイコンが正しく表示されない
-
[解決済み] キャッチできない例外 'NSInvalidArgumentException', reason: '-[_.AppDelegate add:]: unrecognized selector' により、アプリを終了する。
-
[解決済み] NSIntegerからNSStringデータ型に変換するにはどうすればよいですか?
-
[解決済み] dispatch_queue_create のキュー属性とは?
-
[解決済み] Stringをformatで作成するには?
-
[解決済み] あなたのリクエストはエラーを発生させました。[newNullResponse]?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み】iPhoneアプリケーションにカスタムフォントを埋め込むことはできますか?
-
[解決済み】iPhoneアプリを終了させる正しい方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Xcode は、[バンドル ID] に一致する iOS App Store プロビジョニングプロファイルを見つけられませんでした。
-
[解決済み] ペン先を読み込んだが、「表示」コンセントが設定されていない
-
[解決済み] Cordova Camera iOSの問題。NOT_FOUND_ERR
-
[解決済み] 「シミュレータで実行すると、「インストールされているプロビジョニングプロファイルが、インストールされているiOS署名アイデンティティと一致しません。
-
[解決済み] <UITabBarController: 0x197870> の外観遷移の開始/終了の呼び出しがアンバランスである。
-
[解決済み] MacOSとXcodeをアップデートすると、Xcode 8.1の「No matching provisioning profiles found」が表示される。
-
[解決済み] 指定されたホスト名を持つサーバーが見つからなかった
-
[解決済み] このアクションは完了できませんでした。再試行 (-22421)
-
[解決済み] NSIntegerからNSStringデータ型に変換するにはどうすればよいですか?
-
[解決済み] iOS 9 : ユニバーサルアプリの警告「アプリがフルスクリーンを必要としない限り、すべてのインターフェイスの向きをサポートする必要があります」。