Параметр значка PyInstaller не работает на Mac - PullRequest
2 голосов
/ 18 июня 2020

Я выполнил следующую команду на своей ма c и создал файл .app.

pyinstaller --icon icon.icns --noconsole -n testApp main.py

Однако сгенерированный файл .app не показывает значок.

enter image description here

icon.icns указывается как файл значка в info.plist.

enter image description here

Папка Content / Resouces содержит icon.icns.

enter image description here

Когда я запускаю файл .app, я вижу значок в Dock.

Однако значок не отображается в самом файле .app. Почему это?

1 Ответ

6 голосов
/ 27 июня 2020

Вы должны использовать команду для создания пакета приложений macOS

Если указано правильно, icon.icns будет скопировано в папку Ресурсы и применено к пакету testApp.app в каталог dist после выполнения команды pyinstaller. (не пытайтесь использовать .ico, как было предложено, это для Windows).

Я просто попытался создать простое приложение Python с использованием PySide2, и оно без проблем включило файл значка в пакет приложений.

Учитывая, что icon.icns находится в том же каталоге как main.py:

Ваша команда должна быть:

$ pyinstaller --onefile --windowed --icon icon.icns --name testApp main.py

Это создаст пакет приложений, и вы сможете его запустить нормально.


Но подождите, есть еще кое-что ...

К сожалению, история на этом не совсем заканчивается.

СПОЙЛЕР:

Чтобы делать вещи «правильным путем» и сделать macOS счастливой, вы также должны включить:

--osx-bundle-identifier 'YOUR_IDENTIFIER'

Таким образом, файл spe c будет включать информацию для создаваемого файла Info.plist.

Также должен быть раздел в spe c файл, описывающий содержимое Info.plist, что-то в строках:

app = BUNDLE(exe,
         name='testApp.app',
         icon='icon.icns',
         bundle_identifier='com.youridentifier',
         info_plist={
            'NSPrincipalClass': 'NSApplication',
            'NSAppleScriptEnabled': False,
            'CFBundleDocumentTypes': [
                {
                    'CFBundleTypeName': 'My File Format',
                    'CFBundleTypeIconFile': 'MyFileIcon.icns',
                    'LSItemContentTypes': ['com.example.myformat'],
                    'LSHandlerRank': 'Owner'
                    }
                ]
            },
         )

В приведенном выше примере ключ / значение 'NSPrincipalClass': 'NSApplication' необходим, чтобы позволить Ma c OS X отображать приложение

Ключу 'NSAppleScriptEnabled' присваивается логическое значение Python False, которое будет выводиться в Info.plist как <false/>. Наконец, ключ CFBundleDocumentTypes сообщает Ma c OS X, какие типы файлов поддерживает ваше приложение, если таковые имеются.

...