iOS描述文件与签名授权的匹配规则
TOPIC SOURCE
在 CI 中校验 iOS 应用签名链与证书有效期:从 WWDR 证书核验到 codesign 验证回归
iOS 应用签名成功,并不等于它获得了安装和运行所需的全部授权。描述文件限定了特定目标可使用的身份和授权范围;最终产物中的签名证书、应用标识与 Entitlements 必须分别满足这些约束。判断对象应是最终导出的应用及其扩展,而不是构建配置中看似正确的选项。
匹配身份与证书
首先核对应用标识和团队标识:产物签名中声明的身份,应与该目标使用的描述文件所允许的身份相符。描述文件可能包含通配符,因此判断标识是否匹配时,需要按其授权范围解释,不能只做字符串完全相等比较。
随后检查实际签名证书是否属于描述文件允许的证书。构建机能够找到某个签名身份,只能说明它在当前环境中可用,不能证明最终导出物使用的就是该身份,也不能代替证书链与信任检查。描述文件的有效期同样需要核对,系统时间异常则可能影响判断。
匹配授权范围
Entitlements 是签名产物声明的授权;描述文件中的相关内容则限定该目标可获得的授权范围。两者的关系不是简单的全文相等:通配符、数组和分发方式都可能影响具体匹配规则。检查时应逐项确认必需授权是否允许、禁止授权是否出现,并结合目标及分发方式判断。
主应用通过检查,也不能推断扩展通过。扩展可能有自己的标识、描述文件和 Entitlements,应逐个比对。若某个目标没有描述文件,也不应立即判定错误,而要结合交付类型确认其预期。
排查时,先确认检查的是最终交付物,再分别提取签名信息、Entitlements 和可用的描述文件进行比对;对无法可靠解析的复杂授权,标记为未验证并人工复核。签名完整性验证成功,只说明相关验证通过,不能单独证明描述文件授权、设备安装或分发条件全部满足。

参与讨论
扩展的签名确实很容易漏查