前提
眾所周知,開發iOS應用必須要有iOS證書(Certificates)和配置文件(Provisioning Profiles),那么問題來了:
1.什么是iOS證書,它是如何與app應用關聯的?
2.iOS開發證書和生產證書有何區別,如何使用的?
3.證書與配置文件(Provisioning Profiles)是什么關系,配置文件在Xcode中如何使用?
4.證書以及配置文件如何申請?
5.什么是Key Pair(公鑰/私鑰)?如何與證書關聯的?
6.簽名的作用是什么?
準備工作
如果想要進行iOS開發,首先要具備下面一些條件:
1.首先,要有蘋果開發者賬號(Apple Developer Account)
- 只有擁有開發者賬號,才能申請開發/發布證書及相應配置文件。
- 開發者賬號分為Individual(個人或公司開發者賬號$99)和Company/Organization(企業開發者賬號$299)兩種類型。
2.若要進行真機調試,必須至少擁有一臺裝有Mac OS X/Xcode的Mac開發機(iMac or MacBook)
1.登陸iOS Dev Center
如果已經擁有蘋果開發者賬號,直接登錄蘋果開發者中心申請開發證書。
-
登錄界面
F323D07E-B16C-43D6-AF31-7B681C9EFCA7.png - 選擇“Certificates, Identifiers & Profiles”項進入后顯示下面界面,iOS Apps一欄中任意選擇一項
- 進入到如圖界面
下面就這四項,分別介紹
2.Certificates(證書),Identifiers(標識符),Devices(設備),Provisioning Profiles(供應配置文件)
為了方便理解,我們把順序打亂,分別介紹這四項。
2.1. Identifiers
Identifiers即標識符,相當于身份證,用于創建以下三個ID:
App IDs
Pass Type IDs
Website Push IDs
2.1.1.關于App IDs
其中,App ID是應用的唯一標識符:
- App ID和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。
- App ID字符串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作為前綴(Prefix/Seed),一般不超過255個ASCII字符。
- 用戶可在Developer MemberCenter網站上注冊(Register)或刪除(Delete)已注冊的App IDs。
2.1.2.創建App ID
- 在“ Identifiers”一欄下選擇“App IDs”,可查看所有已申請的App IDs,點擊右上“+”
-
進入Register iOS App ID界面,在“App ID Description”欄下的“Name”項中輸入名稱
72E71207-FB31-4BC6-8E03-7EDADE9A82EC.png 在“Explicit App ID”欄下的“Bundle ID”項中輸入App ID(反域名格式,如:com.company.test)
這里“Bundle ID”對應Xcode中的“Bundle identifier”
Explicit App ID:唯一的App ID,用于唯一標識一個應用程序。例如“com.apple.garageband”這個App ID,用于標識Bundle Identifier為“com.apple.garageband”的App。
-
Wildcard App ID:含有通配符的App ID,用于標識一組應用程序。例如“”(實際上是Application Identifier Prefix)表示所有應用程序;而“com.apple.”可以表示Bundle Identifier以“com.apple.”開頭(蘋果公司)的所有應用程序。
378CCEC6-8B91-4CD8-AD2D-027A49B8AA02.png 在“App Services”欄下選擇應用要使用到的服務(如要使用推送功能,勾選“Push Notifications”)
- 點擊continue->點擊submit->點擊done,申請App IDs完成。點擊All IDs可查看申請的ID,點擊該ID
- 點擊“Edit”可對該App ID進行編輯
2.2. Certificates
2.2.1. 描述
iOS證書是用來證明iOS App內容(executable code)的合法性和完整性的數字證書。對于想安裝到真機或發布到AppStore的應用程序(App),只有經過簽名驗證(Signature Validated)才能確保來源可信,并且保證App內容是完整、未經篡改的。
- 數字證書是一個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。具有時效性,只在特定的時間段內有效。
- iOS證書分兩種:開發證書(Development)和生產證書(Production)。
- 開發證書用于開發和調試應用程序,可用于聯機調試。
- 生產證書用來發布應用程序。
2.2.2. 生成證書請求文件(CSR)
可以通過Keychain(鑰匙串)證書助理從證書頒發機構請求證書。在iOS Dev Center中添加證書(Certificates)時,需要上傳改CSR文件。
- 打開Keychain(鑰匙串),點擊菜單欄“鑰匙串訪問”->“證書助理”->“從證書頒發機構請求證書”
- 填寫開發賬號郵件和常用名稱,勾選“存儲到磁盤”。
- 繼續并選擇存儲位置后,Keychain將生成一個包含開發者身份信息的CSR(Certificate Signing Request)文件。同時,Keychain Access->Keys(密鑰)中增加一對Public/Private Key Pair。
- 私鑰(private key)始終保存在Mac OS的Keychain Access中,用于簽名(CodeSign)對外發布的App。
- 公鑰(public key)一般隨證書散布出去,對App簽名進行校驗認證。
2.2.3.申請證書
- 進入iOS Dev Center,“Certificate”->“All”,點擊右上角“+”(也可直接點擊“Certificate”下的“Development”或“Production”,直接選擇申請開發證書或生產證書),進入如下界面:
- 選擇開發證書或者生產證書,這里以生產證書為例,繼續
- 選擇App ID,即我們在“ Identifiers”中創建的App ID,繼續
- 這里介紹如何生產證書請求文件,即我們在“2.2.2. 生成證書請求文件(CSR)”中生成的.certSigningRequest文件,這里繼續
- 這里需要添加生成的證書請求文件(CSR),“Choose File”選擇生成的.certSigningRequest文件,點擊“Generate”,如圖申請開發證書完成,申請生產證書流程類似,這里不再贅述。
- 我們可以點擊“Download”下載該開發證書,或者在“Certificates”->“All”中查看該證書,并進行下載或刪除,如圖:
- 下載證書,雙擊導入Keychain Access,可在Keychain Access->“證書”中查看
- 展開安裝的證書(ios_development.cer)前面的箭頭,可以看到其對應的私鑰。在KeychainAccess->“密鑰”中展開創建CSR時生成的Key Pair中的私鑰前面的箭頭,可以查看到包含其對應公鑰的證書.
2.2.4.導出證書
- 打開Keychain Access,選擇安裝成功的證書,右鍵選擇“導出”
- 輸入名字,默認格式為.p12類型,選擇“Save”
- 設置密碼,點擊“OK”
2.3. Devices
- Device是指運行iOS系統用于開發調試App的設備(即蘋果設備)。每臺Apple設備使用UDID來唯一標識。
- 設備的UDID可通過iTunes->Summary或者Xcode->Window->Devices獲取。
- 開發描述文件(Provisioning Profiles)必須綁定設備,所以在申請開發描述文件之前,必須要添加調試的設備(已添加可跳過)。
2.3.1.添加調試設備
- 進入iOS Dev Center,“Devices”下選擇“All",可查看所有已添加的設備,點擊右上角“+”添加新的調試設備
- 輸入“Name”和UDID(可在xcode或者iTunes中查看)后,繼續
- 確認信息后,點擊注冊,完成添加。
2.3. Provisioning Profiles
2.3.1 概念
Provisioning Profile文件包含了上述所有內容:證書,App ID,設備,后綴名為.mobileprovision。
- 一個Provisioning Profile對應一個Explicit App ID或Wildcard App ID。
- Provisioning Profile決定Xcode用哪個證書(公鑰)/私鑰組合(Key Pair/Signing Identity)來簽名應用程序(Signing Product),將在應用程序打包時嵌入到.ipa包里。
- Provisioning Profile把這些信息全部打包在一起,方便我們在調試和發布程序打包時使用。這樣,只要在不同的情況下選擇不同的Provisioning Profile文件就可以了。
- Provisioning Profile也分為Development和Distribution兩類,有效期同Certificate一樣。Development版本的ProvisioningProfile用于開發調試,Distribution版本的ProvisioningProfile主要用于提交App Store審核,其不指定開發測試的Devices。
- xcode開發時,需在XcodeTarget->Build Settings->Code Signing->Provisioning Profile下配置對應的描述文件(Provisioning Profiles),然后在Code Signing Identity下拉可選擇Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。
- 在XcodeTarget->Build Settings->Code Signing->Provisioning Profile可選擇“Automatic”,xcode會根據該Target的“Bundle identifier”選擇默認的配置文件及證書。
2.3.2. 創建配置文件
- 打開iOS Dev Center,“Provisioning Profiles”->“All”,點擊右上角“+”(也可直接點擊“Development”或“Production”)
- 選擇開發或發布證書配置文件,這里以開發為例,點擊iOS App Development,繼續
- 選擇對應的App ID,繼續
- 選擇要關聯的證書,可多選,繼續
- 選擇用于調試安裝的設備(最多100臺設備),如果是生產證書配置文件,則不會出現該頁面(生產證書用于發布,不能進行開發調試),繼續看到以下界面
- 輸入文件名后,點擊“Generate”,配置文件創建成功
- 可點擊“Download”進行下載,或者在“Provisioning Profiles”->“All”查看所有配置文件,并進行下載或刪除等操作。
- 如圖下載到本地的Provisioning Profile,雙擊自動安裝到xcode中,在XcodeTarget->Build Settings->Code Signing->Provisioning Profile中可看到此項。
- 如圖,選擇此項配置文件,“Code Signing Identity”中會默認顯示所關聯的證書文件(即創建該配置文件時選擇關聯的證書,可有多個)
- 生產證書配置文件與之類似,不再贅述。