将OSX App Bundle与MacOS目录名称中的句点对齐

问题描述 投票:2回答: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目录中的几个子目录,这些子目录的名称中包含句点。根据this的说法,编码会对此产生扼要,因为它认为任何带有句号的目录本身就是一个包并拒绝它(强调我的):

请注意,预期代码所在的位置通常不包含完整嵌套代码的目录,因为这些目录往往被解释为bundle。因此,不推荐这种偶尔的练习,也不提供官方支持。如果这样做,请不要在目录名称中使用句点。代码签名机制将名称中包含句点的目录解释为代码包,如果它们不符合预期的代码包布局,则会拒绝它们。

我的包是由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
macos pyinstaller codesign app-bundle
2个回答
1
投票

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

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


0
投票

我遇到了同样的问题,经过很多失败后,我终于可以让codesign工作了。我用脚本自动修复了你的应用程序:Recipe OSX Code Signing Qt

© www.soinside.com 2019 - 2024. All rights reserved.