苹果超级签名实现分析
超级签名指的是将用户udid设备进行注册到苹果个人开发者账号下,并下载相应描述文件,将adhoc包通过描述文件签名后,分发给用户的操作。
为什么需要超级签名?某些原因,无法上架苹果商城,或者临时测试分发应用。那么,绕过苹果商城的方式大概三种:
使用企业包
使用adhoc包
使用苹果自家的TestFlight
企业包的弊端是频繁掉签,掉签后,玩家无法使用,提示未受信任的开发者。其次,企业账号申请困难,听说苹果已经停掉国内申请入口,市面上企业账号已经被炒到几十万RMB。好处显而易见,一个账号就可以搞定好多包。
adhoc包,adhoc包无法自主安装,需要在苹果后台添加设备信息后,指定设备才可以安装。缺点是无法大面积分发给用户自主安装,并且一个个人开发者账号,只能安装100台设备。优点是稳定不掉签。
苹果自家的TestFlight 的上架也是困难重重,审核复杂
实现adhoc包签名分发技术难点:
如何获取UDID
如何将获取到UDID,上传到苹果开发者中心【多个开发者,可能需要算法进行匹配】
如何将包含UDID列表的描述文件下载下来
如何使用下载的描述文件重新签名ipa包
大概流程图如下:
1.获取udid可以查看本人这篇博客 获取UDID
2.第二步上传开发者,和第三步下载描述文件,参考苹果开发者api接口 苹果开发者api接口
3.如何重签ipa,需要借助工具zsign 进行签名
以上都是基于Linux操作,方便快捷
遇到的问题:
问题一,api信息有误或被封或接口有误
{
"errors": [{
"status": "401",
"code": "NOT_AUTHORIZED",
"title": "Authentication credentials are missing or invalid.",
"detail": "Provide a properly configured and signed bearer token, and make sure that it has not expired. Learn more about Generating Tokens for API Requests https://developer.apple.com/go/?id=api-generating-tokens"
}]
}
这种错误一般有三种:
api证书或者其他信息有误
该开发者被苹果封掉了
苹果更新api参数了,需要去查看并修改为最新的接口
问题二,苹果更新开发协议,需要同意
{
"errors" : [ {
"id" : "6YHC2PB2QWSAV5XXXEEEG2KL4Y",
"status" : "403",
"code" : "FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED",
"title" : "A required agreement is missing or has expired.",
"detail" : "This request requires an in-effect agreement that has not been signed or has expired.",
"links" : {
"see" : "/agreements"
}
} ]
}