zoukankan      html  css  js  c++  java
  • iOS开发证书要点详解

    引言

            关于开发证书配置(Certificates&Identifiers&Provisioning Profiles),相信做iOS开发的同学没少被折腾。对于一个iOS开发小白、半吊子(比如像我自己)抑或老兵,或多或少会有以下不详、疑问、疑惑甚至困惑:

    1. 什么是App ID?Explicit/Wildcard App ID有何区别?什么是App Group ID?
    2. 什么是证书(Certificate)?如何申请?有啥用?
    3. 什么是Key Pair(公钥/私钥)?有啥用?与证书有何关联?
    4. 什么是签名(Signature)?如何签名(CodeSign)?怎样校验(Verify)?
    5. 什么是(Team)Provisioning Profiles?有啥用?
    6. Xcode如何配置才能使用iOS真机进行开发调试?
    7. 多台机器如何共享开发者账号或证书?
    8. 遇到证书配置问题怎么办?

    本文将对相关概念做个系统的梳理串烧。

    写在前面

    1.假设你使用过Apple设备(iMac/iPad/iPhone)且注册过Apple ID(Apple Account)。

    2.假设你或你所在的开发组已加入苹果开发者计划(Enroll in iOS Developer Program to become a member),即已注册开发者账号(Apple Developer Account)。

    • 只有拥有开发者账号,才可以申请开发/发布证书及相关配置授权文件,进而在iOS真机上开发调试Apps或发布到App Store。
    • 开发者账号分为Individual和Company/Organization两种类型。如无特别交代,下文基于$99/Year的普通个人开发者(Individual)账号展开

    3.如果要真机调试实践,你必须至少拥有一台装有Mac OS X的Mac开发机(iMac or MacBook),其上自带原生的Keychain Access,并且你需要下载Xcode。

    .App ID(bundle identifier)

    App ID即Product ID用于标识一个或者一组App,App ID应该和Xcode中的Bundle Identifier是一致的或匹配的。

    App ID字符串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作为前缀(Prefix/Seed),一般不超过255个ASCII字符。

    App ID全名会被追加ApplicationIdentifierPrefix(一般为TeamID.),分为两类:

    • Explicit App ID:唯一的App ID,这种App ID用于唯一标识一个应用程序。例如“com.apple.garageband”这个App ID,用于标识Bundle Identifier为“com.apple.garageband”的程序。
    • Wildcard App ID:通配符App ID,用于标识一组应用程序。例如“*”(实际上是ApplicationIdentifierPrefix)表示所有应用程序;而“com.apple.*”可以表示以“com.apple.”开头的所有应用程序。
    用户可在网站上删除(Delete)已注册的App IDs。
    App ID被配置到XcodeTarget|Info|Bundle Identifier】下;对于Wildcard App ID,只要bundle identifier包含其作为Prefix/Seed即可。

    .设备(Device)

    Device就是运行iOS系统用于开发调试App的设备,每台设备使用UDID来唯一标识。iOS设备连接Mac后,可通过iTunes->Summary或者Xcode->Window->Devices获取iPhone的UDID(identifier)。

    Apple Member Center网站个人账号下的Devices中包含了注册过的所有可用于开发和测试的设备。普通个人开发账号每年累计最多只能注册100个设备,用户可在网站上启用/禁用(Enable/Disable)已注册的Device。

    • Apps signed by you or your team run only on designated development devices.
    • Apps run only on the test devices you specify.
    本文的Devices即连接到Xcode被授权用于开发测试的iOS设备(iPhone/iPad)。

    .证书(Certificates)

    顾名思义,证书是用来证明内容(App的executalbe code)的合法性和完整性的。对于想安装到真机或发布到AppStore的应用程序(App),只有经过签名验证(Signature Validated)才能确保来源可信,并且保证App内容是完整、未经篡改的。

    证书分为两类:DevelopmentProduction(Distribution)

    • Development证书用来开发和调试应用程序:development certificate identifies you, as a team member, in a development provisioning profile that allows apps signed by you to launch on devices. 
    • Production主要用来分发应用程序(根据证书种类有不同作用):distribution certificate identifies your team or organization in a distribution provisioning profile and allows you to submit  your app to the store. Only a team agent or an admin can create a distribution certificate.

    普通个人开发账号最多可注册iOS Development/Distribution证书各2个,用户可在网站上删除(Revoke)已注册的Certificate。下文主要针对开发调试阶段的Development证书。

    首先,iOS以及Mac OS X系统(在安装Xcode时)将自动安装AppleWWDRCA.cer(Apple Worldwide Developer Relations Certification Authority)这个中间证书(Intermediate Certificates)。它实际上就是iOS证书的CA,其公钥用于解密认证证书的可靠性。如果Mac Keychain Access证书助理在申请证书时尚未安装过该证书,请先下载安装(Signing requires that you have both the signing identity and the intermediate certificate installed in your keychain)。


    通过Keychain证书助理手动申请开发证书时(也可通过Xcode自动请求生成),keychain将生成一个包含开发者身份信息的CSR(Certificate Signing Request)文件;同时,Keychain Access|Keys中将新增一对Public/Private Key PairThis signing identity consists of a public-private key pair that Apple issues)。


    private key用于签名(CodeSign),始终保存在Mac OS的Keychain Access中;public key一般随证书散布出去,对签名进行校验认证。用户必须保护好本地Keychain中的private key,以防伪冒。

    • Keep a secure backup of your public-private key pair. If the private key is lost, you’ll have to create an entirely new identity to sign code. 
    • Worse, if someone else has your private key, that person may be able to impersonate you.

    在Apple开发网站上传该CSR文件,Apple证书颁发机构WWDRCA将使用private key对CSR中的public key和一些身份信息进行加密签名生成数字证书(ios_development.cer)并记录在案(Apple Member Center)。

    从Apple Member Center网站下载证书到Mac上双击即可安装。证书安装成功后,在 KeychainAccess|Keys中展开创建CSR时生成的Key Pair中的私钥前面的箭头,可以查看到包含其对应公钥的证书(Your requested certificate will be the public half of the key pair.);在Keychain Access|Certificates中展开安装的证书(ios_development.cer)前面的箭头,可以看到其对应的私钥。



    Certificate被配置到Xcode Target|Build Settings|Code Signing|Code Signing Identity】下,下拉选择Identities from Profile "..."(一般先配置Provisioning Profile)。

    .供应配置文件(Provisioning Profiles

    Provisioning Profile文件包含了上述的所有内容:证书、App ID和设备

    一个Provisioning Profile对应一个Explicit App ID或Wildcard App ID(一组相同Prefix/Seed的App IDs)。 在网站上手动创建一个Provisioning Profile时,需要依次指定App ID(单选)、证书(Certificates,可多选)和设备(Devices,可多选)。用户可在网站上删除(Delete)已注册的 ProvisioningProfiles。

    Prov

  • 相关阅读:
    vim编辑器经常使用命令
    @RequestMapping value 能够反复吗 [
    [Android 4.4.2] 泛泰A870 Mokee4.4.2 20140531 RC1.0 by syhost
    leetcode——Reverse Linked List II 选择链表中部分节点逆序(AC)
    烤羊肉串引来的思考——命令模式
    全面解析Activity的生命周期
    PHP与Linux进程间的通信
    模块管理常规功能自己定义系统的设计与实现(36--终级阶段 综合查询[3])
    小米与格力的10亿豪赌!
    《Java设计模式》之装饰模式
  • 原文地址:https://www.cnblogs.com/fyongbetter/p/5404743.html
Copyright © 2011-2022 走看看