App重签名

Intro

由于跨区合作,新买的设备无法及时的添加进账户,可又当天需要展示,只好使用个人账号对已交付的ipa重签名。

具体实现步骤

签名打包使用了iResign,还需要:证书,provision文件和entitlement。另外,还需要修改app的bundle identifier。
provision文件需要包含待测试的设备,这里主要说明下entitlements.plist文件的生成。一个打包好的ipa中,本身包含了这种信息,我们可以使用工具导出:

/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i ./Payload/Mobile\ Site\ Solutions.app/embedded.mobileprovision) > entitlements.plist

修改后,需要将com.apple.developer.team-identifier 值修改为你自己证书的信息。 还有一个需要修改的地方是:get-task-allow 需要设置为 false,意为不允许其他进程依附程序(一般情况,adhoc和release版,该值或为空或为true)。
接下来,就使用iResign,依次选择相应的文件即可。安装重签名ipa失败时,设备在身边的话,可以查看console信息,一般情况下都有说明。常见的错误就是provision和entitlement之间的验证信息匹配失败。

参考

顺便学习了下签名知识,摘取了几个重要命令:

//查看证书信息
security find-identity -v -p codesigning

//查看app签名信息
codesign -vv -d Payload/yourApp.app/

验证签名信息
codesign --verify Example.app

//查看已签名app的entitlements信息,即app开启的capability的能力信息
codesign -d --entitlements - Payload/yourApp.app/

//查看provision 配置文件的信息
security cms -D -i Payload/yourApp.app/embedded.mobileprovision