作者:FloatingGuy 转载请注明出处:https://floatingguy.github.io/


iOS Provisioning Profile(Certificate)与Code Signing详解

什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?

  • Explicit 表示唯一的app id, 即Bundle identifier
  • Wildcard 是含有通配符的App ID, 可以表示 一个组织,团体的应用。比如以 com.apple.*开头就是 苹果公司的 应用

什么是 苹果设备的 特征?

  • UDID (unique Device identify) 来唯一标识每台设备。
  • 使用itunes 和 xcode->window->Devices 可以查看到UDID。

什么是证书(Certificate)?如何申请?有啥用?

  • ios 证书分类:
    1. Development 证书 用来 开发 和调试
    2. Production 证书 用来分发应用
      每个开发者一共可以 将上面2类证书 各自注册 2个。

      (AWWDR签发的临时证书)

什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?

  • 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 颁布,即证书来源可信;
    • 再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。

什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?

  • 私钥签名,公钥验证。链式验证
    • Xcode 使用指定证书配套的私钥进行签名时需要授权,选择【始终允许】后,以后使用该私钥进行签名便不会再弹出授权确认窗口。

什么是(Team)Provisioning Profiles?有啥用?

  • 供应配置文件 (Provisioning Profiles)
  • 该文件包含的内容:App ID, 证书 和 设备ID
  • 打包App 到真机运行的流程:
    • 指明 App ID,并且验证 Bundle ID 是否与其一致;
    • 需要证书对应的私钥来进行签名,用于标识这个 APP 是合法、安全、完整的;
    • 如果是真机调试,需要确认这台设备是否授权运行该 APP。
  • Provisioning Profile 分类:
    • Development 分发app 使用
    • Distribution 提交给App Store 审核 (不需要指定 devices, 因为最终上架会给任何设备安装)
  • 构成
    (1)Name:该mobileprovision的文件名。
    (2)UUID:该mobileprovision文件的真实文件名。
    (3)TeamName:Apple ID账号名。
    (4)TeamIdentifier:Team Identity。
    (5)AppIDName:explicit/wildcard App ID name(ApplicationIdentifierPrefix)。
    (6)ApplicationIdentifierPrefix:完整App ID的前缀(TeamIdentifier.*)。
    (7)DeveloperCertificates:包含了可以为使用该配置文件应用签名的所有证书
    (8)Entitlements 键对应的
    (9)ProvisionedDevices:该mobileprovision授权的开发设备的UDID
  • ~/Library/MobileDevice/Provisioning Profiles 这个目录下存储这 所有的 Provisioning Profiles
  • Team Provisioning Profile 开发组供应配置文件

Xcode如何配置才能使用iOS真机进行开发调试?
多台机器如何共享开发者账号或证书?
遇到证书配置问题怎么办?
Xcode 7免证书调试真机调试