近日有用户表示企业版的几个APP相继出现了闪退,用户表示没有升级过iOS系统,之前使用也没有出现什么异常。我就意识到不好,貌似去年这个时间段就出过类似的事,但是当时因为我手滑,犯了更大的错,导致并没有注意到这是个问题,具有潜在的风险。仔细研究了一下,并且也拨打苹果客服进行了验证,得到的结论如下:
1,企业版帐号(年费$299,enterprise)每个distribution certificate(分发证书) 3年到期;
2,用企业版帐号签名的APP,它的provisioning profile(预配置文件)有效期是1年;
3,个人开发帐号(年费$99,personally)上述证书没有有效期,但是如果到期不续费,APP会被自动下架
对于企业版帐号或者APP provisioning profile过期的问题,苹果客服回答只能通过在到期之前对APP进行update来避免用户使用中出现问题。(我在网上看到有苹果MDM服务,可以在线update证书,没有用过,也没仔细研究)
那么问题的解决方法就是,每年都必须在证书(distribution certificate或者APP provisioning profile)到期之前,对企业证书发行的APP进行update操作。
苹果客服还建议,创建两个distribution certificate(一个帐号最多可以创建2个分发证书)两个时间是交叠的,在其中一个到期之前,使用另外一个签名APP并提示用户进行update,即可以避免证书到期还没有更新导致的APP启动后闪退的问题。
另外,我还注意到一个问题,provisioning profile是打包进ipa的,它在里面写明了APP使用的有效期(创建时间,过期时间和使用期限),至于具体是什么时间,与打包日期有关,与创建这个provisioning profile的时间有关。
对于provisioning profile已经过期的APP,再次打包时,选择cerficate后,provisioning profile中的时间就是当前打包的时间;但是对于那些provisioning profile还没有过期的APP,再次打包,还是使用旧的provisioning profile,creationTime(ExpirationDate)还是之前创建或者update时的时间。这个过期时间有可能与在member center上这个APP中查看到的时间不一致(有可能是生成了新的provisioning profile后,并没有安装到Xcode中)
还有一种情况,如果APP没有特殊的capabilities,那么就可以使用通用的provisioning profile,这个通常是XC:*,它的时间也是一年有效期。
因此,如果不能十分确定每一个打出来的ipa的有效期(过期时间),而又需要关注它具体什么时候需要强制用户update,最好是在要发行的ipa生成之后,查看其中的provisioning profile。具体方法:
1,解压ipa:右键->打开压缩包;
2,进入解压后生成的Payload目录;
3,右键app->显示包内容
4,找到文件:embedded.mobileprovision
5,用查看文本文件的工具打开这个文件,并转换编码为UTF-8。
补充一点,如果在控制台,直接:
# unzip xxx.ipa 得到Payload目录,然后
# cd Payload , 继续
# cd xxx.app,就可以看见包里的文件了,最后
# vi embedded.mobileprovision 就可以直接打开provision文件,不用再转换编码了
当然,更加方面的是在Finder里使用文件的预览功能啦,直接点embedded.mobileprovision ,预览里就能看到内容啦
转换为UTF-8后,这个provisioning profile文件大部分内容都是可读的,可以查看其中的CreationDate 和 ExpirationDate 是不是预期的时间,或者记录此时间,并在此之前安排用户update。
一旦用户错过了update,导致APP已经开始闪退了怎么办?
一个有效的解决办法是:调整用户设备时间,退回到APP过期之前。
这样APP就仍然是可以使用的状态,并不会闪退,如果APP其中包含升级的方式,连接等,用户就可以直接在APP中进行升级了,否则可能需要给用户提供其它的方式请用户重新下载。当然这些都是升级,并不需要用户删除原来的APP。
只不过,绝大多数用户都不喜欢调整自己设备的时间的,调整了别忘了调整回来,否则可能会导致很多奇怪的问题,比如push获取不到token之类~
==============
近日发现个人开发者账户(Personal, Individual)也即将到期,又仔细查看了一下Apple关于证书expire和remove的说明,贴图如下:
说明:
1)Enterprise 开发者账号,distribution certificate过期(或手动revoke)后,使用此证书签名打包的所有app将不能使用(打不开),需要重新生成证书并打包新的app进行安装;
2)Company或Personal(Individual)开发者账号,distribution certificate过期(或手动revoke)后,如果membership(年费)有效,已经上架的app不会受到影响,但是下次发行或者更新app时,需要生成新的证书并使用。