苹果证书配置可算是花了不少时间研究,一些操作步骤记录于此。
苹果开发者是一年99刀,约合人民币为788块钱。在帐号即将到期之时,心里会思考,是否需要提前续费?如果提前续费了证书是从什么时间开始算?一旦续费是所有证书都需要更新一遍吗?没来得及更新证书,线上app还能正常使用吗?
其实在快要到期时,苹果就会给你发邮件,以及登录苹果开发者后台也会看到快到期的提示,如果有链接入口就可以直接点击进去续费,如果没有链接,说明会自动续费,只要绑定的信用卡有效。其实开发者帐号到期,跟各种证书的到期时间并不一致,开发者帐号续费并不能续证书的时长,所以证书还是要更换的,考虑到证书的到期时间不一致,与其陆陆续续的更新,不如一次性全更新了。好像只要证书有效,线上app使用是正常的,只是开发者帐号过期会提交不了新版本。
跟很多支付平台类似,开头第一件事就是创建自己的加密钥匙对,开发者后台(https://developer.apple.com/account/)也有操作步骤的:
打开keychain access,然后选择如下选项:
然后填写一些基本信息,将CA Email Address留空,选择Saved to Disk,就成功生成自己密钥对了:
文件形式如这样:
其实这就是一个csr证书,而私钥存在了生成该证书的电脑里,接着我们就可以上苹果开发者后台生成其他证书文件了。
Certificates是证书,生成证书的过程中就需要上传上一步中生成的csr:
证书分很多种类型,比如推送用的证书、开发用的development证书、真机测试用的adhoc证书、发布app用的证书,也分很多平台,Mac、iOS之类,以及ALL表示通杀一切的平台。证书还会有数量限制,比如发布app用的证书限制只能创建2个,否则就会显示已达上限:
总之,我们需要创建两个证书,一个是development的,一个是distribution。distribution用于adhoc测试,也用于提交appstore的发布。
Identifiers 就是包名的唯一标识符,xcode在打包时,会检查当前项目的bundle id跟证书里的identifier是否一致。默认有一个*号通配类型,但实际发现通配类型的无法选择APNs推送服务,所以还是老老实实每个app创建一个identifier。
创建identifier时,选择App ID,再选择app,再填写上app bundle id,同时勾选上需要的服务,比如Push Notifications之类。
Profiles 感觉就是一个加强版的证书,一个app一般需要创建三种类型的Profiles,可以分别命名为app-dev,app-adhoc,app-dis,分别对应了开发、测试、发布三种场景需求,所以如果你有4个app,你就要创建12个Profiles。生成的文件在mac下双击就可以导入到xcode了。
Profiles是有有效期的,可以随时创建,也可以随时吊销(invoke).
另外,还有一个Devices,其实就是测试机的设备ID,用于让没上架的app也能在真机上测试。
假设我们是在生成密钥对的Mac上配置xcode,我们先打开keychain Access,选择login,就会看到很多证书,如果以前有过期的Apple Development和Apple Distribution打头的证书,可以删除掉。然后从开发者后台的Certificates下载development和distribution的证书,双击就会自动安装到keychain里,此时注意证书是带私钥的:
然后从开发者后台的Profiles下载对应app的Profiles文件,也是双击就会导入到xcode:
如果Provisioning Profile里没有出现候选项,可能是没有登录苹果帐号,登录即可(有时候很恶心,需要先删除帐号,再重新登录才行):
如果过往有很多过期或者错误的Profiles导入了,可以通过如下命令进行清理:
rm -rf ~/Library/MobileDevice/Provisioning\ Profiles/*
选择好Profile,没有标红,即表示正常,就可以打包了。选择Product -> Archive就是给Appstore打正式发布包。
但往往容易出现各种各样的问题,举例一些错误:
『Provisioning profile doesn't support the Push Notifications capability』,生成的Profile里选择的identifier没有选择Push Notifications导致;
『Provisioning profile doesn't include signing certificate』,可能certificates没有导入正确,也可能有同步过期的证书干扰了,也可能重启一下xcode就能ok;
假如是另一台Mac上的Xcode,你安装完Profiles和Certificates之后,可能会遇到:『"Missing Private Key" for xcode apple provisioning』的错误,原因在于密钥对的私钥没有导入到此台Mac,可以发现keychain里的证书是有的,但是前面没有小三角,也没有显示private key。此时需要原来创建密钥对的Mac上右键导出私钥为p12格式:
然后在目标Mac上双击导入。