【问题标题】:Codesign OSX App Bundle with periods in MacOS directory names在 MacOS 目录名称中带有句点的 Codesign OSX App Bundle
【发布时间】:2016-06-09 23:37:08
【问题描述】:

我运行这一行:

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 对此感到窒息,因为它认为任何带有句点的目录本身就是一个捆绑包并拒绝它(强调我的):

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

我的包正在由 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


    【解决方案1】:

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

    【讨论】:

    • 甜蜜。我实际上没有代码来测试它,但乍一看它是有道理的。因此,我会将其标记为已接受,但请注意我尚未验证它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多