AI智能
改变未来

iOS证书之Certificates,Devices,Identifiers,Profiles


概念介绍

1.Certificate

证书是用来给应用程序签名的,只有经过签名的应用程序才能保证它的来源是可信任的。在 Xcode Build Setting 的 Code Signing Identity 中,你可以设置用于为代码签名的证书。

众所周知,我们申请一个 Certificate 之前,需要先申请一个 Certificate Signing Request (CSR) 文件,而这个过程中实际上是生成了一对公钥和私钥,保存在你 Mac 的 Keychain 中。代码签名正是使用这种基于非对称秘钥的加密方式,用私钥进行签名,用公钥进行验证。如下图所示,在你 Mac 的 keychain 的 Login 中存储着相关的公钥和私钥,而证书中包含了公钥。你只能用私钥来进行签名,所以如果没有了私钥,就意味着你不能进行签名了,所以就无法使用这个证书了,此时你只能 revoke 之前的证书再申请一个。因此在申请完证书时,最好导出并保存好你的私钥。当你想与其他人或其他设备共享证书时,把私钥传给它就可以了。私钥保存在你的 Mac 中,而苹果生成的 Certificate 中包含了公钥。当你用自己的私钥对代码签名后,苹果就可以用证书中的公钥来进行验证,确保是你对代码进行了签名,而不是别人冒充你,同时也确保代码的完整性等。

image.png

证书主要分为两类:Development 和 Production,Development 证书用来开发和调试应用程序,Production 主要用来分发应用程序(根据证书种类有不同作用)。

2.App ID

App ID 用于标识一个或者一组 App,App ID 和 Xcode中的 Bundle ID 是一致的或者匹配的。App ID 主要有以下两种:

  • Explicit App ID: 唯一的 App ID,这种 App ID 用于唯一标识一个应用程序,例如 com.ABC.demo1,标识 Bundle ID 为 com.ABC.demo1 的程序。
  • Wildcard App ID: 通配符App ID,用于标识一组应用程序。例如 * 可以表示所有应用程序,而 com.ABC.* 可以表示以com.ABC 开头的所有应用程序。

每创建一个 App ID,我们都可以设置该 App ID 所使用的 APP Services,也就是其所使用的额外服务。每种额外服务都有着不同的要求,例如,如果要使用 Apple Push Notification Services,则必须是一个 explicit App ID,以便能唯一标识一个应用程序。下图显示了所有可选的服务:

image.png

3.Device

Devices 中包含了该账户中所有可用于开发和测试的设备,每台设备使用 UDID 来唯一标识。每个账户中的设备数量限制是 100 个。

4.Provisioning Profile

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

如果我们要打包或者在真机上运行一个应用程序:
我们首先需要证书来进行签名,用来标识这个应用程序是合法的、安全的、完整的等等;
然后需要指明它的 App ID,并且验证 Bundle ID 是否与其一致;
再次,如果是真机调试,需要确认这台设备能否用来运行程序。

Provisioning Profile 把这些信息全部打包在一起,方便我们在调试和发布程序打包时使用,这样我们只要在不同的情况下选择不同的 profile 文件就可以了。而且这个 Provisioning Profile 文件会在打包时嵌入 .ipa 的包里。

如下图所示,一个用于 Development 的 Provisioning Profile 中包含了该 Provisioning Profile 对应的 App ID,可使用的证书和设备。这意味着使用这个 Provisioning Profile 打包程序必须拥有相应的证书,并且是将 App ID 对应的程序运行到 Devices 中包含的设备上去。

image.png

在一台设备上运行应用程序的过程如下:

image.png

与证书一样,Provisioning Profile 也分为 Development 和 Distribution 两种:

  • Development
  • DistributionIn House
  • Ad Hoc
  • App Store

In House 与 Ad Hoc 的不同之处在于:In House 没有设备数量限制,而 Ad Hoc 是用来测试用的,Ad Hoc 的包只能运行在该账户内已登记的可用设备上,有最多 100 个设备的数量限制。所以这两种 Provisioning Profile 文件的区别就在于其中的设备限制不一样而已,而它们所使用的 Certificate 是相同的。

开发/发布流程

了解了上面的概念,再来看开发及发布流程就非常简单了。

1.开发/真机调试流程

根据上面的介绍,可以知道进行 Development 主要有以下几个步骤:

  • 申请证书
  • 加入设备
  • 生成Provisioning Profile
  • 设置Xcode Code Sign Identifer

事实上第三步通常是不需要的,因为我们通常都是用 Xcode 生成和管理的 iOS Team Provisioning Profile 来进行开发,因为它非常方便,所以不需要自己手动生成 Provisioning Profile。

iOS Team Provisioning Profile 是第一次使用 Xcode 添加设备时,Xcode 自动生成的,它包含了 Xcode 生成的一个 Wildcard App ID(* ,匹配所有应用程序),账户里面所有的 Devices 和所有 Development Certificates,如下图所示。因此,team 中的所有成员都可以使用这个 iOS Team Provisioning Profile 在 team 中的所有设备上调试所有的应用程序。并且当有新设备添加进来时,Xcode 会更新这个文件。

image.png

2.发布流程

网上有很多关于发布 App Store 的流程,我就不缀述了,不过根据上面的概念介绍,不管是 App Store、In-House 还是 Ad-Hoc,打包流程都是差不多的,都包括了以下几个关键步骤:

  • 创建发布证书
  • 创建 App ID
  • 创建对应的 Provisioning Profile 文件
  • 设备 Bundle ID 和 App ID 一致
  • 设置 Xcode Code Sign Identifer,选择合适的 Profile 和证书进行签名,打包。
  • 点赞
  • 收藏
  • 分享
  • 文章举报

GS-NICE发布了177 篇原创文章 · 获赞 0 · 访问量 2722私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » iOS证书之Certificates,Devices,Identifiers,Profiles