发布于 

关于苹果开发的一些基础知识

App ID(bundle identifier)

在苹果官方的开发者计划(Apple Developer Member Center)层面,App ID 即 Product ID,用于标识一个或者一组 App。

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


Bundle

Bundle简单地讲,就是一个内部结构按照标准规则组织的特殊目录。也就是说,Bundle本质上是一个目录。

我们开发的每一个应用,本质上是遵守着Application类型规则的一个特殊目录。


UDID

UDID是一种iOS设备的特殊识别码。除序号之外,每台iOS装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identifier, UDID )。



开发证书(Certificates)

1.证书的概念

证书是由公证处或认证机关开具的证明资格或权力的_证件_,它是表明(或帮助断定)事理的一个_凭证_。证件或凭证的尾部通常会烙印_公章_。

每个中国人一生可能需要70多个证件,含15种身份证明。证件中“必需的”有30到40个。将这些证件按时间顺序铺开,那就是一个天朝子民的一生——持准生证许可落地,以户籍证明入籍,以身份证认证身份,持结婚证以合法同居,最终以死亡证明注销。

2.数字证书的概念

数字证书就是互联网通讯中标志通讯各方_身份信息_的一串数字,提供了一种在 Internet 上验证通信实体身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构——CA机构(CA =_C_ertificate_A_uthority),又称为数字证书授权中心(数字证书认证机构)颁发(发行)的,人们可以在网上用它来识别对方的身份。

  • 数字证书是一个经 CA 数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及 CA 的数字签名。
  • 数字证书还有一个重要的特征就是时效性:只在特定的时间段内有效。

数字证书中的公开密钥(公钥)相当于公章。

证书的信任链条是环环相扣的,根证书就是一开始就被信任的证书,是信任链的起始点

在天朝子民的一生中,户籍证明可理解为等效的根证书:有了户籍证明,才能办理身份证;有了上流的身份证,才能办理下游居住证、结婚证、计划生育证、驾驶执照等认证。


3.iOS(开发)证书

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

iOS 证书分为两类:Development 和 Production(Distribution)。

  • Development 证书用来开发和调试应用程序:A development certificate identifies you, as a team member, in a development provisioning profile that allows apps signed by you to **_launch _**on devices.
  • Production 主要用来分发应用程序(根据证书种类有不同作用):A 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。

申请证书(CSR:Certificate Signing Request)

**私钥 private key 始终保存在 Mac OS 的 Keychain Access 中,用于签名(CodeSign)本机对外发布的 App;公钥 **_**public key **_一般随证书(随Provisioning Profile,随 App 安装)散布出去,对 App 签名进行校验认证。用户必须妥善保存本地 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 文件作为换取证书的凭证(Upload CSR file to generate your certificate),有点类似为github账号添加SSH公钥到服务器上进行授权。

Apple Developer 开发证书颁发机构 WWDRCA_ _将使用其 private key 对 CSR 中的 public key 和一些身份信息进行加密签名生成数字证书(ios_development.cer)并记录在案(Apple Member Center)。



供应配置文件(Provisioning Profiles

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

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

Provisioning Profile 决定 Xcode 用哪个证书(公钥)/私钥组合(Key Pair/Signing Identity)来签署应用程序(Signing Product),并将在应用程序打包时嵌入到 .ipa 包里。安装应用程序时,Provisioning Profile 文件被拷贝到 iOS 设备中,运行该 iOS App 的设备通过它来认证安装的程序。

如果要打包到真机上运行一个APP,一般要经历以下三步:

  • 首先,需要指明它的 App ID,并且验证 Bundle ID 是否与其一致;
  • 其次,需要证书对应的私钥来进行签名,用于标识这个 APP 是合法、安全、完整的;
  • 然后,如果是真机调试,需要确认这台设备是否授权运行该 APP。

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

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

 

Provisioning Profile 也分为 Development 和 Distribution 两类,有效期同 Certificate 一样。Distribution 版本的 ProvisioningProfile 主要用于提交 App Store 审核,其中不指定开发测试的Devices(0,unlimited)。App ID 为 Wildcard App ID(*)。App Store 审核通过上架后,允许所有 iOS 设备(Deployment Target)上安装运行该App。

Xcode 将全部供应配置文件(包括用户手动下载安装的和 Xcode 自动创建的 Team Provisioning Profile)放在目录 ~/Library/MobileDevice/Provisioning



开发组供应配置文件(Team Provisioning Profiles

1.Team Provisioning Profile的概念

每个 Apple 开发者账号都对应一个唯一的 Team ID,Xcode3.2.3 预发布版本中加入了 Team Provisioning Profile 这项新功能。

在 Xcode 中添加 Apple Developer Account 时,它将与 Apple Member Center 后台勾兑**自动生成 **iOS Team Provisioning Profile(Managed by Xcode)。

Team Provisioning Profile 包含一个为 Xcode iOS Wildcard App ID(*) 生成的 iOS Team Provisioning Profile:*(匹配所有应用程序),账户里所有的 Development Certificates 和 Devices 都可以使用它在这个 team 注册的所有设备上调试应用程序(不管bundle identifier是什么)。同时,它还会为开发者自己创建的 Wildcard/Explicit App IDs 创建对应的 iOS Team Provisioning Profile。

2.Team Provisioning Profile 生成/更新时机

  • Add an Apple ID account to Xcode
  • Fix issue “No Provisioning Profiles with a valid signing identity” in Xcode
  • Assign Your App to a Team in Xcode project settings of General|Identity
  • Register new device on the apple development website or Xcode detected new device connected
    利用 Xcode 生成和管理的 iOS Team Provisioning Profile 来进行开发非常方便,可以不需要上网站手动生成下载 Provisioning Profile。

Team Provisioning Profile 同 Provisioning Profile,只不过是由 Xcode 自动生成的,也被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下,同时需要在【XcodeTarget|General|Identity】下指定 Team 账号 ID。



证书与签名(****Certificate& Signature)

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


开发/真机调试流程

根据上面的介绍,可以知道进行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会更新这个文件。

发布流程

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

  • 创建发布证书
  • 创建App ID
  • 创建对应的Provisioning Profile文件
  • 设备Bundle ID和App ID一致
  • 设置Xcode Code Sign Identifer,选择合适的Profile和证书进行签名,打包
     

参考网址:

http://blog.csdn.net/phunxm/article/details/42685597

http://www.cnblogs.com/cywin888/p/3263027.html


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @shyiuanchen 创建,使用 Stellar 作为主题。