【问题标题】:How to change Info.plist in a signed package?如何更改已签名包中的 Info.plist?
【发布时间】: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 是可以接受的,但如何?

所以两个问题:

  1. 我们如何更改 Info.plist ?
  2. (可选)系统何时验证它?重启后可能吗?

问题有答案,在兄弟会: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 文件创建一个单独的存档,如果该测试通过并且一切正常,那么您可以切换回 live info.plist 文件并将项目提交给您的最终用户......您可以这样做,例如为同一个项目设置不同的目标,并使用这些目标暂时构建正确的存档。

标签: macos code-signing info-plist


【解决方案1】:

重新签署应用程序可以非常快:

codesign --force --verbose=4 --sign "Developer ID Application: <your name> (<team ID>)" <application>

诀窍是避免使用--deep 选项。在我的 High Sierra 上大约需要 20 秒。

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多