0%

iOS 15 安装 ipa 失败

公司的设备升级到 iOS 15 后,在安装 developerment 签名的 ipa 时失败。使用助手安装报错“安装包验证失败或设备未越狱”。命令行安装报错:

1
2
[ 70%] VerifyingApplication
ios-deploy[74018:30526608] [ !! ] Error 0xe8008029: unknown. AMDeviceSecureInstallApplication(0, device, url, options, install_callback, 0)

检查了证书中的设备号确实存在。将设备降级到 iOS 14 后安装成功。

原因是苹果在新系统(iOS 15,iPadOS 15,tvOS 15 和 watchOS 8)中采用了新的签名校验方式,会验证签名中是否包含一种称为 DER(Distinguished Encoding Rules)的规则。如果操作系统是 macOS 10.14 ~ 10.15.x,则系统支持了新的签名格式,但是没有添加 DER。操作系统是 macOS 11.0 以后的会默认包含 DER。

下面操作在 macOS 11.4 的机器上进行。

查看 ipa 的签名格式

将 ipa 解压,

1
2
# 将 test.ipa 解压到 test 文件夹下
unzip -q test.ipa -d test

查看签名信息

使用命令查看签名信息,

1
2
# test.app 为 解压出的路径
codesign -dv test/Payload/test.app

在输出内容查找 CodeDirectory v=20400 这样的信息。如果 v 小于 20400 ,则应用是旧签名格式,需要重签名。

如果 v 大于等于 20400,但是无法在 iOS 15 等设备上安装,则需要确认签名是否包含 DER。

查看 DER

使用命令查看签名信息,

1
2
# d 后面有 5 个 v
codesign -dvvvvv test/Payload/test.app

查看 PageSize 后面的内容,例如:

1
2
3
4
5
6
Page size=4096
-7=f4c7c0ae394247097dca9b19333001200747691e1d9e25ec0cf0f35a8ade21f3
-6=0000000000000000000000000000000000000000000000000000000000000000
-5=7379374fd375633558fd972e33809c06e61f9f8191f67c71875899b0dc290945
-4=0000000000000000000000000000000000000000000000000000000000000000
-3=53cc3cc9830555e6d7bc864522fdf160b61ccc0d2fda9331368d333dfaa4fe24

如果没有 -7 后面的值或者 -7 的值为 0,则表示没有 DER,需要重签名。

重签名

查看本机所有的签名

使用命令行,

1
security find-identity -v -p codesigning

会列出本机上所有的签名,例如下图

1
2
1) ABCABCABCABC "iPhone Developer: XXXXXX (XXXXX)"
1 valid identities found

其中就有签名所需要的证书,使用前面的签名标识(Codesign Identity)ABCABCABCABC 来进行重签名,命令行如下,

1
codesign -s "ABCABCABCABC" -f --preserve-metadata --generate-entitlement-der test/Payload/test.app --verbose

签名之后再生成 ipa 文件,使用命令行,

1
zip -r new_test.ipa test/Payload

可以重新安装 ipa 文件。

总结

  • 生成包时使用操作系统为 macOS 11.0 以上,Xcode 版本 13.0 以上的机器。
  • 如果签名格式有问题,需要使用 macOS 11.0 以上的机器进行重签名。

参考链接