前段时间,项目的发布证书过期了,于是整理了一番,简单总结一下吧。
初步了解
开发和发布iOS App,必须加入苹果的开发者计划(Apple Developer Program)。
苹果开发者计划,有两种:
- 个人版(Individual $99/Year)
- 企业开发(Organization $299/Year)
目前多数个人开发者和一些规模不太大的企业,都是使用个人版。
从开发角度来讲,企业版对于个人版最大的不同在于,可以进行企业发布。
企业发布打包的ipa,通过fir.im和蒲公英等第三方来发布。
任何人都可以安装这个App,不必通过苹果的审核。
但也是有一些限制,例如证书如果无效了,App就打不开了。
数目好像也有限制。了解的童鞋,请留言。这里不深入。
申请步骤也没什么特别,一步一步按要求填写就OK,这里直接跳过了。申请地址
申请成功后,进入开发主页,点击账户,进入账户主页.
点击 Certificates,IDs & Profiles进入证书管理。
可以看到证书是分为3种来进行管理,请避免不小心选错的尴尬。
- iOS,tvOS,watchOS
- macOS
- Safari Extension
Keys 是新出的一个东西,相关内容如下,这里不作深入。
(翻译)创建一个key可以用来配置和认证一个或者多人苹果服务。不像证书,keys是不会过期的,而且创建后依然可以修改来使用更多服务。更多关于创建和使用keys的信息,可以通过创建key时候,点击相关的链接来了解。
接下来是手动管理signing的部分。
如果你只使用Automatically manage signing,可以跳过该部分。
Automatically manage signing会自动创建证书。
由于我们团队的管理是比较开放的(每个童鞋都知道开发者帐号密码)。A童鞋自动创建好的,B童鞋再自动创建,如果数量超出限制,会导致之前的证书被revoke了,无法使用。
所以后来我们团队关闭自动管理,避免相互影响。
手动创建
开发和发布App最基础的三个东西。
- Certificates (证书)
- Identifiers (App ID相关)
- Provisioning Profiles (配置文件)
第一步,先创建App ID。
-
填App描述,即App名,不过此名非真正显示的App名,只是在配置证书使用的名字。
填写App ID,即app的bundle ID
即创建工程的时候,如下图位置的id:
回过头来想,开发一个App最先应该做的应该是申请App ID,应为App ID在不允许和其他App(整个App Store)重复,具有唯一性。如果重复只能老老实实修改。
Wildcard App ID 请忽略,想了解用途的戳我。
-
勾选相关服务
这里选择了推送和App Group(App Group将在下一篇讲到)。
Continue , Register,Done 完成App ID的创建。
创建证书
-
选择证书类型
Development开发证书
- iOS App Development
不含推送服务的开发证书,该证书与App关联(即创建时需要选择App ID,并仅供选择的App开发使用)。
如果App不含推送服务,创建改证书。
如果App含推送服务,可以不创建。 - Apple Push Notification service SSL (Sandbox)
供关联的App使用的,含推送服务的开发证书。
如果App含推送服务,创建该证书,否则推送服务无法开发测试。
Production发布证书
App Store and Ad Hoc (限制创建两个)
供所有app开发使用,不和App关联。
如果原来发布app,可以使用原来的发布证书。Apple Push Notification service SSL (Sandbox & Production)
供关联app product环境推送使用,先要安装到电脑中,导出P12文件给后台开发人员使用。
发布证书,有的称之为生产证书,Production,个人习惯叫发布证书,对应develop 和 Release。
简单总结:
含推送App需要3个证书
不含推送App需要2个证书
-
选择App
-
创建证书请求文件
打开Keychain,从证书颁发机构请求证书,很好理解,就是从苹果那请求证书。
我们选择存到磁盘的方式,填写电子邮件
选择存储位置,修改名字,例如testapp.certSigningRequest
-
上传csr文件
回到网页端,contine后,会要求我上传CSR文件。
-
创建成功后,下载,双击安装,然后在Keychain里就能看见了。如果可以展开,含专用密匙,则正常。
什么时候会出现不能展开的情况呢?
当我用A电脑生成csr,请求的证书,下载后,直接安装在B电脑上。就是不能展开。那么怎么在B电脑上也能正常使用证书开发?这个将在下面解答。
使用同样的方法创建两个发布证书,CSR文件可以用同一个。
创建Provisioning Profile文件
Provisioning Profile是依赖证书,App ID,注册设备的配置文件,同样有开发和发布两种。
Provisioning Profile下文将简称为Profile。
-
选择类型
已注册设备将在下面介绍。
-
选择App ID
选择证书
- 如果为这个App创建了多个证书,可能会有多个选择。可能只选择其中一个,多个,或者全选。
- 如果名字都一样,不知道是哪个,全选是比较稳的。
- 选择多个或者全选,有什么缺点呢?就是其中任意一个证书失效,则这个Profile文件也就失效了。需要重新Generate。
重新Generate并不是重新创建。这个也将在下文提到。
-
选择设备
建议全部选上,这里选择就是注册设备。
-
输入profile的名字,例如testAppDev。
这名字最好统一几。因为一些无效的profile,xcode并不会自动清除,强迫症患者会觉得不爽。
-
完成profile文件的创建。
profile文件通常不会直接从网页下载,而是在Xcode中下载。
发布的profile文件,使用同样的方式创建,不同的是,没有选择设备这个步骤,毕竟发布是面向所有设备(App Store)的发布。
Ad Hoc发布方式,即面向已注册设备的发布方式。当我们需要对所有已注册设备发布Release包,适合使用这种发布方式。这种也是需要选择设备的。
Ad Hoc发布方式可以通过fir.im和蒲公英等第三方来发布,已注册设备就能扫码安装了。
创建是注意有多个发布证书时,注意选择对应你电脑上安装的发布证书,如下图:
细心的童鞋会发现这里怎么有3个,不是限制两个吗?
恩,其中有个无效的。限制有效证书两个,可能会产生无效的证书。
上文提到,App Store and Ad Hoc创建时是不和App关联。那它发布时是怎样和我们开发的App建立关系呢?
恩,就是靠这个profile文件。
三种profile,我们都创建,分别是testAppDev,testAppDis, testAppAdHoc。
补充一句:profile文件貌似没有限制个数,但我们正式开发的时候,还是建议不要太随意。
我使用含推送功能的App为例,安装好上面的3个证书,创建好3个profile文件后,我们进入下一步。
Xcode配置
关闭Automatically manage signing
下载profile文件
选择对应的profile文件
如果Signing这块没有报错,那么我们针对这台电脑的配置完毕了。
添加新的注册设备
新的iPhoneX或者是旧的iPhone4S,如果没有注册过,不能安装我们测试的ipa,也不能进行真机调试,真机调试会出现下面错误:
如果有人对你喊,测试包安装不了,第一个先检查设备注册过没有。
在关闭了Automatically manage signing后,需要我们手动注册。
注意,注册设备的数量是有限的。
填入UDID后,register。
更新profile文件
注册了设备,还要更新那些关联了设备的profile文件,这样profile文件才有效。
回顾一下3个profile文件中哪些关联了设备?
没错,testAppDev和testAppAdHoc。
testAppAdHoc同样的方式重新Generate后,错误变成如下,直接点击Update就OK了。
证书变动,注册设备的disable或者删除,导致profile文件失效,都可以重新Generate一下来重新生效。
推送证书的导出
在keychain中找到对应的推送证书,分别为开发和发布(生产)环境。
右键导出p12文件,会要求你输入密码,并把导出密码两个文件已经交给后台开发人员即可。
下一篇,Part2,将主要小结多台mac的部署,App Group以及configuration相关的证书配置。