Mac OS X文件关联正常,但文件图标未更改。

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>
结果:文件关联已经生效(双击文件会打开我的应用程序),但是图标没有被替换(仍然显示空白文档图标)。
我是否有遗漏的地方?我查看了其他应用程序的示例,似乎没有比我做的更多的东西。 编辑:我进行了更多的测试。 我使用以下命令转储了启动服务数据:
/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: 经过一段时间的尝试,它最终自行运作起来了。在一夜之间,操作系统进行了更新,并且我也不得不关闭计算机(启动服务可能会自行刷新某些内容)。我将更新我的问题:如何确保启动服务在安装或修改应用程序时刷新关联文件图标?

1
http://www.tekrevue.com/tip/rebuild-launchservices-fix-duplicate-entries-os-xs-open-menu/ - Sinisa Drpa
你找到这个问题的答案了吗? - Vijay
@vijay,编辑2。它自己工作了,但我不知道为什么。 - gfrigon
@gfrigon 感谢您的回复。请告诉我应该放置哪些尺寸的图标。 - Vijay
@vijay 我使用“Icon Composer”创建了一个包含所有尺寸(512x512、256x256、128x128、32x32、16x16)的图标,使用的是png格式。如果你已经安装了Xcode,可以通过“Xcode > 打开开发者工具 > 更多开发者工具”来获取“Icon Composer”工具,并下载和安装“Xcode > 打开开发者工具 > 更多开发者工具”。 - gfrigon
显示剩余3条评论
1个回答

3
我的理解是某些(内置的)操作会触发启动服务刷新数据库。将新的.app捆绑包拖到应用程序文件夹中是其中之一,运行PackageMaker安装程序也是如此。然而,在启动服务数据库和Finder显示的内容之间可能存在不一致(直到进行其他刷新/重启为止)。
一些快速的谷歌搜索表明,您可以通过命令行强制重新构建:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 然而,由于内置触发器,这一步骤不应该是必要的,因此除非您能清楚地确定为什么内置触发器无法为您的应用程序工作,否则我会犹豫使用它。如果问题是Finder的图标缓存,则这也可能没有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接