一、ProvisioningProfile
xcode将全部的配置文件放在~/Library/MobileDevice/Provisioning Profiles文件中
1、开发组供应配置文件
-
Xcode中添加Apple Developer Account时,它将与Apple Member Center后台勾兑 自动生成iOS Team Provisioning Profile(Managed by Xcode)。由xcode管理,与手动在Apple Member Center注册的配置文件不同。
-
账户里所有的Development Certificates和Devices都可以使用它在这个team注册的所有设备上调试所有的应用程序
-
需要登录APP的开发者账号。
-
账户里该APP的所有的Development Certificates和Devices都包含在内
2、供应配置文件
1)Development:一个Provisioning Profile对应一个Explicit App ID或Wildcard App ID(一组相同Prefix/Seed的App IDs),需要依次指定App ID(单选)、证书(Certificates,可多选)和设备(Devices,可多选),然后用户手动下载安装,需持有对应的证书(自己生成的或向他人索取)。
2)Distribution:App ID为Wildcard App ID(*)
Devices(0,unlimited)
二、证书
普通个人开发账号最多可注册iOS Development/Distribution证书各2个;****Only a team agent or an admin can create a distribution certificate.
-
缺少证书时通过Xcode Fix Issue自动请求证书,这里通过Keychain证书助理从证书颁发机构请求证书 CSR:Certificate Signing Request
-
根证书:Apple证书颁发机构WWDRCA(Apple Worldwide Developer Relations Certification Authority),使用private key对CSR中的public key和一些身份信息进行加密签名生成数字证书(ios_development.cer)并记录在案(Apple Member Center)。
-
从Apple Member Center网站下载证书到Mac上双击即可安装(当然也可在Xcode中添加开发账号自动同步证书和[生成]配置文件,但是同步下载的证书不包含私钥,无法进行签名,如果证书不是本地创建,需要从外部导入)
-
Certificate被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Identity】
三、签名
1.Code Signing Identity
- Xcode中配置的_Code Signing Identity_(entitlements、certificate)必须与_Provisioning Profile_匹配,并且配置的Certificate必须在本机Keychain Access中存在对应Public/Private Key Pair,否则编译会报错。
- Xcode所在的Mac设备(系统)使用CA证书(WWDRCA.cer)来判断Code Signing Identity中Certificate的合法性
若用WWDRCA公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃AppleWWDRCA发布,即证书来源可信;
再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。
2.Code Signing
- 每个证书(其实是公钥)对应Key Pair中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)。
3.Verify Code Signature with Certificate
公钥和其内容摘要包含在证书中,证书被WWDRCA公钥加密包含在描述文件中,然后跟随APP被安装到真机中。
-
App在Mac/iOS真机上启动时,需要对配置的bundle ID、entitlements和certificate与Provisioning Profile进行匹配校验
-
iOS/Mac真机上的ios_development.cer被AppleWWDRCA.cer中的 public key解密校验合法后,获取每个开发证书中可信任的公钥对App的可靠性和完整性进行校验。
**iOS/Mac设备(系统)使用App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:**若用证书公钥能成功解密出App(executable code)的内容摘要(Signature),证明此App确乃认证开发者发布,即来源可信;再对App(executable code)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此App(executable code)未被篡改过,即内容完整。
五、共享证书
- 可导出包含Apple id/code signing Assets信息的*.developerprofile(Exporting a Developer Profile)文件供其他机器上的Xcode开发使用(Import该Account)
- 从Apple Member Center网站下载手动创建的描述文件,不下载对应的证书
导出.p12文件,PKCS12 file holds the private key and certificate。
其他Mac机器上双击Certificates.p12(如有密码需输入密码)即可安装该共享证书。有了共享证书之后,在开发者网站上将欲调试的iOS设备注册到该开发者账号名下,并下载对应证书授权了iOS调试设备的Provisioning Profile文件,方可在iOS真机设备上开发调试。
Xcode配置反应有时候不那么及时,可刷新、重置相关配置项开关(若有)或重启Xcode试试。
自己的账号在调试公司或其他第三方APP代码时,若填写 Bundle identifier 为他人账号注册的 APP ID(例如苹果相机应用 com.apple.camera),会报错:No provisioning profiles with a valid signing identity (i.e. certificate and private key pair) matching the bundle identifier “com.apple.camera” were found.即使编译通过了,可能运行时APP自身与服务器校验也可能会报签名错误,肿么办???
Her skill:此时,可以在他人原有App ID基础上添加后缀(例如com.apple.camera.extension),配置成应用的衍生插件(相当于置于同一 App Group 下)就可以快乐的玩耍了