【问题标题】:Mac OSX installer pkg ignoring requested application display name in Applications folder, using bundle .app name stem insteadMac OSX 安装程序 pkg 忽略 Applications 文件夹中请求的应用程序显示名称,改用 bundle .app name stem
【发布时间】:2014-03-15 22:20:03
【问题描述】:

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

我可以从 Finder 中运行 .pkg 文件,它似乎安装正常。

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

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

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

谢谢

【问题讨论】:

    标签: macos installation bundle productbuild pkgbuild


    【解决方案1】:

    Finder 显示文件名(有时没有扩展名),而不是包名;如果您希望查找器将其显示为“我的应用程序”,则必须将捆绑文件夹命名为“我的应用程序.app”。如果引用正确,名称中的空格应该不是问题:

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

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

    1. 修复工具。文件名中的空格并不难处理,您只需使用正确的 shell 引用,例如将所有变量引用用双引号括起来。
    2. 或者,创建不带空格的应用程序包,然后在打包分发之前对其重命名。

    编辑:CFBundleDisplayName 键的目的是允许对显示的应用程序名称进行语言本地化。本质上,如果您将其设置为与实际文件夹名称相同,然后在 Contents/Resources/somelanguage.lproj/InfoPlist.strings 文件中包含它的本地化名称,它将显示该本地化名称而不是实际文件名。但是,如果用户重命名它(这是完全合理的做法),Finder 将看到 CFBundleDisplayName 和实际名称之间的不匹配,忽略本地化,并显示用户选择的名称。请参阅Apple docs on CFBundleDisplayName 了解他们的解释。

    【讨论】:

    • 感谢您的评论,是的,重命名捆绑包确实有效。让我想知道在 Info.plist 中显示名称的意义何在,因为拥有它们的明显(嗯,对我而言)点是显示在用户应用程序窗口之类的地方。
    • 感谢您的澄清,我现在明白了。
    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多