iOS开发——ipa包重签

作者: zagger | 来源:发表于2016-03-17 18:30 被阅读5496次

    在iOS开发中,为了方便测试和内部体验,往需要对ipa使用企业证书重新签名,然后在内部进行分发。接下来,就介绍如何对ipa包进行重签。

    简单重签

    如果想要了解,iOS的证书及代码签名机制,可以阅读这篇文章代码签名探析,这里就不再介绍。
      首先,下载iReSign。这是一个开源工具,下载完成后打iReSign,选择要重签的ipa包和重签时使用的开发者证书,点击“重新签名”按钮,就会在原ipa包同目录下生成一个重签后的ipa包。

    QQ20160317-0@2x.png
      使用iTunes安装重签后的ipa包,这时在iOS8以下的系统可以正常安装,但iOS8及以上系统就会安装失败。这是由于苹果在iOS8.1.3系统以后加强了对ipa安装包签名的验证,主要区别在于ipa唯一标识在原有Bundle Identifier的基础上增加了证书ID,也就说安装包和手机上已安装APP的Bundle Identifier即使一致,如果两者签名的证书ID不相同,那么安装包也无法正常安装。

    完整重签

    1. 首先使用重签时用的开发者证书创建一个App ID,bundleID随意。


      iReSign_identifiers.png
    2. 为上一步创建的App ID创建一个Provisioning Profile并下载到本地(可以通过Xcode来完成)


      iReSign_provisioning_profile.png
    3. 创建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步截图中的PrefixID,然后将文件保存为entitlements.plist。该文件中内容配置可以参考代码签名探析,比如没有推送功能的话,就去掉如下两行:

        <key>aps-environment</key>
            <string>production</string>
    
    最后,打开iReSign
    QQ20160317-0@2x.png
    • 第一行填待重签ipa包的路径
    • 第二行填第2步中下载的Provisioning Profile的路径
    • 第三行填第3步创建的entitlements.plist文件路径
    • 第四行勾选修改ID,然后填写第1步中的bundle ID。
    • 第五行选择重签使用的开发者证书
    • 点击重新签名,大功告成!

    重新签名的ipa包将会存放在原ipa包同一目录。

    相关文章

      网友评论

      • 2b48e2852372:按照楼主的方法 没用啊
      • 02b13066e6e4:现在重签名安装成功的版本是多少? 9或者10能成功吗
      • leoliubj:待重签ipa包是使用第二步的Provisioning Profile文件打出来的包吗

      本文标题:iOS开发——ipa包重签

      本文链接:https://www.haomeiwen.com/subject/mjeclttx.html