【问题标题】:Cannot codesign an app with Python and Node无法使用 Python 和 Node 对应用程序进行代码设计
【发布时间】:2019-01-11 15:07:48
【问题描述】:

我有一个相当大且复杂的应用程序。大约 550 兆的未压缩文件包含大约 36,000 个文件。由于主要源代码在 Python 中,因此我使用 pyInstaller 创建初始 .app 文件。然后,我将应用程序需要的所有其他内容(文档、示例、node_modules 等)复制到XXX.app 文件中的Content/MacOS 子文件夹中。 (是的,它也使用node。)

.app 可以正常工作 - 但需要签名。根据 Apple 的说法,仅仅签名 XXX.app 是不够的:其中的所有组件也需要签名。我首先尝试了这条路线 - 但似乎每个 .txt、.png 和所有其他文件都需要签名。那是 36,000 个codesign 命令!

另一种选择是使用codesign--deep 选项。苹果在TN2206 发出警告:

重要提示:虽然 --deep 选项可以应用于签名 操作,不推荐。我们建议您签署代码 在各个阶段由内而外(就像 Xcode 自动执行的那样)。签约 with --deep 仅用于紧急维修和临时调整。

不管怎样,沿着这条路走下去,似乎很多组件都无法通过 codesign 签名:

"bundle format unrecognized, invalid, or unsuitable
In subcomponent: /Users/george/Files/dist/XXX.app/Contents/MacOS/node/node_modules/lodash.debounce"

我的假设是codesign 无法处理某些组件名称,例如lodash.debounce20140401180856!About.png.bin.

我怎么才能签署这个应用程序?

【问题讨论】:

  • 你看过here吗?
  • 是的,事实上我在我的问题中链接到该文档。我可能遗漏了该文档中的某些特定内容吗?

标签: python node.js macos pyinstaller codesign


【解决方案1】:

一切都解决了。有很多事情需要解决。他们在这里,希望他们将来能帮助别人。 Apple 的TN2206 充满了很好的建议,值得理解。

√ 从您的Contents/MacOS 文件夹中获取所有不是连接到主可执行文件的库的内容。将其移至Contents/Resources 并设置符号链接。

√ 如果你使用的是 Node,它应该在 Contents/Resources 中。当您位于Contents/MacOS 文件夹中时,像这样设置来自Contents/MacOS 的链接:

ln -s ../Resources/node node

√ 链接需要是相对的,因为应用程序需要是可移植的。当它安装在另一个系统上时,完整路径将不一样。

√ 不要使用--deep 标志,即使它很诱人。我需要 110 个codesign 语句,每个库一个。 Python 被认为是一个库:

codesign --force --verify --verbose=4 --sign "Developer ID Application: NS BASIC Corporation" ~/Files/dist/AppStudio.app/Contents/MacOS/Python

√ 为每个库完成codesign 后,codesign 应用程序本身:

codesign --force --verify --verbose=4 --sign "Developer ID Application: NS BASIC Corporation" ~/Files/dist/AppStudio.app

然后验证它是否正常工作:

codesign --display --verbose=4 ~/Files/dist/AppStudio.app

√ 如果你看到类似的消息

"code object is not signed at all
In subcomponent: /Users/george/Files/dist/AppStudio.app/Contents/MacOS/_Ctl.so"

这意味着你错过了一个图书馆。

√ 如果你收到这样的消息:

"bundle format unrecognized, invalid, or unsuitable
In subcomponent: /Users/george/Files/dist/AppStudio.app/Contents/MacOS/node/node_modules/.bin"

这不是图书馆。将其从Contents/MacOS 中取出,将其移至Contents/Resources 并设置符号链接。 (我在看着你,cacert.pem!)

√ 一旦你认为你拥有它,使用这个命令来检查最终的应用程序:

codesign --vvvv AppStudio.app

祝你的项目好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多