【发布时间】:2018-03-20 21:08:11
【问题描述】:
团队需要更改 Info.plist 以测试某些功能。 但有时应用程序(非常)会静默崩溃。
System Integrity Protection: enabled
Crashed Thread: 0
Exception Type: EXC_CRASH (Code Signature Invalid)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace CODESIGNING, Code 0x1
现在,如果我们按照推荐的here 测试签名:
codesign --verify -vvvv -R='anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.1] exists and (certificate leaf[field.1.2.840.113635.100.6.1.2] exists or certificate leaf[field.1.2.840.113635.100.6.1.4] exists)'
或spctl --verbose --assess
< path to app >: invalid Info.plist (plist or signature have been modified)
好的,但我真的很想修改它:
- 更改 SIP 不是一种选择
- 仅重新签名 Info.plist 是可以接受的,但如何?
所以两个问题:
- 我们如何更改 Info.plist ?
- (可选)系统何时验证它?重启后可能吗?
问题有答案,在兄弟会:https://superuser.com/questions/961797/how-to-change-info-plist-in-a-signed-package。
【问题讨论】:
-
您不能随意更改密封包中的文件...它们在归档过程中都经过哈希处理和单独删除——您可以通过设置测试环境或测试单元等方式对其进行测试...每个归档项目时,所有文件(包括
info.plist)将在新包中再次签名。 -
“设置测试环境” - 如何?最好测试用户的确切环境,而不是其他东西。是的,我们可以在进行设置之前配置 Info.plist,但不幸的是,现在情况并非如此。必须有一个更简单的解决方案(除了在某处添加
debug.settings.plist)。 -
我们需要更多关于上下文的信息。这是用于内部(您公司内部)测试吗?是否必须使用有效的开发人员 ID 进行签名,或者您使用开发或自签名 ID? Info.plist 的更改范围有多大(即是否有可能拥有一个预先构建的 Info.plist 文件的列表,以及一个列表,如果签名与它们一起交换)?
-
是内部测试,不对外。我们有一个有效的开发者 ID ......但任何被 Apple 接受(用于内部测试)都可以。更改相当广泛(字符串、URL 名称)。
-
@Liviu,例如您将使用 test
info.plist文件创建一个单独的存档,如果该测试通过并且一切正常,那么您可以切换回 liveinfo.plist文件并将项目提交给您的最终用户......您可以这样做,例如为同一个项目设置不同的目标,并使用这些目标暂时构建正确的存档。
标签: macos code-signing info-plist