チケット #1433 (closed タスク: 対応済)
Info.plist DocumentTypes見直し
報告者: | daisuke | 担当者: | daisuke |
---|---|---|---|
優先度: | 普通 | マイルストーン: | 3.8b1 |
コンポーネント: | アプリケーション | バージョン: | |
キーワード: | 関係者: |
説明 (最終更新者: daisuke) (diff)
・CFBundleTypeOSTypesは****の方が良いのでは?
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-101685
むしろLSItemContentTypesにしたが良い?
<クリエータコードの有効性の現状確認>
macOS Big Sur 11.6
新規ファイル生成後、ダブルクリックでmiで開けるかどうか?
[拡張子:関連付けされていない未知の拡張子(. txtzzzzzzzzzz)の場合]
クリエータ/タイプ(MMKE/TEXT)設定あり、usroリソース設定なし:開ける
クリエータ/タイプ(MMKE/TEXT)設定なし、usroリソース設定あり:開けない
クリエータ/タイプ(MMKE/TEXT)設定なし、usroリソース設定なし:開けない
→クリエータ/タイプ(MMKE/TEXT)設定は有効、usroリソースは無効。
[拡張子:他のアプリに関連付けされている拡張子(.txt)の場合]
クリエータ/タイプ(MMKE/TEXT)設定あり、usroリソース設定ありでも、開けない(他のアプリが開く)
→おそらく下記のようなロジック。
・データとしては下記の2つ。
(1) ファイルごとのアプリ関連付け(Finder「このアプリケーションで開く」)
(2) 拡張子に対するアプリ関連付け(Finder「このアプリケーションで開く」の「すべてを変更」)
・新規ファイル生成時、(2)にしたがって(1)が設定される。(2)に、対応する拡張子がなければ、ファイルのクリエータコードにしたがって、(1)が設定される。(後でクリエータコードを変えても、(1)は更新されない。)
→モード設定の「開いたすべてのファイルにmiのクリエータ/タイプを設定する」は無意味になっているかもしれない。(ただ、タイプコードは(2)で使われている可能性がある。)
<ダブルクリックでmiで開くための方法>
モード設定「新規ファイルに下記のクリエータコードを設定する」はデフォルト(ON)の前提。
[他のアプリの拡張子とかぶっていない場合]
・miで新規生成したファイルなら、何もしなくてもダブルクリックで開ける。
・他のアプリで設定したファイルなら、Finder「このアプリケーションで開く」で(1)か(2)を設定する。
[他のアプリの拡張子とかぶっている場合(.txt等)]
・Finder「このアプリケーションで開く」で(1)か(2)を設定する。
<アイコン関連付け>
アイコン関連付けについては、上記のダブルクリックの結果と必ずしも一致しない。
(.txtでテキストエディットで開く状態なのに、miのアイコンになっていたりする。)
アイコン関連付けはmacOSのLaunchServicesのDBの反映タイミングがすぐには反映されていないふしもあるし、ドキュメントはほぼないので、よくわからない。
<CFBundleTypeExtensionsに拡張子を並べるのは意味があるのかどうか?(*だけもしくはpublic.dataだけの登録ではだめか?)>
→ある。
他のアプリで定義されていない拡張子であれば、(「新規ファイルに下記のクリエータコードを設定する」がOFFであっても)自動的に関連付けされて、ダブルクリックも有効になり、アイコンもmiのものになる。
→OS標準アプリに合わせてCFBundleDocumentTypes書き直すのもありだが、
基本的にOSドキュメントが不十分で、動作が予想できないので、とりあえず現状どおりにする。
CFBundleTypeOSTypesに関しては、拡張子*/タイプ****の項目も入っているので、ドロップや開くダイアログ等ならなんでも開ける設定にはなっているはず。
<2023/7再検証>
・LSItemContentTypesがpublic.dataの項目を入れると、不明拡張子ファイルを右クリックで、「このアプリケーションで開く」の候補に出るようになる。
・クリエータコード設定は無視される。下記ドキュメントの「Preferred Application for a Document」の4a。macOS Venturaで、いくつかテストしたが、クリエータコードの有無や内容でアプリ関連付けには影響しない。
https://developer.apple.com/library/archive/documentation/Carbon/Conceptual/LaunchServicesConcepts/LSCConcepts/LSCConcepts.html#//apple_ref/doc/uid/TP30000999-CH202-TP9
・不明拡張子、タイプTEXTのファイルはmacOSデフォルトではテキストエディットに結び付けられている。Finderコマンド+Iの「すべてを変更」で別アプリに結びつけると、「この変更は種類が"TEXT"のすべての書類に適用されます」と表示されるが、実際には別の拡張子には影響しない。(他にもこのダイアログの表示内容と実際の動作が一致しないことがいくつかある。)
・拡張子なし、タイプTEXTのファイルをFinderコマンド+Iの「すべてを変更」で別アプリに結びつけると、すべての不明拡張子、タイプTEXTのファイルがそのアプリに結びつく。
・不明拡張子ダブルクリックで、ダイアログからアプリケーションを選択すると、その拡張子は選択したアプリに結びつく。(右クリックでこのアプリケーションで開く、だと結びつかない)
・アップル標準アプリにはLSIsAppleDefaultForTypeという項目が設定されていて、優先して起動される?ぽいがundocumented
<タイプコードについて>
・拡張子なしのファイル:タイプコードがないと、どうやってもアプリ関連付けができない(エラーダイアログ表示される)。→'TEXT'をつけなければならない。
・Info.plistに登録している拡張子のファイル:タイプコードをつけてもつけなくても動作に影響しない。→つけないほうが良い。
・Info.plistに登録していない拡張子のファイル:'TEXT'をつけた場合、ユーザーが既に拡張子なしのファイルについて「すべてを変更」でTEXTをmiに関連付けているなら、ダブルクリックで開けるが、そうでない場合はテキストエディットが開く(「すべてを変更」で関連付けを変える必要がある)。'TEXT'をつけない場合、ダブルクリックで不明拡張子としてダイアログが表示され、miを選択すれば自動的にその拡張子とmiが結びつく。現在ではmacでも拡張子を付けるほうが一般的と思われるので、拡張子なしファイルをmiに結びつける操作をしているユーザーが少数派であることを考えると、後者のほうがベター(わかりやすい)と思われる。
<対応内容>
・クリエータコードはつけない。関連設定も削除。
・タイプコードは、拡張子がない場合の新規保存に限り、'TEXT'を付ける。
・Info.plistに、LSItemContentTypesがpublic.dataの項目を追加。
・AppleのアプリでもCFBundleTypeExtensions は使っているので、すべてをLSItemContentTypesに変更することはせず、c, html等は現状通り。(大変なわりにメリットはなさそう)
・Info.plistはCFBundleTypeExtensions指定項目からの'TEXT'削除等、他にもいくつか改善。