您应使用创建macOS应用程序包的命令
如果正确指定,icon.icns
将被复制到资源文件夹中,并应用于运行pyinstaller命令后在dist
目录下的testApp.app
应用程序包中(不要尝试使用像Windows那样的.ico格式)。
我刚刚尝试使用PySide2创建了一个简单的Python应用程序,它没有任何问题地将图标文件包含在应用程序包中。
假设icon.icns与main.py在同一目录中:
您的命令应为:
$ pyinstaller --onefile --windowed --icon icon.icns --name testApp main.py
这将生成应用程序包,您应该能够正常运行它。
不幸的是,故事还没有完全结束。
剧透警告:
为了以“正确”的方式进行操作,并使macOS感到满意,您还应包括:
--osx-bundle-identifier 'YOUR_IDENTIFIER'
这样,规范文件将包含为生成的Info.plist
文件提供信息的数据。
规范文件中还应该有一个描述Info.plist
内容的部分,类似于:
app = BUNDLE(exe,
name='testApp.app',
icon='icon.icns',
bundle_identifier='com.youridentifier',
info_plist={
'NSPrincipalClass': 'NSApplication',
'NSAppleScriptEnabled': False,
'CFBundleDocumentTypes': [
{
'CFBundleTypeName': 'My File Format',
'CFBundleTypeIconFile': 'MyFileIcon.icns',
'LSItemContentTypes': ['com.example.myformat'],
'LSHandlerRank': 'Owner'
}
]
},
)
在上面的例子中,键/值对'NSPrincipalClass': 'NSApplication'是必需的,以便允许Mac OS X使用视网膜分辨率来渲染应用程序。
键'NSAppleScriptEnabled'被分配为Python布尔值False,它将作为输出到Info.plist。最后,键CFBundleDocumentTypes告诉Mac OS X您的应用程序支持哪些文件类型(如果有)。一个临时解决方法是,在Finder中获取.icns文件的信息;点击并复制获取信息窗口左上角的图像;然后将该.icns图像粘贴到应用程序的获取信息窗口的同一位置。您还可以通过该方法从任何现有应用程序复制.icns图像到任何其他应用程序。我相信这个功能在Mac上已经存在了20多年。尽管如上所述,最终应该将其编码到Info.plist内容中。编辑:获取信息中的.icns图像不得显示默认图像。如果是这样,请在预览中打开.icns图像,复制图像并将其粘贴到您想要的任何获取信息图像中。它在我的iMac上以及复制到另外两台Mac(Mini 2012运行Mojave 10.14.6和Mini运行El Capitan 10.11.6)上都有效。
.ico
格式的文件而不是.icns
吗? - Lucan