在iOS开发中,为了方便测试和内部体验,往需要对ipa使用企业证书重新签名,然后在内部进行分发。接下来,就介绍如何对ipa包进行重签。
简单重签
如果想要了解,iOS的证书及代码签名机制,可以阅读这篇文章代码签名探析,这里就不再介绍。
首先,下载iReSign。这是一个开源工具,下载完成后打iReSign
,选择要重签的ipa包和重签时使用的开发者证书,点击“重新签名”按钮,就会在原ipa包同目录下生成一个重签后的ipa包。
使用iTunes安装重签后的ipa包,这时在iOS8以下的系统可以正常安装,但iOS8及以上系统就会安装失败。这是由于苹果在iOS8.1.3系统以后加强了对ipa安装包签名的验证,主要区别在于ipa唯一标识在原有Bundle Identifier的基础上增加了证书ID,也就说安装包和手机上已安装APP的Bundle Identifier即使一致,如果两者签名的证书ID不相同,那么安装包也无法正常安装。
完整重签
-
首先使用重签时用的开发者证书创建一个App ID,bundleID随意。
-
为上一步创建的App ID创建一个Provisioning Profile并下载到本地(可以通过Xcode来完成)
- 创建Entitlements Plist。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>PREFIX.yourappBundleID</string>
<key>aps-environment</key>
<string>production</string>
<key>get-task-allow</key>
<false/>
<key>keychain-access-groups</key>
<array>
<string>PREFIX.yourappBundleID</string>
</array>
</dict>
</plist>
新建一个plist文件,将上面代码粘贴过去。将其中的PREFIX.yourappBundleID
替换成前第1步截图中的Prefix
和ID
,然后将文件保存为entitlements.plist
。该文件中内容配置可以参考代码签名探析,比如没有推送功能的话,就去掉如下两行:
<key>aps-environment</key>
<string>production</string>
最后,打开iReSign
- 第一行填待重签ipa包的路径
- 第二行填第2步中下载的Provisioning Profile的路径
- 第三行填第3步创建的
entitlements.plist
文件路径 - 第四行勾选
修改ID
,然后填写第1步中的bundle ID。 - 第五行选择重签使用的开发者证书
- 点击
重新签名
,大功告成!
重新签名的ipa包将会存放在原ipa包同一目录。