一.理解iOS签名机制
网上有很多资料,这里不展开细说,重点参考这三篇文章:
https://www.objccn.io/issue-17-2/
http://www.pchou.info/ios/2015/12/14/ios-certification-and-code-sign.html
http://blog.csdn.net/phunxm/article/details/42685597
二.重签名准备条件
1.已经授权过的 iPhone 设备,在embedded.mobileprovision可以看到其Device UDID
2.开发者证书,P12文件,将其安装到自己的mac上
3.描述文件embedded.mobileprovision,使用前文件名需要改为embedded
4.一个打包好的ipa文件,企业签名或者开发者签名都可以,
5.授权文件entitlements.plist,使用前文件名需要改为entitlements
6.应用信息Info.plist,从源ipa包中获取,并且只更改其中的Bundle Identifier属性。使用前文件名需要改为Info
7.将embedded.mobileprovision,entitlements.plist,Info.plist ,ipa包,这四个文件都放在同一个目录下
8.下载 iTools 工具
三.文件说明
1.描述文件embedded.mobileprovision 和证书文件是一一对应的,在描述文件中有如下信息:
•AppID
•证书
•功能授权列表
•Device UDID列表
•苹果的签名
2. entitlements.plist是一个xml格式文件,自己手动创建,其中的key-value根据embedded.mobileprovision文件中的Entitlements属性对应获取。只需提取
application-identifier/com.apple.developer.team-identifier/get-task-allow/keychain-access-groups 这四个属性和值即可
3. Info.plist 从ipa解压后的Payload文件夹中获取,拷贝出来后,只将里面的 Bundle Identifier 属性值改为与 embedded.mobileprovision文件中的application-identifier值一致,并去掉其前缀(前缀由十位数字和大写字母组成)
四.签名步骤
打开终端,依次输入:
1. cd {各资料文件所在目录}
2. unzip {ipaName}.ipa 解压ipa文件
3. cp Info.plist Payload/{ipaName}.app/Info.plist 替换待签名包中的Info.plist 应用程序信息文件
4. rm -rf Payload/*.app/_CodeSignature/ 移除待签名包中的_CodeSignature 签名文件,这是个plist文件,涵盖了包文件中所有文件的签名
5. cp embedded.mobileprovision Payload/{ipaName}.app/embedded.mobileprovision 替换待签名包中的描述文件
6. /usr/bin/codesign -f -s"iPhone Developer: xxxxxx(2F4935C2YD)"--entitlements entitlements.plist Payload/*.app/
上面一条为签名命令,其中 "iPhone Developer:xxxxxx (2F4935C2YD)"为相应证书中的名字,在key-chain中可查看
7. zip -r {ipaName}Res.ipa Payload/ 压缩待签名包中的app文件
8. rm -rf Payload/ 移除Payload文件
除了第3,4,5条可以不分前后,其他步骤严格按照顺序执行
五.自动化执行
将上面提到的执行的命令,放到一个resign.sh文件中,在resign.sh文件中开头中加上:#!/bin/sh ,该文件也放在和其他资料文件同目录下。最后在该sh文件中加上一些出错处理,如文件不存在或文件名不正确。
打开终端,输入:chmod 777 resign.sh (给该文件赋予权限)
接着执行:./resign.sh {ipaName}.ipa
如果整个流程顺利,则会生成 {ipaName}Res.ipa文件,通过 iTools 工具安装到指定的手机上
网友评论