Как настроить и протестировать путь к исполняемому файлу, главный значок и i18n из пакета MacOS .app - PullRequest
1 голос
/ 28 марта 2019

У меня есть комплект приложений MacOS.То есть он запускает исполняемый файл, вот и все.Значок по-прежнему не работает, хотя у меня есть файл MyApp.icns, который я могу визуально увидеть в Finder.И i18n не работает.

MyApp.app/
  Contents/
    Info.plist
    MacOS/
      MyApp # executable
    Resources/
      MyApp.icns
      en.lproj
        InfoPlist.strings
      jp.lproj
        InfoPlist.strings

.icns, который я сгенерировал из здесь :

mkdir MyIcon.iconset
sips -z 16 16     foo.png --out MyIcon.iconset/icon_16x16.png
sips -z 32 32     foo.png --out MyIcon.iconset/icon_16x16@2x.png
sips -z 32 32     foo.png --out MyIcon.iconset/icon_32x32.png
sips -z 64 64     foo.png --out MyIcon.iconset/icon_32x32@2x.png
sips -z 128 128   foo.png --out MyIcon.iconset/icon_128x128.png
sips -z 256 256   foo.png --out MyIcon.iconset/icon_128x128@2x.png
sips -z 256 256   foo.png --out MyIcon.iconset/icon_256x256.png
sips -z 512 512   foo.png --out MyIcon.iconset/icon_256x256@2x.png
sips -z 512 512   foo.png --out MyIcon.iconset/icon_512x512.png
cp Icon1024.png MyIcon.iconset/icon_512x512@2x.png
iconutil -c icns MyIcon.iconset
rm -R MyIcon.iconset

Мой 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>CFBundleDevelopmentRegion</key>
  <string>en</string>

  <key>CFBundleName</key>
  <string>MyApp</string>

  <key>CFBundleDisplayName</key>
  <string>MyApp</string>

  <key>CFBundleIdentifier</key>
  <string>MyApp</string>

  <key>CFBundleVersion</key>
  <string>1.0.0</string>

  <key>CFBundleVersion</key>
  <string>APPL</string>

  <key>CFBundleSignature</key>
  <string>MyApp</string>

  <key>CFBundleExecutable</key>
  <string>this/has/no/effect</string>

  <key>CFBundleIconFile</key>
  <string>NeitherDoesThis</string>
</dict>

Строки InfoPlist.string для каждого языка выглядят следующим образом:

CFBundleDisplayName = "Foo";
NSHumanReadableCopyright = "Copyright © 2019 Me.";

или:

CFBundleDisplayName = "ふ";
NSHumanReadableCopyright = "著作権法 © 2019 目.";

У меня возникают следующие проблемы:

  • Я не могу указать путь к исполняемому файлу, он работает только в том случае, если его имя совпадает с MyApp.app, поэтому MyApp исполняемый файл.
  • Значок MyApp.icns не отображается впапка / Applications (это единственное место, куда я ее поместил).Я не уверен, смогу ли я настроить этот путь либо.
  • Я не уверен, как проверить, работает ли i18n.

Интересно, можно ли проверить этот материал, и показатькак проверить другие вещи.В частности:

  1. Убедитесь, что на самом деле вы не можете настроить путь к исполняемому файлу, его должно иметь то же имя, что и приложение в папке MacOS.
  2. Убедитесь, что вы должны назвать значок так же, как приложение, с расширением .icns.Я не уверен, что это правда, потому что, например, основной значок Skypes находится в расположении ресурсов / Skype Blue.icns, и они говорят Skype Blue в Info.plist.Интересно, почему я не могу заставить это работать.
  3. Как проверить, работает ли i18n.Интересно, я просто поменяю язык системы Mac и снова открою приложение и т. Д.

Это все без использования XCode.

1 Ответ

2 голосов
/ 28 марта 2019

В Info.plist пропущенные / неверные ключи / строки могут повлиять на первые две проблемы;если ключи дублированы, отсутствуют или установлены неправильно, это, безусловно, может вызвать проблемы с функциональностью.

  1. Отсутствует

    • NSPrincipalClass
    • CFBundleInfoDictionaryVersion
    • CFBundleSupportedPlatforms
    • CFBundlePackageType
    • CFBundleExecutable (это двоичный файл внутри папки MacOS)
    • CFBundleLocalizations (опционально)
    • DTXcode (опционально)
    • DTPlatform (опционально)
    • DTSDK (опционально)
    • DTCompiler (необязательно)
  2. Неправильно

    • CFBundleIdentifier (должно быть в обратном формате DNS)
    • CFBundleVersion (дубликат / неверно)
    • CFBundleSignature (неверно)

ПРИМЕЧАНИЯ : имя приложения MyApp.app не обязательно должен совпадать с исполняемым файлом в папке MacOS, если вы добавили и установили ключ CFBundleExecutable.Значок приложения может быть любым именем, которое вы хотите, ключом к тому, чтобы оно работало, является включение дополнительных ключей CoreFoundation, показанных выше, для правильной установки.

После того, как вы отсортировали все недостающие / неправильные ключив итоге вы должны получить что-то похожее на:

<?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>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>MyApp</string>
    <key>CFBundleIconFile</key>
    <string>MyIcon</string>
    <key>CFBundleIdentifier</key>
    <string>com.company.MyApp</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>MyApp</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSupportedPlatforms</key>
    <array>
        <string>MacOSX</string>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>DTCompiler</key>
    <string>com.apple.compilers.llvm.clang.1_0</string>
    <key>DTPlatformBuild</key>
    <string>10B61</string>
    <key>DTPlatformVersion</key>
    <string>GM</string>
    <key>DTSDKBuild</key>
    <string>18B71</string>
    <key>DTSDKName</key>
    <string>macosx10.14</string>
    <key>DTXcode</key>
    <string>1010</string>
    <key>DTXcodeBuild</key>
    <string>10B61</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.13</string>
    <key>NSHumanReadableCopyright</key>
    <string>Copyright © 2019 MyApp. All rights reserved.</string>
    <key>NSMainNibFile</key>
    <string>MainMenu</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
</dict>
</plist>

* Приведенное выше Info.plist должно работать с вашим приложением, поскольку значения установлены в соответствии с тем, что вы показали в своем вопросе.


Относительно i18n тестирования - Internationalization and Localization Guide разделы Testing Your Internationalized App и Managing Strings Files Yourself должны быть полезными,В Руководстве содержится огромное количество информации;Единый подход, подходящий для всех подходов к тестированию, обычно не подходит, поэтому вам нужно найти то, что лучше всего подходит для вас.

Информация Список свойств Ключ Ссылка
Об интернационализации и локализации

...