Qt 5.3.2 を使用して Mac アプリケーションを開発しました。このアプリケーションは、特定の拡張子 (たとえば.xyz
) を持つファイルを処理します。
XYZ.icns という名前のアイコン ファイルを作成し、アプリ バンドルのリソース フォルダー ( MyApp.app/Contents/Resources/XYZ.icns
) に追加しました。
ファイルの関連付けを設定するために、バンドルの Info.plist ファイルも変更しました。このエントリを追加しました:
<key>CFBundleDocumentTypes</key>
<array>
<!-- Registered file accociation -->
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleTypeName</key>
<string>XYZ</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>xyz</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>XYZ</string>
</dict>
<array>
結果:ファイルの関連付けは機能しましたが(ファイルをダブルクリックするとアプリケーションが開きます)、アイコンは置き換えられませんでした(まだ空白のドキュメントアイコンが表示されています)。
見逃したものはありますか?例として他のアプリケーションを調べましたが、私が行ったこと以上のものはないようです。
編集:さらにいくつかのテストを行いました。次のコマンドを使用して、Launch サービス データをダンプしました。
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -dump
その結果、アイコン情報を含むファイル タイプのクレームをファイルで見つけることができます。
...
--------------------------------------------------------------------------------
Container mount state: mounted
bundle id: 105396
...
path: /Applications/MyApp.app
name: MyApp
...
--------------------------------------------------------
claim id: 27628
name: XYZ
rank: Default
reqCaps:
roles: Editor
flags: relative-icon-path doc-type
icon: Contents/Resources/XYZ.icns
bindings: .xyz
--------------------------------------------------------------------------------
...
EDIT2 : しばらくして、ようやく単独で動作するようになりました。一晩で、インストールされた OS の更新があり、コンピューターもシャットダウンする必要がありました (Launch Service はおそらくそれ自体で何かを更新しました)。質問を次のように更新します。アプリケーションがインストールまたは変更されたときに、Launch Service が関連ファイルのアイコンを更新するようにするにはどうすればよいですか?