Установщик Mac OSX pkg игнорирует запрошенное отображаемое имя приложения в папке "Приложения", используя вместо этого пакет.app name stem

У меня проблема с отображаемым именем приложения для моего приложения в 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 папка в комплекте и из этого я создал .pkg с помощью pkgbuild а также productbuild, Но встроенный в пакет компонентов, который находится в конечном продукте, является его Info.plist файл, который говорит, что (я хочу) отображаемое имя будет - "My Application",

Я могу запустить файл.pkg из Finder, и все, кажется, установить ОК.

Но когда я открываю папку "Приложения" (используя значок "A" на панели задач), она там, но НЕ вызывается 'My Application' но вместо этого называется 'myapp' который был названием пакета приложений. Он работает нормально, только отображаемое имя, которое всегда неправильно.

Итак... ПРОБЛЕМА заключается в том, что я хочу контролировать имя, которое видит пользователь, но так как оно содержит пробелы, я не могу использовать его в качестве имени в bundle.app.

Итак... как мне заставить имя приложения отображаться так, как я хочу, в папке /Applications и на значке панели задач?

Спасибо

1 ответ

Решение

Средство поиска показывает имена файлов (иногда без расширений), а не имена пакетов; если вы хотите, чтобы средство поиска показывало его как "Мое приложение", вам необходимо назвать папку пакета "Мое приложение.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 на CFBundleDisplayName для их объяснения.

Другие вопросы по тегам