我有一个相当大而复杂的应用程序。未压缩的文件大小约为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.debounce
,20140401180856!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…