Я запустить эту строку:CodeSign OSX App Bundle с периодами в именах каталогов MacOS
codesign --verbose --force --deep --sign "Developer ID Application: Company" Company.app
и я получаю эту ошибку:
Company.app: bundle format unrecognized, invalid, or unsuitable
In subcomponent: /Users/me/repo/client/Company.app/Contents/MacOS/include/python2.7
я сузил проблему вплоть до того, что у меня есть пакет приложений, который включает несколько подкаталогов в каталоге Contents/MacOS, которые имеют периоды в их именах. По this, CodeSign дроссели на это, потому что он считает, что любой каталог с периодом в нем является само расслоение и отвергает его (курсив мой):
Note that a location where code is expected to reside cannot generally contain directories full of nested code, because those directories tend to be interpreted as bundles. So this occasional practice is not recommended and not officially supported. If you do do this, do not use periods in the directory names. The code signing machinery interprets directories with periods in their names as code bundles and will reject them if they don't conform to the expected code bundle layout.
Мой пакет создается с помощью PyInstaller (протестировано версия 3,1 и 3,2), и режиссер автоматически втягивается. Здесь все каталоги, которые имеют эту проблему:
Company.app/Contents/MacOS/include/python2.7
Company.app/Contents/MacOS/lib/python2.7
Company.app/Contents/MacOS/lib/python2.7/config
Company.app/Contents/MacOS/qt_menu.nib
Company.app/Contents/MacOS/tcl/http1.0
Company.app/Contents/MacOS/tcl/opt0.4
Я смотрел here, и не было никакого упоминания об этой проблеме, и я хотел бы знать, если у кого есть идеи конфигурации, которые могли бы исправить эту проблему без полного устранения зависимостей от включения.
Расслоение создается с помощью следующей команды:
python $PYINSTALLER/pyinstaller.py \
-n $APP_NAME \
--paths $MODULE_SEARCH_PATH \
--windowed \
--icon $BUNDLEFILES_DIR/$APP_NAME.icns \
--distpath $BUNDLE_DIR/dist \
--osx-bundle-identifier com.company.$APP_NAME \
--exclude-module core.InternalTool \
main.py