Mac OSX安装程序pkg忽略Applications文件夹中所请求的应用程序显示名称,而使用bundle .app name stem

时间:2014-03-15 22:20:03

标签: macos installer bundle productbuild pkgbuild

我在Mac OSX上显示的应用程序名称存在问题,安装后,不是我想要的。这适用于在应用商店之外作为pkg文件分发的应用。一切正常,除了显示的应用程序名称,如Mac的“应用程序”文件夹中所示。无论我做什么,显示的内容始终是包名称(不包含.app)。我以为它会使用我在Info.plist文件中提供的名称。

这就是我在做的事。

我为我的应用创建了一个包,其中包含一个定义包显示名称的Info.plist,如下所示:

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软件包文件夹,然后我使用.pkgpkgbuild创建了productbuild。但是嵌入在最终产品包中的组件包中的是Info.plist文件,该文件说明显示的名称是什么(我想要的) - "My Application"

我可以从Finder运行.pkg文件,它似乎都安装好了。

但是,当我打开我的Applications文件夹(使用任务栏中的'A'图标)时,它会在那里调用'My Application',而是调用'myapp',这是应用程序包的名称。它运行正常,只显示总是错误的名称。

所以...问题是我想控制用户看到的名称,但因为它包含空格我不能使用它作为bundle.app中的名称。

那么......如何在/ Applications文件夹和任务栏图标中显示我想要的应用程序名称?

由于

1 个答案:

答案 0 :(得分:0)

Finder显示文件名(有时没有扩展名),而不是包名;如果您希望查找程序将其显示为&#34;我的应用程序&#34;,您必须将软件包文件夹命名为&#34; My Application.app&#34;。如果您正确引用它,名称中的空格不应该成为问题:

pkgbuild --component "My Application.app" --version 1 --install-location /Applications component.pkg

如果qmake / make / macdeployqt工具无法处理文件名中的空格,那么

  1. 修复工具。文件名中的空格难以处理,您只需使用正确的shell引用,例如用双引号包装所有变量引用。
  2. 或者,创建不带空格的应用包,然后在打包以进行分发之前将其重命名。
  3. 编辑:CFBundleDisplayName键的目的是允许显示的应用程序名称的语言本地化。基本上,如果您将其设置为等于实际文件夹名称,然后在Contents / Resources / somelanguage.lproj / InfoPlist.strings文件中包含它的本地化,则它将显示该本地化名称而不是真实文件名。但是,如果用户重命名它(这是完全合理的事情),Finder将看到CFBundleDisplayName与实际名称不匹配,忽略本地化,并显示用户所选的名称。有关他们的解释,请参阅Apple docs on CFBundleDisplayName