2

我运行这条线:

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
4

2 回答 2

1

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

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

于 2016-06-09T23:37:08.340 回答
1

我遇到了同样的问题,经过多次失败,我终于可以开始codesign工作了。我为此编写了一个配方,其中包含一个脚本来自动修复您的应用程序:Recipe OSX Code Signing Qt

于 2018-09-04T13:40:06.773 回答