重签名:可以让用个人开发者账号打出来的包,不用上架Appstore即可将其安装到所有未越狱的iOS设备上(前提条件是你得有一个企业证书(需要证书或签名的可以加扣:425374542))。
风险提示:这种重签名方法仅供个人有兴趣的开发者去玩玩,不提倡用于商用,提倡使用Appstore上传发布到你的应用,重签名只能算是黑科技,苹果所不提倡的东西,如果APP使用量过大的话,企业证书有被封停的风险。
苹果在iOS8.1.3系统以后加强了对ipa安装包签名的验证,主要区别在于ipa唯一标识在原有Bundle Identifier的基础上增加了证书ID,也就说安装包和手机上已安装APP的Bundle Identifier即使一致,如果两者签名的证书ID不相同,那么安装包也无法正常安装。
开始:
_CodeSignature -> ipa包签名文件
embedded.mobileprovision -> 证书配置文件
替换上面两个文件就解决了ipa重签名的主要问题。
替换_CodeSignature里面的签名文件需要用到一个文件entitlements.plist的授权文件。所以我们要创建一个entitlements.plist文件,具体格式如下:
xml格式如下:
其中xxxxxxxxxx.com.xxx.xxx要换成ipa标识(就是证书ID+BundleID),其中xxxxxxxxxx就是你的证书ID,后面部分是bundleID
注意:get-task-allow一定要填NO(false)(否则安装一定失败),还有bundleID一定要与新的embedded.mobileprovision相对应,不然会导致签名失败。
准备工作都做好了 ,是开始我们重签名的真正的步骤了:
1、解压你所要签名的ipa包(其中包含Payload(如果是个人证书打包还会包含Symbols文件夹))
unzip xxx.ipa
2、删除Payload中xxx.app里面的_CodeSignature文件夹
rm -rf Payload/xxx.app/_CodeSignature
3、拷贝embedded.mobileprovision(新的必须改名为embedded)到Payload中xxx.app里面
cp embedded.mobileprovision Payload/xxx.app
4、创建entitlements.plist,并用该文件进行重签名
codesign -f -s "iPhone Distribution: xxxxxxxxxx" --entitlements entitlements.plist Payload/xxx.app
其中”iPhone Distribution: xxxxxxxxxx“是证书名
5、打包
zip -r xxx.ipa Payload (如果之前文件夹包含Symbols文件夹,该文件夹与Payload文件夹一起打包)
6、安装到手机进行验证
xcode、iTunes、各种手机助手、或者一些第三方托管平台(比如蒲公英等)