首先,先来了解一下iOS开发需要的证书已经这些证书究竟有什么用…
在IOS开发过程中,我们经常会遇到一些证书的问题,通常证书会直接影响到我们IOS开发的进度,所以对于证书的问题我们也有必要在这里讲解下。今天我们列举了几个常见的证书问题,以供大家后期遇到了方便解决。
当一款App在别人的机器上开发和发布,现在迭代更新和开发需要在一台新mac机上开发和发布。(使用同一个开发者账号)
出现的问题:
1、在新mac机器上开发并导入真机测试,是不是需要从别人的机器上面导处开发者证书、开发者授权文件和开发密钥导入到新mac机器上才能开发?
2、程序迭代开发完成,App上传苹果应用商店的时候是不是还需要用老机器发布才可以才能保证App更新?能不能从老机器上面把发布证书导入到新机器上,用新机器发布App?
解决方案:
App开发和发布过程中证书基础知识:
1. Certification(证书)
证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:
1) Developer Certification(开发证书)
安装在电脑上提供权限:开发人员通过设备进行真机测试。
可以生成副本供多台电脑安装;
2) Distribution Certification(发布证书)
安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。
不可生成副本,仅有配置该证书的电脑才可使用;(副本制做介绍在下面Keychain中介绍)
2. Provisioning Profile(授权文件)
授权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。
开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。
授权文件分为两种,对应相应的证书使用:
1) Developer Provisioning Profile(开发授权文件)
在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。
注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。
2) Distribution Provisioning Profile(发布授权文件)
在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。
发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID;
测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。
3) Keychain(开发密钥)
安 装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子 上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。
注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限。
上面的证书基础知识可以看到开发者证书可以导入到新电脑上用于开发和真机测试,发布证书不可以导入新电脑用于App发布。所以问题出现了那以后版本迭代更新怎么办?
针对问题1:通过导入开发者证书、密钥和开发授权文件(导入测试机)可以实现用新的电脑在真机上开发和测试,其实这个方法解决的问题应该是如何在不想让别人知道自己开发者账号的前提下让多台mac机同时可以开发在真机上测试的App;假设现在你知道开发者账号密码你完全可以通过你的开发者账号在自己机器上重新生成开发者证书、开发密钥,然后通过你信生成的开发者证书和开发授权文件进行真机开发测试。
针对问题2:不能通过导入发布证书的方式在新电脑上更新迭代App;那怎样才能在新mac机上面进行迭代的App发布那,难道必须只能在老机器上面进行迭代发布吗?毫无疑问肯定是可以在新机器上进行迭代APP的发布的,这中间涉及到苹果App商店的升级机制:针对同一个开发账号下面同一个App只要版本号比当前版本号大都会自动提示用户有新版本。所以你可以在你新mac电脑上面从新创建一个发布证书,通过这个发布证书进行发布。
———————————————————————————————————-
那么,怎么获得这些证书呢??
开发者证书
首先你必须获得apple开发者证书,上图这个文件就是apple开发者证书,只要有apple的开发者账号就可以下载到,此证书可以直接到
developer.apple.com –>
Member Center –>
Certificates, Identifiers & Profiles, Certificate –>
Certificates –> Add Certificates 里面下载到
那么这个文件有什么用处? 后文再说!
其次需要理解 Certificate, Identifier, Devices, Provisioning Profiles
Certificate
用于给应用程序签名(只有签名过的应用程序才能保证其来源是可信任的,代码是完整的,未经修改的), 在项目的Project | Targets —–> Build Settings —–> Code Signing Identity里面指定
我们如何给应用程序签名?
申请Certificate之前需要申请一个 Certificate Signing Request(CSR) 文件,这个文件是保存在我们的mac的(keychain)里面的, 此文件包含了(公钥和私钥), 而我们的应用程序签名是使用私钥来签名用公钥来进行验证, 而苹果生成的Certificate 只包含了公钥, 当你用自己的私钥签名后,苹果会用公钥来进行验证,确保是你自己对程序签名而不是别人冒充的。
首先是申请CSR文件,打开Keychain Access
然后依次点击
注意 Request a Certificate from a Certificate Authority …
如果没有这个选项的话,还记得文章开头的那个AppleWWDRCA.cer证书么,对了就是它,安装它后就OK啦
再然后common name随便填, CA Email Address 留空, 再点击continue 继续
OK, CSR文件就生成了
那么上一步说的CSR文件包含了public key 和 private key我们就可以在Keychain Access里面看到了
CSR文件生成之后就要生成Certificate了, 进入Developer页面(Certificates, Identifiers & Profiles) –> Certificates —> +
选择证书类型 (Development or Production)
上传提供之前创建的 Certificate Signing Request(CSR)文件
下载生成好的Certificate 文件
双击安装(特别提示:如果以前有安装过此开发者证书且名字相同,双击安装极有可能不生效,需要做的是直接把此Certificate文件拖入到Keychian Access的Login里面,当然如果以前的没用的可以删除, --- 通过搜索iphone developer可以找到)
Identifier:
作用?
顾名思义App ID(application id, not apple id), 对于你的一个或者一组app他们的唯一标识, 这个App ID跟你Xcode中的Targets -----> General-----> Identity中的Bundle Identifier是匹配的,(其余的那些推送服务啊什么的都是配置在APP ID下面的) 如下图:
Provisioning Profile
一个Provisioning Profile包含了上述所有内容 Certificate && App ID && Device, 这个Provisioning Profile文件会在打包时嵌入到.ipa的包里,如下图:
所以一台设备上运行应用程序的过程如下(以Developer Provisioning Profile为例):
1 检查app 的 bunld ID 是否 matches Provisioning Profile 的 App ID
2 检查 app 的 entitements 是否 matches Provisioning Profile 的 entitements
3 用Certificate来验证签名签名
4 检查此设备的UDID是否存在于 Provisioning Profiles中 (仅在 非发布证书中)
如何创建?
在 Provisioning Profiles 中点加号,然后依次选择App ID, Certificate, Devices(development),再指定名称,最后下载, 双击则安装到Xcode中
Xcode中的配置
Project && Target 的 build settings 中搜索Code sign…
然后分别选好对应的证书,如果选择列表中没有刚才创建的证书可以双击直接复制名字上去
关于推送服务
基于上面的操作,如果需要推送服务我们还需要申请一个推送证书
依次进入 Certificates —>Production —>Apple Push Notification service SSL (Production)
然后选择需要推送服务的App ID
再选择前面创建的.cerSigningRequest文件
最后点击generated生成推送证书