我在Mac OSX上显示的应用程序名称有问题,安装后,不是我想要的。这适用于在应用商店之外以pkg文件形式分发的应用。除了Mac的"应用程序"文件夹中显示的应用程序名称外,一切正常。无论我做什么,显示的总是包名(没有.app)。我原以为它会使用我在Info.plist
文件中给出的名称。
这就是我正在做的。
我为我的应用创建了一个bundle,它包含一个Info。定义bundle显示名称的列表,如下所示:
myapp.app/
myapp.app/Contents
myapp.app/Contents/Info.plist
myapp.app/Contents/MacOS
...
myapp.app/Contents/Resources
...
它实际上是一个基于Qt的应用程序,我使用qmake/make/macdeployqt构建,而不是使用Xcode。但我想这应该与我的问题无关。在我的Info.plist
文件中我有:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>uk.co.blahdomain.MyApplication</string>
<key>CFBundleName</key>
<string>My Application</string>
<key>CFBundleDisplayName</key>
<string>My Application</string>
.....
</dict>
</plist>
我为这个应用构建了一个安装包,如下所示:
pkgbuild --component myapp.app --version 1 --install-location /Applications component.pkg
productbuild --distribution distribution.xml --resources ./distresources --package-path . --version 1.2.3 --sign "Developer ID Installer: blah company name" test.pkg
正如你所看到的,我的构建过程创建了一个myapp.app
包文件夹,从这个文件夹中我使用pkgbuild
和productbuild
创建了一个.pkg
。但是在最终产品包中的组件包中嵌入了它的Info.plist
文件,该文件说明了(我想要的)显示名称是什么- "My Application"
。
我可以从Finder中运行。pkg文件,它似乎都安装好了。
但是当我打开我的应用程序文件夹时(使用任务栏中的"A"图标),它在那里,但不是称为'My Application'
,而是称为'myapp'
,这是应用程序包的名称。它运行正常,只是显示的名称总是错误的。
所以…问题是,我想控制用户看到的名称,但由于它包含空格,我不能在bundle.app中使用它作为名称。
所以…我如何获得应用程序名称显示,因为我想在/应用程序文件夹和任务栏图标?
谢谢
Finder显示文件名(有时没有扩展名),而不是包名;如果你想让finder显示它为"我的应用程序",你必须将bundle文件夹命名为"My Application.app"。如果正确引用,名称中的空格应该不成问题:
pkgbuild --component "My Application.app" --version 1 --install-location /Applications component.pkg
如果qmake/make/macdeployqt工具不能处理文件名中的空格,那么
- 修复工具。文件名中的空格并不难处理,你只需要使用适当的shell引号,比如把所有变量引用都用双引号括起来。
- 或者,创建一个没有空格的应用包,然后在打包分发之前重命名它。
编辑:CFBundleDisplayName键的目的是允许显示的应用程序名称的语言本地化。本质上,如果您将它设置为实际的文件夹名称,然后在Contents/Resources/someellanguage .lproj/InfoPlist中包含它的本地化。字符串文件,它会显示那个本地化的名字,而不是真正的文件名。但是,如果用户重命名它(这是完全合理的事情),Finder将看到CFBundleDisplayName和实际名称之间的不匹配,忽略本地化,并显示用户选择的名称。参考Apple文档中CFBundleDisplayName的解释