1. 程式人生 > >iOS開發之打包上傳到App Store——(一)各種證書的理解

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

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

在我們平常的開發過程中,可以使用模擬器進行除錯,也可以直接使用真機測試,真機測試的話,證書的申請也是相對容易的多,但是當我們要實際打包釋出程式到App Store時,那個證書真叫一個頭疼。


可以看到有這麼幾個選項。其中,Devices指的是團隊(公司賬號是可以以Team的形式新增多個成員的)中的裝置,每個開發者賬號(不論公司還是個人)可以關聯100臺裝置,可以通過在蘋果開發者控制檯中新增,也可以通過Xcode直接新增裝置。

然後,我們今天的重點目標是各類的證書啊、App ID啊還有Provisioning Profile啥的,所以重點理解一下這幾個。

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的應用程式。

  •    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中包含的裝置上去。


如上所述,在一臺裝置上執行應用程式的過程如下:
與證書一樣,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 記