代码之家  ›  专栏  ›  技术社区  ›  user876725

Mac OSX安装程序包忽略Applications文件夹中请求的应用程序显示名称,改用bundle.app-namestem

  •  0
  • user876725  · 技术社区  · 11 年前

    安装后,我在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构建。但我认为这应该与我的问题无关。在我的 信息.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 bundle文件夹,并从中创建了 .pkg 使用 pkgbuild productbuild 。但嵌入到最终产品包中的组件包中的是 信息.plist 说明显示名称的文件- "My Application" .

    我可以从Finder运行.pkg文件,而且看起来安装正常。

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

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

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

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Gordon Davisson    11 年前

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

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

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

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

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