1 证书申请流程介绍
1.1 Certification(证书)
证书是用来给应用程序签名的,只有经过签名的应用程序才能保证来源是可信任的,并且代码是完整的, 未经修改的。在Xcode Build Setting的Code Signing Identity中,你可以设置用于为代码签名的证书。
基本证书(非推送通知证书)
Developer Certification(开发证书)安装在电脑上提供权限:开发人员通过设备进行真机测试。可以生成副本供多台电脑安装;
Distribution Certification(发布证书)安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。不可生成副本,仅有配置该证书的电脑才可使用。
1.2 appID
什么是appID: 例如WNP的APPID:com.chinanetcenter.wspushapp,它是每一个应用的独立标识,在设置项中可以设置Services,也就是其所使用的额外服务,比如是否用到了
PassBook,GameCenter以及常见的push服务,如果选中了push服务,我们的应用有用到推送功能,必须生成第3条所的推送证书。
1.3 推送证书
分为开发和发布两种,分别为APNs Devlopment(开发用推送证书)和APNs Production(发布用推送证书)具体内容如下:
该证书在appID配置中创建生成,和开发者证书一样,安装到开发电脑上。
Development
App Development (1年):用来开发和真机调试应用程序。
Push Development (1年):用来调试Apple Push Notification
Production
In-House and Ad Hoc (3年):用来发布In-House和AdHoc的应用程序。
App Store :用来发布提交App Store的应用程序。
MDM CSR
Push Production (1年):用来在发布版本中使用Apple Push Notification。
1.4 Provisioning Profile(描述文件)
描述什么:描述文件里边包含了App ID , Certificates , Devices. 说明生成描述文件需要用到这些信息.
如果我们要打包ipa或者在真机上运行一个应用程序,我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且验证Bundle
ID是否与其一致;再次,如果是真机调试,需要确认这台设备能否用来运行程序。而ProvisioningProfile就把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们
只要在不同的情况下选择不同的profile文件就可以了。而且这个Provisioning Profile文件会在打包时嵌入.ipa的包里。
如下图所示,一个用于Development的Provisioning Profile中包含了该ProvisioningProfile对应的App ID,可使用的证书和设备。这意味着使用这个ProvisioningProfile打包程序必须拥有
相应的证书,并且是将App ID对应的程序运行到Devices中包含的设备上去。
如上所述,在一台设备上运行应用程序的过程如下:
证书一样,Provisioning Profile也分为分为Distribution、和Development两种类型
(注:前面提到不同账户类型所能创建的证书种类不同,显然Profile文件的种类是和我们创建的证书种类相关的)
Development (1年)
Distribution (1年)
In House(WNP用到的,是企业分发的生产pp文件)
Ad Hoc
App Store
In House 与Ad Hoc的不同之处在于:In House没有设备数量限制,而Ad Hoc是用来测试用的,AdHoc的包只能运行在该账户内已登记的可用设备上,显然是有最多100个设备的数量限制。
所以这两种Provisioning Profile文件的区别就在于其中的设备限制不一样而已,而他们所使用的Certificate是相同的。
1.5 制作证书大致流程
制作流程大致按照以上序列进行:
申请证书
加入设备
生成Provisioning Profile
设置Xcode Code Sign Identifer
2 更新证书和文件时遇到的问题
2.1 更换推送证书需要哪些操作
见第三章证书申请流程
及时删除过期的证书,登录apple网站重新导出push certificate,生成对应的p12,上传到极光后台即可。
2.2 更换推送证书对旧版本的app有没有什么影响?对pp文件有什么影响?
推送证书是和APPID绑定的,苹果推送机制也是通过识别APPID来实现对该应用的推送,所以更新推送证书,保证APPID没有变化,对旧版本的app没有影响。
更换APNS证书不用重新制作pp文件,没有影响。
2.3 Provision Profile文件过期的有什么影响?
pp文件是打包到软件包中的 要是和pp相关的证书变更或者过期,整个app就用不了.
遇到的问题:
运行已经安装好的app ,启动就闪退。根本运行不了
连接设备,查看打印日志(Xcode 下下Device-》Device Log)。 其中打印一条
报错提示:
The executable was signed with invalid entitlements.
解决方法:
重新编辑下描述文件并下载安装好。即解决。
2.4 根证书过期旧版本的app有没有什么影响?对pp文件有什么影响?该怎么操作?
基证书过期后会影响到pp文件对此应用程序appid的校验,无法识别导致app不能使用,该pp文件也无效了。
这时候应该
编辑新的根证书,
在kaychain中打开安装后,
在开发者网页那边的发布证书,选择新编辑的那个,重新生成mobileprovision,下载下来,安装。
2.5 创建证书的过程中证书的种类有哪些?区别是什么?
Development(1年):
iOS APP Development真机调试证书
Apple Push Notiifaction Service SSL (Sandbox)推送调试证书,直接用 Xcode 调试到设备的 App 需要调试证书推送通知。
Production(1年):
App Store and Ad Hoc发布证书,App Store、Ad Hoc 发布方式都需要这个证书来签名。
Apple Push Notifiaction Service SSL (Sandbox & Production)推送正式证书,AppStore、In-House、AdHoc 都需要用正式推送证书推送通知。
2.6 什么是CSR?怎么生成?
当CSR文件创建的时候,会自动生成一对私钥和公钥.私钥存储在本地电脑.mac上,私钥存储默认存储在登录钥匙串中,可以在钥匙串的分类钥匙下查看.请求到的证书会包含公钥部分.
证书拿到手,最重要的一件事是如何证明这个证书是你的.不是假的,不是别人的.
CSR就提供了如何证明的方法.
CSR生成的同时,生成一对私钥公钥,私钥保存在本地,用来加密数据或者解密公钥加密的数据.公钥包含在CSR中,Apple用来加密数据及解密私钥加密的数据.这样就像把数据放在带锁的箱子中传递,使得Apple可以通过公钥来验证你就是你.
钥匙串访问-》证书助理-》从证书颁发机构请求证书-》保存到磁盘,用于接下来创建开发或生产证书时上传刚刚生成的后缀为 .certSigningRequest 的文件。
生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件。生成证书结束后,双击,会在“KeychainAccess”中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件
2.7 为什么要通过.p12来传递证书?
因为直接从Apple下载的证书只有公钥,没有私钥.没有办法证明这个证书是你的(潜台词:没有办法证明你有这个权利).而从本地钥匙串中导出.p12文件是包含私钥的,换句话说,可以把证书上描述的权利赋予他人.
在极光控制台上,进入你应用的应用设置中 iOS 的鉴权方式选择 “证书”,上传刚才导出的 .p12 证书。极光会在后台为你的应用进行鉴权。
2.8 Keychain(开发密钥)
安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本(导出证书重新命名)就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。
注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限.
3 证书申请流程
登陆iOS Dev Center选择进入iOS Provisioning Portal。
在iOS Provisioning Portal中,点击App IDs进入App ID列表。
创建 App ID,如果 ID 已经存在可以直接跳过此步骤
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。
配置和下载证书
如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。
新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)
点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。
根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request。
填写“User Email Address”和“Common Name” 后选择 Saved to disk 进行保存 。
继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。
下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。
在“钥匙串访问”中你的证书会显示在“我的证书”中,注意选择“My Certificates” 和"login"
导出 .p12 证书文件
注意要选“login”和“My Certificates” 导出证书时要选中证书文件,不要展开private key。
将文件保存为Personal Information Exchange (.p12)格式。
将文件保存为Personal Information Exchange (.p12)格式。
上传证书
在JPush 管理 Portal 上,针对某应用程序,上传上面步骤得到 .p12 证书文件。这是 iOS SDK 能够接收到 JPush 推送消息的必要步骤。
Provisioning Profile的创建
创建Provisioning Profile的前提,已在Apple Developer网站创建待发布应用所使用的Bundle ID的App ID,且为该App ID创建了APNs证书,如下图:
创建App ID、APN证书和p12证书的导出的具体步骤请看 :iOS 证书 设置指南
在苹果开发者账号的Provisioning Profile页面点击下图按钮,创建Provisioning Profile
选择此Provisioning Profile的环境后点击[Continue]:
选择要创建Provisioning Profile的App ID后点击[Continue]:
选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:
为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:
给该Provisioning Profile填写Profile Name,点击[generate]完成创建。
填写完Profile Name后点击[generate]完成创建,之后点击[DownLoad]下载Provisioning Profile
双击下载下来的Provisioning Profile,添加到xcode。
XCode的证书配置教程
参照iOS SDK 集成指南集成JPush SDK 和上传了推送用到的p12证书后在编译运行前需要先配置一下证书,步骤如下:
打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:
点击项目,选择目标TARGETS后进入Build Setting 界面,搜索“Code signing”,按照下图配置