Codesign OSX App Bundle 在 MacOS 目录名称中带有句点

Codesign OSX App Bundle with periods in MacOS directory names

我运行这一行:

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

写完这整个问题后,我注意到我们的构建脚本在内部复制了应用程序的副本,该副本遵循 Contents/MacOS 目录中的符号链接。

以防万一其他可怜的人正在寻找类似的答案,解决方案是将这些目录放在 Contents/Resources 目录中,并从 MacOS 目录符号链接到它们。

我遇到了同样的问题,在 很多 失败之后,我终于可以让 codesign 工作了。我为此编写了一个使用脚本来自动修复您的应用程序的方法:Recipe OSX Code Signing Qt.