iOS 开发者必备知识一:开发者证书和描述文件那些事

159

Required knowledges for iOS Developer

Apple Developer Site

苹果开发者网站 developer.apple.com, 为开发者提供续费,证书生成,移动描述文件,应用ID ,开发设备等管理服务。

开发者分为个人,公司,和企业级三种类型,组织结构中有 代理人(Agent 这里可以理解为 App 产品开发的总负责人),管理员,和普通成员等三种角色,分别在应用发布的生命周期中发挥不同的作用。

Agent

App代理人,拥有最高权限

Admin

管理员,拥有添加删除 成员 的权限;对应用管理的权限由 Agent 赋予;

Member

成员,权限最低的角色;可以进行应用开发,和发布工作;

Certificates

苹果开发者证书

CertificateSigningRequest

证书签名请求,向机构申请签名的证书,在这里是向 Apple Developer 网站申请开发者证书(包括开发模式和发布模式)

通过将 csr 上传到 Apple Developer 站点,生成一个开发者证书(你需要下载下来安装到本地keychains 中,双击即可)。

  • Private key (stored on Mac keychains)
    需要说明的是,在机器中首次生成 证书请求 (后面简称为 csr) 时,会在系统 keychains 中同时生成一个私钥,csr 中包含一个对应的公钥;

Certification

从开发者网站下载的证书包含着公钥,这里要注意的事,一旦对应的私钥被删除后也会影响到无法对 ipa 进行正确签名,也就是打包时签名失败。

  • Public key
  • Development

  • Distribution

Provisioning Profiles

描述文件,这是一个包含着开发者,开发机,和开发设备三者的文件,非常重要。

Types

  • Developer
    开发模式,只能通过 Xcode 直接发布到注册设备
  • Ad Hoc
    可以通过 ipa 文件的方式分发出去,但只能通过 iTunes 或 OTA 的方式安装到注册设备中

  • AppStore
    只能发布到 AppStore 中,所以该描述文件中不包含设备列表

  • Enterprise
    可以通过任意方式发布任意名称的应用,因此该描述文件中连 AppID 都不用包含,但是该类型的 ipa 不能发布到 AppStore

  • Contains Elements

    不同类型的描述文件中,包含着不同的数据,下面对不同类型的描述文件进行简单的解析。

    • Development
      开发模式,也就是我们常说的开发环境;

      苹果规定开发模式必须要指定注册iOS设备,AppID, 对应的开发证书;

      因此开发模式的app,只能允许给注册过的iOS设备通过 Xcode 安装应用,进行联机调试;

      现在前面 csr 同时生成的私钥就派上用场了,Xcode 限制只有拥有 csr 对应私钥的 mac 机器才能将app进行正确的签名并部署到iOS设备中。

      所以经常有朋友抱怨说又无法联机调试,多半是因为本机的私钥和描述文件中的公钥不对应造成的。

      • Devices
  • AppID

  • APNs cert
    推送也是通过推送证书进行安全控制,推送证书也分为开发模式和正式模式

  • Development cert

  • Ad-hoc
    Ad hoc 特别模式,允许开发者将应用导出成 IPA 包进行分发。

    与开发模式相似,只允许安装到注册过的 iOS 设备中,并且签名的 Mac机器和描述文件有配对的密钥;

    • Devices
  • AppID

  • APNs cert

  • Distribution cert

  • AppStore
    AppStore 应用商店模式

    该模式下,由于不需要限制安装设备,因此在此模式下描述文件中不包含任何设备信息,仅仅包含 AppID 和对应的线上开发者证书即可。

    • AppID
  • Distribution cert

  • Enterprise
    Enterprise 企业模式

    企业模式中,权限更加开放,允许该企业证书签名的任何应用安装到任意设备中,因此该类型描述文件中连AppID 也不包含了。仅仅包含一个企业及证书。

    这也是被很多越狱商店私自利用,发布app 的一种手段。

    • Distribution Cert
  • App ID

    应用ID,每个应用ID 包含应用名和 BundleID 两个关键信息,前者是AppStore 中的显示名称,后者是操作系统进行资源管理的唯一标识,比如进程,线程,内存管理等。

    Bundle ID

    Name

    IPA

    IPA 是iOS 应用程序包的简称,包含了应用ID 和对应的描述文件

    App ID

    Provisioning Profile