前提
眾所周知,開發(fā)iOS應(yīng)用必須要有iOS證書(Certificates)和配置文件(Provisioning Profiles),那么問題來了:
1.什么是iOS證書,它是如何與app應(yīng)用關(guān)聯(lián)的?
2.iOS開發(fā)證書和生產(chǎn)證書有何區(qū)別,如何使用的?
3.證書與配置文件(Provisioning Profiles)是什么關(guān)系,配置文件在Xcode中如何使用?
4.證書以及配置文件如何申請(qǐng)?
5.什么是Key Pair(公鑰/私鑰)?如何與證書關(guān)聯(lián)的?
6.簽名的作用是什么?
準(zhǔn)備工作
如果想要進(jìn)行iOS開發(fā),首先要具備下面一些條件:
1.首先,要有蘋果開發(fā)者賬號(hào)(Apple Developer Account)
- 只有擁有開發(fā)者賬號(hào),才能申請(qǐng)開發(fā)/發(fā)布證書及相應(yīng)配置文件。
- 開發(fā)者賬號(hào)分為Individual(個(gè)人或公司開發(fā)者賬號(hào)$99)和Company/Organization(企業(yè)開發(fā)者賬號(hào)$299)兩種類型。
2.若要進(jìn)行真機(jī)調(diào)試,必須至少擁有一臺(tái)裝有Mac OS X/Xcode的Mac開發(fā)機(jī)(iMac or MacBook)
1.登陸iOS Dev Center
如果已經(jīng)擁有蘋果開發(fā)者賬號(hào),直接登錄蘋果開發(fā)者中心申請(qǐng)開發(fā)證書。
-
登錄界面
F323D07E-B16C-43D6-AF31-7B681C9EFCA7.png - 選擇“Certificates, Identifiers & Profiles”項(xiàng)進(jìn)入后顯示下面界面,iOS Apps一欄中任意選擇一項(xiàng)

- 進(jìn)入到如圖界面

下面就這四項(xiàng),分別介紹
2.Certificates(證書),Identifiers(標(biāo)識(shí)符),Devices(設(shè)備),Provisioning Profiles(供應(yīng)配置文件)
為了方便理解,我們把順序打亂,分別介紹這四項(xiàng)。
2.1. Identifiers
Identifiers即標(biāo)識(shí)符,相當(dāng)于身份證,用于創(chuàng)建以下三個(gè)ID:
App IDs
Pass Type IDs
Website Push IDs
2.1.1.關(guān)于App IDs
其中,App ID是應(yīng)用的唯一標(biāo)識(shí)符:
- App ID和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。

- App ID字符串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作為前綴(Prefix/Seed),一般不超過255個(gè)ASCII字符。
- 用戶可在Developer MemberCenter網(wǎng)站上注冊(cè)(Register)或刪除(Delete)已注冊(cè)的App IDs。
2.1.2.創(chuàng)建App ID
- 在“ Identifiers”一欄下選擇“App IDs”,可查看所有已申請(qǐng)的App IDs,點(diǎn)擊右上“+”

-
進(jìn)入Register iOS App ID界面,在“App ID Description”欄下的“Name”項(xiàng)中輸入名稱
72E71207-FB31-4BC6-8E03-7EDADE9A82EC.png 在“Explicit App ID”欄下的“Bundle ID”項(xiàng)中輸入App ID(反域名格式,如:com.company.test)
這里“Bundle ID”對(duì)應(yīng)Xcode中的“Bundle identifier”
Explicit App ID:唯一的App ID,用于唯一標(biāo)識(shí)一個(gè)應(yīng)用程序。例如“com.apple.garageband”這個(gè)App ID,用于標(biāo)識(shí)Bundle Identifier為“com.apple.garageband”的App。
-
Wildcard App ID:含有通配符的App ID,用于標(biāo)識(shí)一組應(yīng)用程序。例如“”(實(shí)際上是Application Identifier Prefix)表示所有應(yīng)用程序;而“com.apple.”可以表示Bundle Identifier以“com.apple.”開頭(蘋果公司)的所有應(yīng)用程序。
378CCEC6-8B91-4CD8-AD2D-027A49B8AA02.png 在“App Services”欄下選擇應(yīng)用要使用到的服務(wù)(如要使用推送功能,勾選“Push Notifications”)

- 點(diǎn)擊continue->點(diǎn)擊submit->點(diǎn)擊done,申請(qǐng)App IDs完成。點(diǎn)擊All IDs可查看申請(qǐng)的ID,點(diǎn)擊該ID

- 點(diǎn)擊“Edit”可對(duì)該App ID進(jìn)行編輯
2.2. Certificates
2.2.1. 描述
iOS證書是用來證明iOS App內(nèi)容(executable code)的合法性和完整性的數(shù)字證書。對(duì)于想安裝到真機(jī)或發(fā)布到AppStore的應(yīng)用程序(App),只有經(jīng)過簽名驗(yàn)證(Signature Validated)才能確保來源可信,并且保證App內(nèi)容是完整、未經(jīng)篡改的。
- 數(shù)字證書是一個(gè)經(jīng)證書授權(quán)中心數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。具有時(shí)效性,只在特定的時(shí)間段內(nèi)有效。
- iOS證書分兩種:開發(fā)證書(Development)和生產(chǎn)證書(Production)。
- 開發(fā)證書用于開發(fā)和調(diào)試應(yīng)用程序,可用于聯(lián)機(jī)調(diào)試。
- 生產(chǎn)證書用來發(fā)布應(yīng)用程序。
2.2.2. 生成證書請(qǐng)求文件(CSR)
可以通過Keychain(鑰匙串)證書助理從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書。在iOS Dev Center中添加證書(Certificates)時(shí),需要上傳改CSR文件。
- 打開Keychain(鑰匙串),點(diǎn)擊菜單欄“鑰匙串訪問”->“證書助理”->“從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書”

- 填寫開發(fā)賬號(hào)郵件和常用名稱,勾選“存儲(chǔ)到磁盤”。

- 繼續(xù)并選擇存儲(chǔ)位置后,Keychain將生成一個(gè)包含開發(fā)者身份信息的CSR(Certificate Signing Request)文件。同時(shí),Keychain Access->Keys(密鑰)中增加一對(duì)Public/Private Key Pair。

- 私鑰(private key)始終保存在Mac OS的Keychain Access中,用于簽名(CodeSign)對(duì)外發(fā)布的App。
- 公鑰(public key)一般隨證書散布出去,對(duì)App簽名進(jìn)行校驗(yàn)認(rèn)證。
2.2.3.申請(qǐng)證書
- 進(jìn)入iOS Dev Center,“Certificate”->“All”,點(diǎn)擊右上角“+”(也可直接點(diǎn)擊“Certificate”下的“Development”或“Production”,直接選擇申請(qǐng)開發(fā)證書或生產(chǎn)證書),進(jìn)入如下界面:

- 選擇開發(fā)證書或者生產(chǎn)證書,這里以生產(chǎn)證書為例,繼續(xù)

- 選擇App ID,即我們?cè)凇?Identifiers”中創(chuàng)建的App ID,繼續(xù)

- 這里介紹如何生產(chǎn)證書請(qǐng)求文件,即我們?cè)凇?.2.2. 生成證書請(qǐng)求文件(CSR)”中生成的.certSigningRequest文件,這里繼續(xù)

- 這里需要添加生成的證書請(qǐng)求文件(CSR),“Choose File”選擇生成的.certSigningRequest文件,點(diǎn)擊“Generate”,如圖申請(qǐng)開發(fā)證書完成,申請(qǐng)生產(chǎn)證書流程類似,這里不再贅述。

- 我們可以點(diǎn)擊“Download”下載該開發(fā)證書,或者在“Certificates”->“All”中查看該證書,并進(jìn)行下載或刪除,如圖:

- 下載證書,雙擊導(dǎo)入Keychain Access,可在Keychain Access->“證書”中查看

- 展開安裝的證書(ios_development.cer)前面的箭頭,可以看到其對(duì)應(yīng)的私鑰。在KeychainAccess->“密鑰”中展開創(chuàng)建CSR時(shí)生成的Key Pair中的私鑰前面的箭頭,可以查看到包含其對(duì)應(yīng)公鑰的證書.
2.2.4.導(dǎo)出證書
- 打開Keychain Access,選擇安裝成功的證書,右鍵選擇“導(dǎo)出”

- 輸入名字,默認(rèn)格式為.p12類型,選擇“Save”

- 設(shè)置密碼,點(diǎn)擊“OK”

2.3. Devices
- Device是指運(yùn)行iOS系統(tǒng)用于開發(fā)調(diào)試App的設(shè)備(即蘋果設(shè)備)。每臺(tái)Apple設(shè)備使用UDID來唯一標(biāo)識(shí)。
- 設(shè)備的UDID可通過iTunes->Summary或者Xcode->Window->Devices獲取。
- 開發(fā)描述文件(Provisioning Profiles)必須綁定設(shè)備,所以在申請(qǐng)開發(fā)描述文件之前,必須要添加調(diào)試的設(shè)備(已添加可跳過)。
2.3.1.添加調(diào)試設(shè)備
- 進(jìn)入iOS Dev Center,“Devices”下選擇“All",可查看所有已添加的設(shè)備,點(diǎn)擊右上角“+”添加新的調(diào)試設(shè)備

- 輸入“Name”和UDID(可在xcode或者iTunes中查看)后,繼續(xù)

- 確認(rèn)信息后,點(diǎn)擊注冊(cè),完成添加。
2.3. Provisioning Profiles
2.3.1 概念
Provisioning Profile文件包含了上述所有內(nèi)容:證書,App ID,設(shè)備,后綴名為.mobileprovision。
- 一個(gè)Provisioning Profile對(duì)應(yīng)一個(gè)Explicit App ID或Wildcard App ID。
- Provisioning Profile決定Xcode用哪個(gè)證書(公鑰)/私鑰組合(Key Pair/Signing Identity)來簽名應(yīng)用程序(Signing Product),將在應(yīng)用程序打包時(shí)嵌入到.ipa包里。
- Provisioning Profile把這些信息全部打包在一起,方便我們?cè)谡{(diào)試和發(fā)布程序打包時(shí)使用。這樣,只要在不同的情況下選擇不同的Provisioning Profile文件就可以了。
- Provisioning Profile也分為Development和Distribution兩類,有效期同Certificate一樣。Development版本的ProvisioningProfile用于開發(fā)調(diào)試,Distribution版本的ProvisioningProfile主要用于提交App Store審核,其不指定開發(fā)測(cè)試的Devices。
- xcode開發(fā)時(shí),需在XcodeTarget->Build Settings->Code Signing->Provisioning Profile下配置對(duì)應(yīng)的描述文件(Provisioning Profiles),然后在Code Signing Identity下拉可選擇Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。
- 在XcodeTarget->Build Settings->Code Signing->Provisioning Profile可選擇“Automatic”,xcode會(huì)根據(jù)該Target的“Bundle identifier”選擇默認(rèn)的配置文件及證書。

2.3.2. 創(chuàng)建配置文件
- 打開iOS Dev Center,“Provisioning Profiles”->“All”,點(diǎn)擊右上角“+”(也可直接點(diǎn)擊“Development”或“Production”)

- 選擇開發(fā)或發(fā)布證書配置文件,這里以開發(fā)為例,點(diǎn)擊iOS App Development,繼續(xù)

- 選擇對(duì)應(yīng)的App ID,繼續(xù)

- 選擇要關(guān)聯(lián)的證書,可多選,繼續(xù)

- 選擇用于調(diào)試安裝的設(shè)備(最多100臺(tái)設(shè)備),如果是生產(chǎn)證書配置文件,則不會(huì)出現(xiàn)該頁(yè)面(生產(chǎn)證書用于發(fā)布,不能進(jìn)行開發(fā)調(diào)試),繼續(xù)看到以下界面

- 輸入文件名后,點(diǎn)擊“Generate”,配置文件創(chuàng)建成功

- 可點(diǎn)擊“Download”進(jìn)行下載,或者在“Provisioning Profiles”->“All”查看所有配置文件,并進(jìn)行下載或刪除等操作。

- 如圖下載到本地的Provisioning Profile,雙擊自動(dòng)安裝到xcode中,在XcodeTarget->Build Settings->Code Signing->Provisioning Profile中可看到此項(xiàng)。

- 如圖,選擇此項(xiàng)配置文件,“Code Signing Identity”中會(huì)默認(rèn)顯示所關(guān)聯(lián)的證書文件(即創(chuàng)建該配置文件時(shí)選擇關(guān)聯(lián)的證書,可有多個(gè))

- 生產(chǎn)證書配置文件與之類似,不再贅述。


