我运行这条线:
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 目录中的一些子目录,这些子目录的名称中有句点。据此,codesign对此感到窒息,因为它认为任何带有句点的目录本身就是一个捆绑包并拒绝它(强调我的) :
请注意,预期代码所在的位置通常不能包含充满嵌套代码的目录,因为这些目录往往被解释为包。所以这种偶尔的做法是不推荐的,也不是官方支持的。如果这样做,请不要在目录名称中使用句点。代码签名机制将名称中带有句点的目录解释为代码包,如果它们不符合预期的代码包布局,将拒绝它们。
我的包是由 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
我看了这里,并没有提到这个问题,我想知道是否有人有配置想法可以解决问题,而不会完全消除包含的依赖项。
使用以下命令创建捆绑包:
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