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

问题描述 投票:0回答:1

安装后,Mac OSX上我的应用程序显示的应用程序名称出现问题,不是我想要的那样。这是用于以pkg文件形式分发到应用商店之外的应用。除了Mac的“ Applications”文件夹中显示的应用程序名称以外,其他所有功能都可以正常运行。无论我做什么,显示的始终是捆绑包名称(不带.app)。我曾以为它将使用我在Info.plist文件中提供的名称。

这就是我正在做的。

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

myapp.app/
myapp.app/Contents
myapp.app/Contents/Info.plist
myapp.app/Contents/MacOS
...
myapp.app/Contents/Resources
...

实际上是我使用qmake / make / macdeployqt而不使用Xcode构建的基于Qt的应用程序。我认为那与我的问题无关。在我的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文件夹中和任务栏图标上显示想要显示的应用程序名称?

谢谢

macos installer bundle productbuild pkgbuild
1个回答
1
投票

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

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

如果qmake / make / macdeployqt工具无法处理文件名中的空格,则选择其中一个

  1. 修复工具。文件名中的空格并不难处理,您只需要使用正确的外壳引号即可,例如将所有变量引用都包装在双引号中。
  2. 或者,创建不带空格的应用程序捆绑包,然后在打包分发之前重命名它。

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


0
投票

有趣的是,通过.dmg将应用程序作为.app软件包安装似乎使Finder使用CFBundle [Display] Name。

但是,如果通过.pkg分发相同的应用程序,它将不会被接受。

© www.soinside.com 2019 - 2024. All rights reserved.