8

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 が関連ファイルのアイコンを更新するようにするにはどうすればよいですか?

4

1 に答える 1

3

私の理解では、特定の (組み込みの) アクションが起動サービスをトリガーしてデータベースを更新します。新しい .app バンドルをアプリケーション フォルダーにドラッグすることは、PackageMaker インストーラーを実行する場合と同様に、1 つのトリガーです。ただし、Launch Services データベースにあるものと Finder に表示されるものとの間に切断がある場合があります (他の更新/再起動まで)。

Google で簡単に検索すると、コマンド ラインから強制的に再構築できることがわかります。/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

ただし、組み込みのトリガーがあるため、この手順は必要ないはずです。そのため、アプリケーションで組み込みのトリガーが失敗する理由を明確に特定できない限り、この手順を使用することを躊躇します。また、問題が Finder のアイコン キャッシュにある場合、これも役に立たない可能性があります。

于 2015-11-20T15:33:57.673 に答える