再谈 iOS 重签名

哪些场景需要我们自己动手去做重签名呢?举个例子,由于业务的需要,在不发布 AppStore 的情况,需要将自己的 APP 分发给外部企业用户使用,我们是不能把用我们自己企业证书打的包给到外部用户的,因为这违反了 AppStore 企业证书授权协议,一旦被苹果发现,那么这个企业下的所有 APP 可能都会被强制下架,并且永久封号。


iOS 重签名流程如下:

ipa_

其实 iOS 的重签名很简单(文件路径自定义)步骤如下:

  1. 解压 ipa 安装包
unzip YiMa-Release.ipa
  1. 删除 app 原有签名
rm -rf Payload/YiMa.app/_CodeSignature/
  1. 替换证书配置文件
cp YiMa_production_provision_profile.mobileprovision Payload/YiMa.app/embedded.mobileprovision
  1. 重签名
codesign -f -s "iPhone Distribution: Zhejiang Cainiao Supply Chain Management Co., Ltd." --entitlements entitlements.plist  Payload/YiMa.app
  1. 重新打包
zip -qr app-resigned.ipa Payload/

重签名过程中遇到的坑

  1. 在 iOS8之后,code sign 如果不添加 --entitlements entitlements.plist 参数的话,会导致重签名之后的 app 无法启动,跟踪堆栈会发现如下的 log 输出:
var/mobile/Media/PublicStaging/YiMa.app/ : Error Domain=LaunchServicesError Code=0 "The operation couldn’t be completed. (LaunchServicesError error 0.)" UserInfo=0x13f627620 {Error=ApplicationVerificationFailed, ErrorDescription=Application is missing the application-identifier entitlement.}

解决方法是创建一个 entitlements.plist 文件,参考:http://stackoverflow.com/questions/28195564/enterprise-app-deployment-doesnt-install-on-ios-8-1-3

  1. 重签名成功,但是通过 Xcode 无法安装,错误如下
6ba57f8d621b7559b59b94a37a1c53098f9ad3d1.png

这个问题困扰了了很久,原因是如果你的 APP 需要 APNs 推送,那么 在 developer.apple.com 中 创建的 App ID 必须勾选 Push Notifications 功能选项,你的 provisioning profile 文件中必须包含以下字段(可以通过 Sublime 等编辑器查看)

<key>aps-environment</key>
<string>production</string>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ipa 包重签名最新最简单教程 重签名的意义:ipa 重签名最大的用处是,不必重新打包,和配置其它第三方获取 ap...
    红发_KVO阅读 72,904评论 24 64
  • 一.理解iOS签名机制 网上有很多资料,这里不展开细说,重点参考这三篇文章: https://www.objccn...
    huig游影阅读 1,247评论 0 0
  • 一.理解iOS签名机制 网上有很多资料,这里不展开细说,重点参考这三篇文章: https://www.objccn...
    huig游影阅读 1,059评论 0 1
  • 前提: 游戏嵌入SDK,用Adhoc配置文件打出母包.ipa,其中渠道id存储在SDK的.bundle的plist...
    水晶兰阅读 4,538评论 2 4
  • 前言 由于最近做面向企业的SDK,经常会跟其它企业合作,公司同步需要测试他们的ipa包来验收功能,而好多公司并没有...
    he15his阅读 9,181评论 8 24