【轉】 iOS開發之打包上傳到App Store——(一)各類證書的理解

OK,有日子沒寫iOS開發的相關文章啦,主要是最近的精力都沒在這上面,不過既然產品已經快要出來了,就有必要了解一下各類證書啥的(衆所周知iOS的一堆證書但是很讓人頭大呀),最近確實被這個搞得頭大,而後就決定參考網上的一些資料,進行一下整理,留做一個備份。html

內容參考自:蘋果全部經常使用證書,appID,Provisioning Profiles配置說明及製做圖文教程 ios

    理解Certificate、App Id、Identifiers 和 Provisioning Profile安全

 

在咱們日常的開發過程當中,可使用模擬器進行調試,也能夠直接使用真機測試,真機測試的話,證書的申請也是相對容易的多,可是當咱們要實際打包發佈程序到App Store時,那個證書真叫一個頭疼。app

首先,咱們打開https://developer.apple.com/account/ios/profile/profileList.action,看下左邊:測試

能夠看到有這麼幾個選項。其中,Devices指的是團隊(公司帳號是能夠以Team的形式添加多個成員的)中的設備,每一個開發者帳號(不論公司仍是我的)能夠關聯100臺設備,能夠經過在蘋果開發者控制檯中添加,也能夠經過Xcode直接添加設備。加密

而後,咱們今天的重點目標是各種的證書啊、App ID啊還有Provisioning Profile啥的,因此重點理解一下這幾個。spa

Certificate(證書)

證書指的是由蘋果頒發(先交錢後發貨的說)給你的證實你有權利進行iOS開發(不買證書你就只能用模擬器的說)而且能夠將你開發的應用上傳到App Store(麼有證書估計只能本身作越獄開發)的一個憑證,表示你是一個開發者,就跟護照啊、身份證啊啥的同樣。一個開發者帳號只有一套,這個套裝裏呢包含兩個證書,一個是Development證書,也就是所謂的開發證書,憑藉這個證書你能夠進行開發和真機調試(麼有這個就只能用模擬器啦);另外一個是Distribution證書,也叫Production證書,即所謂的分發證書或者說生產證書。其中呢,Development證書能夠製做多個副本分發到多臺設備,可是Distribution證書只能有一個,不能製做副本分發到多臺電腦。
 
下面大體介紹一下證書的種類以及分別包含的子分類啥的:
  • Development
    • App Development (1年):用來開發和真機調試應用程序。
    • Push Development (1年):用來調試Apple Push Notification
  • Production
    • In-House and Ad Hoc (3年):用來發布In-House和AdHoc的應用程序。.net

    •  

          App Store :用來發布提交App Store的應用程序。
    • MDM CSR
    • Push Production (1年):用來在發佈版本中使用Apple Push Notification。
    • Pass Type ID Certificate
    • Website Push ID Certificate
    須要注意的是:
 
在咱們申請添加一個Certificate以前,須要先申請一個Certificate Signing Request(CSR)文件,這個過程呢,其實是生成了一對公鑰和私鑰,保存在咱們電腦上的鑰匙串中。代碼的簽名也就是使用這種基於非對稱密鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。以下圖:
咱們的鑰匙串中存儲着相關的公鑰和私鑰,而證書裏則包含了公鑰。咱們只能使用私鑰來進行簽名,若是不當心把私鑰弄丟了,那麼就表示這個證書基本上已經被咔嚓了,不要怕不要慌,你只是不能簽名了而已,解決的辦法就是revoke掉已經咔嚓了的證書,再從新申請一個,不過由此帶來的麻煩可也是很多,因此可見備份的重要性啊,在申請完證書的時候,最好導出而且保存好你的私鑰。這麼作的另外一個好處是當你須要跟其餘人共享證書時(尤爲是手頭兒銀子很少的我的開發者),只須要把私鑰發給他人就好。當你用本身的私鑰對代碼進行簽名後,蘋果就能夠用證書中的公鑰來進行驗證,確保真的是你對代碼進行簽名了,一來防止冒名頂替,二來確保代碼的完整性。
 

App ID

App ID的主要用途是標識一個或者一組App,App ID應該是和Xcode中的Bundle ID是一致的或者說,能夠匹配的。App ID有如下兩種:
  • Explicit App ID:惟一的App ID,這種類型的App ID只能用來標識一個應用,例如,com.aiscot.whatever,用來標識Bundle ID爲com.aiscot.whatever的應用程序,其餘的不行。
  • Wildcard App ID:通配符App ID,這種類型的App ID用來標識一組應用程序,例如,com.aiscot.*能夠用來標識Bundle ID爲com.aiscot.whatever1和com.aiscot.biteme1等全部Bundle ID以com.aiscot開頭的應用程序
每次建立一個新的App ID,咱們能夠設置該App ID所使用的App Services,好比有的使用Game Center,有的不使用,須要注意的是若是你要使用推送服務,那麼你要新建的這個新的App ID必須是Explicit類型的App ID,這樣兒,蘋果的Apns才能識別到惟一的一個應用從而進行推送提醒,而不會出現所謂「一呼百應」的現象,下面是目前的一些可選服務和相對應的配置要求:
配置的時候,必定仔細瞅瞅哈,搞錯了不要打我~\(≧▽≦)/~啦啦啦

Identifiers

Identifiers是標識符的意思,至關於身份證吧,用於建立如下三個:
App IDs
Pass Type IDs
Website Push IDs
其中,App ID是應用的惟一標識符,每一個應用的App ID是不同的。

Provisioning Profile

Provisioning Profile是配置文件,一個Provisioning Profile文件包含了剛剛咱們上面講的全部的內容:證書、App ID、設備。

試想一下,若是咱們要打包或者在真機上運行一個應用程序,咱們首先須要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等;而後須要指明它的App ID,而且驗證Bundle ID是否與其一致;再次,若是是真機調試,須要確認這臺設備可否用來運行程序。而Provisioning Profile就把這些信息所有打包在一塊兒,方便咱們在調試和發佈程序打包時使用,這樣咱們只要在不一樣的狀況下選擇不一樣的profile文件就能夠了。並且這個Provisioning Profile文件會在打包時嵌入.ipa的包裏。調試

例如,以下圖所示,一個用於Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可以使用的證書和設備。這意味着使用這個Provisioning Profile打包程序必須擁有相應的證書,而且是將App ID對應的程序運行到Devices中包含的設備上去。code

如上所述,在一臺設備上運行應用程序的過程以下:
 
與證書同樣,Provisioning Profile也分爲Development和Distribution兩種:


(注:前面提到不一樣帳戶類型所能建立的證書種類不一樣,顯然Profile文件的種類是和你所能建立的證書種類相關的)


Development (1年)
Distribution (1年)
In House
Ad Hoc
App Store
In House 與Ad Hoc的不一樣之處在於:In House沒有設備數量限制,而Ad Hoc是用來測試用的,Ad Hoc的包只能運行在該帳戶內已登記的可用設備上,顯然是有最多100個設備的數量限制。因此這兩種Provisioning Profile文件的區別就在於其中的設備限制不同而已,而他們所使用的Certificate是相同的。
 
 
證書的大概講解就先到這裏,我先出門剪個頭髮去,晚上把開發和發佈流程整理一下。
 
2015年1月31日,EricTang 記
 
from :http://blog.csdn.net/jeepxiaozi/article/details/43309217
相關文章
相關標籤/搜索