我编译了一个名为MyBundle.bundle的Mac OSX软件包,它用作另一个应用程序的插件。我希望捆绑包具有唯一的图标,因此我将Info.plist文件设置为:
<key>CFBundleIconFile</key>
<string>MyIcon.icns</string>
并将文件MyIcon.icns放在bundle的MyBundle.bundle / Contents / Resources文件夹中。
这不起作用,查找程序显示该包的通用图标并忽略指定的MyIcon.icns文件。如果我将软件包的扩展名从.bundle更改为.app,则图标会立即显示 - 所以我知道Info.plist是正确的。
我找到了一个可以模拟用户在包上复制和粘贴图标的工作:
我将图标作为“icns”类型和id -16455的资源添加到包的.rsrc文件中。
我致电
/Developer/Tools/SetFile -a BC MyBundle.bundle
这有效,但真的很蹩脚。从Mac OS 10.8开始,SetFile需要永远执行。
我的问题:是否有强迫Finder在没有这些黑客的情况下显示捆绑的图标?
顺便说一句:关于同一主题有一个问题:Set icon of non app mac os x bundle;但唯一的答案是指示如何创建一个图标,并没有帮助解决问题。
答案 0 :(得分:4)
您可以使用NSWorkspace
[[NSWorkspace sharedWorkspace] setIcon:(NSImage *)image forFile:(NSString *)fullPath options:(NSWorkspaceIconCreationOptions)options]
答案 1 :(得分:4)
此解决方案会为您的所有.bundle关联相同的图标。我不确定你需要什么(或者你的每个.bundle需要一个特定/不同的图标)。
如果您可以修改应用包:您可以定义要与应用关联的文档类型。为此,您必须编辑应用包:
TheOtherApp.app/Contents/Resources/MyIcon.icns
编辑TheOtherApp.app/Contents/Info.plist
并添加如下内容:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>TheOtherApp Plugin</string>
<key>CFBundleTypeRole</key>
<string>None</string>
<key>CFBundleTypeIconFile</key>
<string>FlexoDocument.icns</string>
<key>CFBundleTypeExtensions</key>
<array>
<string>bundle</string>
</array>
<key>LSTypeIsPackage</key>
<string>true</string>
</dict>
</array>
有关developer.apple.com上的CFBundleDocumentTypes的更多信息
您可能需要重新启动取景器和/或应用以查看效果。
答案 2 :(得分:0)
尝试不使用.icns
文件中的plist.info
部分:
<key>CFBundleIconFile</key>
<string>MyIcon.icns</string>
将其更改为:
<key>CFBundleIconFile</key>
<string>MyIcon</string>
我使用这种技术在这里创建了一个带有自定义图标的包:https://gist.github.com/Noitidart/6a2cbe0b4c74499765be
答案 3 :(得分:-3)
简单方法:打开图片文件选择所有副本,点击项目,apple-i获取信息,点击弹出窗口中的图标和apple-v。
这就像它变得容易一样。