3

2013 年 4 月 9 日更新これは以前の質問を完全に再投稿したものです。Launch Services、UTI、および廃止された作成者コードについて多くのことを学んだので、最初から質問したほうがよいと感じています。

問題の説明:

レガシー Mac 9.xx 用に設計されたアプリケーションがありますが、これはまだ Snow Leopard (Rosetta を使用) で実行されます。このアプリケーションはバンドルされたファイルを使用します。Snow Leopard 以降向けの新しいアプリを開発しました。問題は、現在使用している plist 構成に基づいて、Launch Services が新しいアプリを適切に関連付けないことです。何が間違っているのかを知る必要があります。

バンドルされたドキュメントを右クリックして GetInfo を選択すると、バンドルされたファイルをレガシー アプリまたは新しいアプリに関連付けることができ、期待どおりに機能します。これは、Snow Leopard がまだこの種の関連付けに Creator Code テクノロジを使用しているためだと思います。ファイル自体を古いレガシー アプリに関連付けるように指示し、[すべて変更] を押すと、Launch Services はそのタイプのすべてのファイルを正しく関連付け、期待どおりに動作します。ファイル自体を新しいアプリに関連付けるように指示し、[すべて変更] を選択すると、アプリは開きますが、ファイルは開きません。私が知る限り、起動サービスは動的 UTI をアプリに割り当てており、ファイルがクリックされたときに、OS は使用するアプリを認識していません。

Apple が新しい UTI 方法論でいくつかの設計ミスを犯した可能性があることを示唆しているように見える投稿をいくつか見つけました。ここの 1 つの投稿では、新しいアプリ pList の ExportedUTIs ディクショナリに文字列ファイル拡張子の配列を追加する方法を示しています。これにより、アプリは正しく機能しますが、問題は解決しません。ユーザーがファイルに任意の名前を付けることを許可すると、ファイル拡張子がどうなるかを配列で予測できなくなります。UTI コード、または OSType コードを機能させる方法で厳密に正しく動作するには、Launch Services が必要です。

UTIについて投稿する

新しいアプリが関連ファイルを開くことができないと判断したら、LanchServices.plist を開き、エントリを削除して、lsregister データベースを再起動する必要があります。次に、新しいアプリでファイルをもう一度開くことができます(「すべて変更」を押さずに関連付けることにより)。

アプリの plists 、バンドルされたドキュメントの plist 、および Launch Services エントリにいくつかの画像を添付しています。

古いアプリのリスト

新しいアプリのリスト

同梱ドキュメントの plist

新しいアプリの Launch Services エントリ

どんな助けと私たちの指導も大歓迎です。

マイク

更新日: 2013 年 4 月 16 日

私が提供した UTI に関する投稿へのリンクには、RCDefault アプリと呼ばれるオープン ソース ソフトウェア アプリへのリンクも含まれています。このアプリは、UTI の選択、ファイル拡張子、OSType コード、およびファイルの種類に基づいて、APP を特定のファイルに関連付けます。奇妙なことに、このアプリは、plist で提供される UTI の構造に基づいて、ファイルをアプリに関連付けることができます。

これはすべて、この特定のシナリオでの Snow Leopard の起動サービスの単なるバグであり、Apple はこの時点でそれを無視することを選択した可能性はありますか (Snow をサポートしなくなったことを考慮して)?

4

2 に答える 2

1

CFBundleTypeExtensions がありません。Array 型の CFBundleTypeExtensions を作成します。Item 0 がファイル拡張子になります。

また、ファイルが使用するエイリアス タイプである CFBundleTypeName も欠落しています。それを素敵できれいにします。:)

参照 (CFBundleDocumentTypes): https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html

于 2013-04-12T20:50:13.543 に答える