iOS重签名

一.理解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 工具安装到指定的手机上

你可能感兴趣的:(iOS重签名)