iOS開發(fā)證書與配置文件的使用

前提

眾所周知,開發(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)
EB52CB59-2C2C-4DB8-8F4E-F9F3F1BB28FB.png
  • 進(jìn)入到如圖界面

5F9C1BE5-46DB-4023-AD0E-1F717AEB80AE.png

下面就這四項(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)的。
FEDE676C-1DFC-4958-B52E-3B2DF73A35B3.png
  • 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)擊右上“+”
1EF8FB56-E265-4B97-A8BE-327841B86814.png
  • 進(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”)

423D58C6-2535-4726-98C6-500658BD1141.png
  • 點(diǎn)擊continue->點(diǎn)擊submit->點(diǎn)擊done,申請(qǐng)App IDs完成。點(diǎn)擊All IDs可查看申請(qǐng)的ID,點(diǎn)擊該ID
453733A7-ABE7-4696-95EE-45168BD75172.png
  • 點(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)
  1. 開發(fā)證書用于開發(fā)和調(diào)試應(yīng)用程序,可用于聯(lián)機(jī)調(diào)試。
  1. 生產(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)求證書”
64A49729-3C03-4F8F-9910-3E9688235B86.png
  • 填寫開發(fā)賬號(hào)郵件和常用名稱,勾選“存儲(chǔ)到磁盤”。
096ED51F-A832-4DA5-BBB0-FEBA17BE4764.png
  • 繼續(xù)并選擇存儲(chǔ)位置后,Keychain將生成一個(gè)包含開發(fā)者身份信息的CSR(Certificate Signing Request)文件。同時(shí),Keychain Access->Keys(密鑰)中增加一對(duì)Public/Private Key Pair。
DAB324D4-D886-4097-A54D-1E37038A87A1.png
  1. 私鑰(private key)始終保存在Mac OS的Keychain Access中,用于簽名(CodeSign)對(duì)外發(fā)布的App。
  1. 公鑰(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)入如下界面:
F5FABF55-157A-47BB-B3A3-3A0125ABAFDC.png
  • 選擇開發(fā)證書或者生產(chǎn)證書,這里以生產(chǎn)證書為例,繼續(xù)
DB782EBE-01C6-48A1-A83E-A6B6CAC5D349.png
  • 選擇App ID,即我們?cè)凇?Identifiers”中創(chuàng)建的App ID,繼續(xù)
62F40B5F-4FA9-49C3-B707-46EADD3EC28A.png
  • 這里介紹如何生產(chǎn)證書請(qǐng)求文件,即我們?cè)凇?.2.2. 生成證書請(qǐng)求文件(CSR)”中生成的.certSigningRequest文件,這里繼續(xù)
1A7B633E-B61B-4E63-8EEB-B0D15D0B053E.png
  • 這里需要添加生成的證書請(qǐng)求文件(CSR),“Choose File”選擇生成的.certSigningRequest文件,點(diǎn)擊“Generate”,如圖申請(qǐng)開發(fā)證書完成,申請(qǐng)生產(chǎn)證書流程類似,這里不再贅述。
9D2FC3A0-7FC7-43A9-8C3D-B60F108528ED.png
  • 我們可以點(diǎn)擊“Download”下載該開發(fā)證書,或者在“Certificates”->“All”中查看該證書,并進(jìn)行下載或刪除,如圖:
A9690706-6620-4A3D-9B9A-D727EFFC9179.png
  • 下載證書,雙擊導(dǎo)入Keychain Access,可在Keychain Access->“證書”中查看
屏幕快照 2015-12-06 下午5.40.06.png
  • 展開安裝的證書(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)出”
1EF53825-B4C4-43B6-A0D8-536FE32AEB81.png
  • 輸入名字,默認(rèn)格式為.p12類型,選擇“Save”
72BA1D21-C005-4A7B-81B6-3B8ADC62872D.png
  • 設(shè)置密碼,點(diǎn)擊“OK”
47AF6037-0C4F-4960-9AD8-75C5EE34CA6F.png

2.3. Devices

  1. Device是指運(yùn)行iOS系統(tǒng)用于開發(fā)調(diào)試App的設(shè)備(即蘋果設(shè)備)。每臺(tái)Apple設(shè)備使用UDID來唯一標(biāo)識(shí)。
  1. 設(shè)備的UDID可通過iTunes->Summary或者Xcode->Window->Devices獲取。
  2. 開發(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è)備
9A9CA0B2-F320-4F9F-B51A-B0C250FECC63.png
  • 輸入“Name”和UDID(可在xcode或者iTunes中查看)后,繼續(xù)
ADF3D2DB-09B6-42D2-899B-D92D0E6163B5.png
  • 確認(rèn)信息后,點(diǎn)擊注冊(cè),完成添加。

2.3. Provisioning Profiles

2.3.1 概念

Provisioning Profile文件包含了上述所有內(nèi)容:證書,App ID設(shè)備,后綴名為.mobileprovision。

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

2.3.2. 創(chuàng)建配置文件

  • 打開iOS Dev Center,“Provisioning Profiles”->“All”,點(diǎn)擊右上角“+”(也可直接點(diǎn)擊“Development”或“Production”)
AC661BDE-DE94-487E-9A71-4C436224CB5D.png
  • 選擇開發(fā)或發(fā)布證書配置文件,這里以開發(fā)為例,點(diǎn)擊iOS App Development,繼續(xù)
0AB45E72-821D-4F5C-84F8-CA19E97CC565.png
  • 選擇對(duì)應(yīng)的App ID,繼續(xù)
F0C2D519-CA90-4286-A0AB-3A42DB4EADA0.png
  • 選擇要關(guān)聯(lián)的證書,可多選,繼續(xù)
50725524-699D-400B-B1C0-3C5024774F95.png
  • 選擇用于調(diào)試安裝的設(shè)備(最多100臺(tái)設(shè)備),如果是生產(chǎn)證書配置文件,則不會(huì)出現(xiàn)該頁(yè)面(生產(chǎn)證書用于發(fā)布,不能進(jìn)行開發(fā)調(diào)試),繼續(xù)看到以下界面
3FD54433-014F-4861-803F-994FFACCC910.png
  • 輸入文件名后,點(diǎn)擊“Generate”,配置文件創(chuàng)建成功
56C9B53B-666E-4173-8083-D1857EB58CD4.png
  • 可點(diǎn)擊“Download”進(jìn)行下載,或者在“Provisioning Profiles”->“All”查看所有配置文件,并進(jìn)行下載或刪除等操作。
6F158A64-B819-476F-86EC-A4BA6EF1E3D2.png
  • 如圖下載到本地的Provisioning Profile,雙擊自動(dòng)安裝到xcode中,在XcodeTarget->Build Settings->Code Signing->Provisioning Profile中可看到此項(xiàng)。
F5A42FB8-44EB-4A5C-B53C-3F3499CF883D.png
  • 如圖,選擇此項(xiàng)配置文件,“Code Signing Identity”中會(huì)默認(rèn)顯示所關(guān)聯(lián)的證書文件(即創(chuàng)建該配置文件時(shí)選擇關(guān)聯(lián)的證書,可有多個(gè))
3E6BFDF4-28E2-49DF-A31E-0FF507A1604F.png
  • 生產(chǎn)證書配置文件與之類似,不再贅述。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容