2016-06-09 2 views
0

Я запустить эту строку: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 

ответ

0

После написания весь этот вопрос, я заметил, что наш сценарий сборки внутренне делает копию приложения, которые следуют символические ссылки в содержании каталога/MacOS.

На всякий случай какая-либо другая бедная душа ищет аналогичный ответ, решение состоит в том, чтобы эти каталоги находились в директории Contents/Resources и символически привязывались к ним из директории MacOS.

Смежные вопросы