无法使用Python和Node对应用程序进行代码签名 - python

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

.app正常运行-但需要签名。根据Apple的说法,仅对XXX.app进行签名是不够的:还需要对其中的所有组件进行签名。我首先尝试了该路线-但似乎每个.txt,.png和所有其他文件都需要签名。那是36,000个codesign命令!

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

  重要提示:虽然--deep选项可以应用于签名
  操作,不建议这样做。我们建议您签署代码
  由内而外地在各个阶段进行(如Xcode自动执行)。签收
  --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.

我该如何签署此应用程序?

参考方案

都整理好了。有很多事情需要解决。他们在这里,希望他们将来能帮助其他人。苹果公司的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

祝您的项目好运!

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

Python:在不更改段落顺序的情况下在文件的每个段落中反向单词? - python

我想通过反转text_in.txt文件中的单词来生成text_out.txt文件,如下所示:text_in.txt具有两段,如下所示:Hello world, I am Here. I am eighteen years old. text_out.txt应该是这样的:Here. am I world, Hello old. years eighteen a…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…