【问题标题】:Mac OS X file association works, but file icon not changedMac OS X 文件关联有效,但文件图标未更改
【发布时间】:2015-03-29 03:43:42
【问题描述】:

我使用 Qt 5.3.2 开发了一个 Mac 应用程序。此应用程序处理具有特定扩展名的文件(比如说.xyz)。

我创建了一个名为 XYZ.icns 的图标文件并将其添加到我的 app bundle 资源文件夹 (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:经过一段时间后,它终于可以自己工作了。一夜之间,安装了一个操作系统更新,我还不得不关闭计算机(启动服务可能自己刷新了一些东西)。我会将我的问题更新为:如何确保启动服务在安装或修改应用程序时刷新关联的文件图标?

【问题讨论】:

  • 嗨,您找到了这个问题的答案?
  • @vijay se edit 2. 它自己工作,但我不知道为什么。
  • @gfrigon 感谢您的回复.. 请告诉我要放置什么尺寸的图标
  • @vijay 我使用“Icon Composer”创建了一个使用 pngs 的包含所有尺寸(512x512、256x256、128x128、32x32、16x16)的图标。如果你安装了 Xcode,你可以通过“Xcode > Open Developer Tool > More Developer Tools”下载并安装“Xcode > Open Developer Tool > More Developer Tools”来检索“Icon Composer”工具

标签: macos qt info.plist file-association launch-services


【解决方案1】:

我的理解是某些(内置)操作会触发启动服务来刷新数据库。将新的 .app 包拖到 Applications 文件夹是一个触发器,运行 PackageMaker 安装程序也是如此。但是,启动服务数据库中的内容与 Finder 显示的内容之间可能存在脱节(直到其他一些刷新/重新启动)。

一些快速的 Google 搜索建议您可以从命令行强制重建:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user

但是,由于内置触发器,这一步应该不是必需的,所以我会犹豫是否使用它,除非您可以清楚地确定内置触发器为何对您的应用程序失败。如果问题出在 Finder 的图标缓存上,这也可能无济于事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多