關於開發證書配置(Certificates & Identifiers & Provisioning Profiles),相信作 iOS 開發的同窗沒少被折騰。對於一個 iOS 開發小白、半吊子(好比像我本身)抑或老兵,或多或少會有或曾有過如下不詳、疑問、疑惑甚至困惑:html
- 什麼是App ID?Explicit/Wildcard App ID有何區別?什麼是App Group ID?
- 什麼是證書(Certificate)?如何申請?有啥用?
- 什麼是Key Pair(公鑰/私鑰)?有啥用?與證書有何關聯?
- 什麼是簽名(Signature)?如何簽名(CodeSign)?怎樣校驗(Verify)?
- 什麼是(Team)Provisioning Profiles?有啥用?
- Xcode如何配置才能使用iOS真機進行開發調試?
- 多臺機器如何共享開發者帳號或證書?
- 遇到證書配置問題怎麼辦?
- Xcode 7免證書調試真機調試
本文將圍繞相關概念及背景作個系統的梳理串燒,於條分縷析中對證書體系進行抽絲剝繭,逐步揭開簽名機制的神祕面紗。圖窮匕首見,水落而石出,包教不包會,不會請再來。ios
從 Xcode 7 開始支持普通 Apple 帳號進行免證書真機調試,詳情參考最新官方文檔《Launching Your App on Devices》,或參考本文最後一節簡介。安全
1.假設你使用過 Apple 設備(iMac/iPad/iPhone)且註冊過 Apple ID(Apple Account),詳情參考《建立和開始使用 Apple ID》。網絡
2.假設你或你所在的開發組已加入蘋果開發者計劃(Enroll in iOS Developer Program to become a member),即已註冊開發者帳號(Apple Developer Account)。app
- 只有擁有開發者帳號,才能夠申請開發/發佈證書及相關配置受權文件,進而在 iOS 真機上開發調試 Apps 或發佈到 App Store。
- 開發者帳號分爲 Individual 和 Company/Organization 兩種類型。如無特別交代,下文基於 $99/Year 的普通我的開發者(Individual)帳號展開。
3.若要真機調試實踐,你必須至少擁有一臺裝有 Mac OS X/Xcode 的 Mac 開發機(iMac or MacBook),其上自帶原生的 Keychain Access。dom
在蘋果官方的開發者計劃(Apple Developer Member Center)層面,App ID 即 Product ID,用於標識一個或者一組 App。ide
在 Mac/iOS 開發語境中,bundle(捆綁) 是指一個內部結構按照標準規則組織的特殊目錄。在 Mac OS 應用程序目錄下的某個 *.app 上可右鍵顯示包內容(Contents),其本質上就是可執行二進制文件(MacOS/)及其資源(Resources/)的打包組合。所以,在 Xcode 中配置的 Bundle Identifier 必須和 App ID 是一致的(Explicit)或匹配的(Wildcard)。工具
App ID 字符串一般以反域名(reverse-domain-name)格式的 Company Identifier(Company ID)做爲前綴(Prefix/Seed),通常不超過 255 個 ASCII 字符。測試
App ID 全名會被追加 Application Identifier Prefix(通常爲 TeamID.),分爲兩類:網站
- Explicit App ID:惟一的 App ID,用於惟一標識一個應用程序。例如「com.apple.garageband」這個 App ID,用於標識 Bundle Identifier 爲「com.apple.garageband」的 App——GarageBand;「com.tencent.mqq」則爲iPhoneQQ 的 App ID。
- Wildcard App ID:含有通配符的 App ID,用於標識一組應用程序。例如「*」(其實是 Application Identifier Prefix)表示全部應用程序;而「com.apple.*」能夠表示 Bundle Identifier 以「com.apple.」開頭(蘋果公司)的全部應用程序。
用戶可在 Developer Member Center 網站上註冊(Register)或刪除(Delete)已註冊的 App IDs。
App ID 被配置到【XcodeTarget|Info|Bundle Identifier】下;對於 Wildcard App ID,只要 bundle identifier 包含其做爲 Prefix/Seed 便可。
Device 就是運行 iOS 系統用於開發調試 App 的設備。每臺 Apple 設備使用 UDID (Unique Device Identifier)來惟一標識。
iOS 設備鏈接 Mac 後,可經過 iTunes->Summary 或者 Xcode->Window->Devices 查看其UDID。
Apple Member Center 網站我的帳號下的 Devices 中包含了註冊過的全部可用於開發和測試的設備,普通我的開發帳號每一年累計最多隻能註冊100個設備。
- Apps signed by you or your team run only on designated development devices.
- Apps run only on the test devices you specify.
用戶可在網站上註冊或啓用/禁用(Enable/Disable)已註冊的Device。
本文的 Devices 是指鏈接到 Xcode 被受權用於開發測試的iOS設備(iPhone/iPad)。
1.證書的概念
證書是由公證處或認證機關開具的證實資格或權力的證件,它是代表(或幫助判定)事理的一個憑證。證件或憑證的尾部一般會烙印公章。
每一箇中國人一輩子可能須要70多個證件,含15種身份證實。證件中「必需的」有30到40個。將這些證件按時間順序鋪開,那就是一個天朝子民的一輩子——持準生證許可落地,以戶籍證實入籍,以身份證認證身份,持結婚證以合法同居,最終以死亡證明註銷。
2.數字證書的概念
數字證書就是互聯網通信中 標誌通信各方 身份信息的一串數字,提供了一種在 Internet 上驗證通訊 實體身份的方式,其做用相似於司機的駕駛執照或平常生活中的身份證。它是由一個由權威機構—— CA機構(CA = Certificate Authority),又稱爲數字證書受權中心(數字證書認證機構)頒發(發行)的,人們能夠在網上用它來識別對方的身份。
- 數字證書是一個經 CA 數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及 CA 的數字簽名。
- 數字證書還有一個重要的特徵就是時效性:只在特定的時間段內有效。
數字證書中的公開密鑰(公鑰)至關於公章。
證書的信任鏈條是環環相扣的,根證書就是一開始就被信任的證書,是信任鏈的起始點。
在天朝子民的一輩子中,戶籍證實可理解爲等效的根證書:有了戶籍證實,才能辦理身份證;有了上流的身份證,才能辦理下游居住證、結婚證、計劃生育證、駕駛執照等認證。
3.根證書的概念
根證書是被嚴格限制和確認的,根證書的頒發者被稱之爲 Root Certificate Authority(Root CA)。
某一認證領域內的根證書是 CA 認證中心給本身頒發的證書(自行簽名),安裝根證書意味着對這個 CA 認證中心的信任。
那麼由誰來保證信任鏈起點的安全呢?
現代網絡操做系統都會內置一份可信的根證書列表(Firefox 的根證書列表獨立於操做系統以外)。
所謂「可信的根證書列表」是指操做系統開發商經過嚴格地審覈,將安全可靠、可被信任的 CA 機構歸入白名單,並將這些權威可信 CA 的根證書預安裝到操做系統中。
》在 Windows Internet Explorer 中,經過菜單【工具 | Internet 選項 | 內容 | 證書】能夠查看受信任的根證書頒發機構(或中間證書頒發機構):
具體看這篇文章:
http://blog.csdn.net/phunxm/article/details/42685597