最近的需要上线项目,遇到了一些问题,发现自己对配置证书的各个部分的含义理解的还不是很好。
本文不会去整理证书的配置过程,主要讲解的是 证书,CSR文件,设备,App ID,以及一些出现的报错信息
(1)证书
对于想安装真机或者发布到AppStore的应用程序,只有经过签名验证才能确保来源可信,并且保证App内容的完整、未经过篡改。
(a)iOS 系统 和 Mac OS X系统会自动安装AppleWWDRCA.cer这个中间证书。它实际上就是iOS证书的CA,其公钥用于解密认证证书的可靠性。如果没有安装过这个证书,这个就需要下载安装。
第一种:开发证书 用于开发过程中真机测试
第二种:发布证书,用于发布到商店使用的
(2)Identifiers 标识符
App ID是一个用来标识我们应用程序App的。每个应用程序都有一个唯一的App ID也就是我们工程中看到的Bundle ID。
分类两种
(a)Explicit App ID
这种标识符用来标识一个唯一的应用程序。和Bundle ID 一致的。
(b)Wildcard App ID 通配符 App ID 他可以标识一组应用程序
(b1)第一种用*创建App ID 他可以标识所有的应用程序
(b2)第二种是com.toDream.* 创建App ID 他可以标识以com.toDream 开头所有应用程序。
使用方法:
在我们新建工程的时候,当你选择完需要创建的工程的时候点击下一步,需要给工程起名字。第三项Originzation Identifier 组织机构标识这里写上 com.toDream就可以了。
(3)Devices设备
我们需要开发和调试的设备,这里使用的是UDID来标识,查看UDID的方法:打开Xcode,选择window,选择Device。就可以查看到了
如果是99美元的个人或者公司开发者账号只能够添加100台设备。每个Devices有效期一年。一旦添加就无法删除。
(4)描述文件 PP
描述文件包含以上三种信息:证书、AppID、设备的Devices。
一个Provisioning profile对应一个Explicit App ID 或者 Wildcard App ID (一组相同的App IDs)
PP决定Xcode用哪个证书(公钥/私钥)来签署应用程序。在应用程序打包是嵌入到.ipa 包中。
Xcode将全部供应配置文件 ~/Library/MobileDevice/Provisioning Profiles下
一个PP文件包含的内容 *.mobileprovision
(a) Name:mobileprovision 的文件名称
(b) UUID : mobileprovision 的真是文件名
(c)TeamName:Apple ID 账号名
(d)TeamIdentifier : Team Identity
(e)AppIDName :explicit/wildcard App ID name(ApplicationIdentifierPrefix)
(f)ApplicationIdentifierPrefix 完整App ID的前缀(TeamIdentifier.*)。
(g)DeveloperCertificates 包含了可以为使用该配置文件应用签名的所有证书<data><array>。
(5)CSR文件
我们在使用Keychain证书助理手动申请开发证书时,keychain讲生成一个包含开发者身份信息的CSR文件,同时,keychain Access|Keys中会新增一对Public/Private 钥匙对。
Private key用于签名 始终保存在Mac OS的钥匙串中;Public key一般随证书散步出去,对签名进行校验认证。
在Apple开发网站上传这个CSR文件,Apple证书颁发机构WWDRCA将使用private key对CSR中的public key和一些身份信息进行加密签名生产数字证书(iOS_development.cer)并记录在Apple MemberCenter
从Apple MemberCenter 网站下载证书到Mac上双击即可安装。这是在药匙串中,找到创建CSR时,生产的Key Pair中的私钥的箭头可以查看到包含对应公钥的证书
(6)多台机器上实现开发账号的/证书共享
若在Xcode Preferences添加了该Accounts,选中Team条目|ViewDetails:可以查看Signing Identities和Provisioning Profiles。
- 选中欲导出的Account,点击+-之后的☸|ExportAccounts,可导出包含account/code signingidentity/provisioning profiles信息的*.developerprofile(Exporting a Developer Profile)文件供其他机器上的Xcode开发使用(Import该Account)。
- 选中欲导出的Signing Identity条目,点击栏底+之后的☸|Export,必须输入密码,并需授权exportkey "privateKey" from keychain,将导出Certificates.p12;或在Keychain Access|Certificates中选中欲导出的certificate或其下private key,右键Export或者通过菜单File|Export Items导出Certificates.p12。
其他Mac机器上双击Certificates.p12(如有密码需输入密码)即可安装该共享证书,在开发者网站上将欲调试的iOS设备注册到该开发者账号名下,并下载对应证书授权了iOS调试设备的Provisioning Profile文件即可在iOS真机设备上开发调试。
(7).证书配置常见错误
1. Xcode Target|Genera|Identity Team下提示"Your build settings specify a provisioning profile with the UUID "xxx",howerver, no such provisioning profile was found."
Xcode Target|BuildSettings|Code Signing|当前配置的指定UDID的provisioningprofile在本地不存在,此时需要更改Provisioning Profile。必要时手动去网站下载或重新生成Provisioning Profile或直接在Xcode中Fix issue予以解决(可能自动生成iOS Team ProvisioningProfile)!
2.Build Settings|CodeSigning的Provisioning Profile中选择了本地安装的provisioningprofile之后,Code Signing Identity中下拉提示No identities from profile “…”or No identities from keychain.
Xcode配置指定UDID的provisioning profile中的DeveloperCertificates在本地KeyChain中不存在(No identities are available)或不一致(KeyPair中的Private Key丢失),此时需去网站检查ProvisioningProfile中的App ID-Certificate-Device配置是否正确。如果是别人提供的共享账号(*.developerprofile)或共享证书(*.p12),请确保导出了对应Key Pair中的Private Key。必要时也直接在Xcode中Fix issue予以解决(可能自动生成iOS Team ProvisioningProfile)。
3."Invalid application-identifier Entitlement"or "Code Signing Entitlements file do not match those specified in your provisioning profile.(0xE8008016)."
(1)检查对应版本(Debug)指定的*.entitlements文件中的“Keychain Access Groups”键值是否与ProvisioningProfile中的Entitlements项相吻合(后者一般为前者的Prefix/Seed)。
(2)也可以将Build Settings|Code Signing的Provisioning Profile中对应版本(Debug)的Entitlements置空。
4.Xcode配置反应有时候不那么及时,可刷新、重置相关配置项开关(若有)或重启Xcode试试。
参考文档
http://blog.csdn.net/crazyzhang1990/article/details/46447721
http://www.bkjia.com/Androidjc/942754.html