分類:

IOS開發(fā)--從零開始(41)

OK,有日子沒寫iOS開發(fā)的相關文章啦,主要是最近的精力都沒在這上面,不過既然產(chǎn)品已經(jīng)快要出來了,就有必要了解一下各種證書啥的(眾所周知iOS的一堆證書可是很讓人頭大呀),最近確實被這個搞得頭大,然后就決定參考網(wǎng)上的一些資料,進行一下整理,留作一個備份。
內(nèi)容參考自:蘋果所有常用證書,appID,Provisioning Profiles配置說明及制作圖文教程
理解Certificate、App Id、Identifiers 和 Provisioning Profile
在我們平常的開發(fā)過程中,可以使用模擬器進行調(diào)試,也可以直接使用真機測試,真機測試的話,證書的申請也是相對容易的多,但是當我們要實際打包發(fā)布程序到App Store時,那個證書真叫一個頭疼。
首先,我們打開https://developer.apple.com/account/ios/profile/profileList.action,看下左邊:
可以看到有這么幾個選項。其中,Devices指的是團隊(公司賬號是可以以Team的形式添加多個成員的)中的設備,每個開發(fā)者賬號(不論公司還是個人)可以關聯(lián)100臺設備,可以通過在蘋果開發(fā)者控制臺中添加,也可以通過Xcode直接添加設備。
然后,我們今天的重點目標是各類的證書啊、App ID啊還有Provisioning Profile啥的,所以重點理解一下這幾個。
證書指的是由蘋果頒發(fā)(先交錢后發(fā)貨的說)給你的證明你有權利進行iOS開發(fā)(不買證書你就只能用模擬器的說)并且可以將你開發(fā)的應用上傳到App Store(么有證書估計只能自己做越獄開發(fā))的一個憑證,表示你是一個開發(fā)者,就跟護照啊、身份證啊啥的一樣。一個開發(fā)者賬號只有一套,這個套裝里呢包含兩個證書,一個是Development證書,也就是所謂的開發(fā)證書,憑借這個證書你可以進行開發(fā)和真機調(diào)試(么有這個就只能用模擬器啦);另一個是Distribution證書,也叫Production證書,即所謂的分發(fā)證書或者說生產(chǎn)證書。其中呢,Development證書可以制作多個副本分發(fā)到多臺設備,但是Distribution證書只能有一個,不能制作副本分發(fā)到多臺電腦。
下面大致介紹一下證書的種類以及分別包含的子分類啥的:
Development
App Development (1年):用來開發(fā)和真機調(diào)試應用程序。
Push Development (1年):用來調(diào)試Apple Push Notification
Production
In-House and Ad Hoc (3年):用來發(fā)布In-House和AdHoc的應用程序。
App Store :用來發(fā)布提交App Store的應用程序。
MDM CSR
Push Production (1年):用來在發(fā)布版本中使用Apple Push Notification。
Pass Type ID Certificate
Website Push ID Certificate
需要注意的是:
在我們申請?zhí)砑右粋€Certificate之前,需要先申請一個Certificate Signing Request(CSR)文件,這個過程呢,實際上是生成了一對公鑰和私鑰,保存在我們電腦上的鑰匙串中。代碼的簽名也就是使用這種基于非對稱密鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。如下圖:
我們的鑰匙串中存儲著相關的公鑰和私鑰,而證書里則包含了公鑰。我們只能使用私鑰來進行簽名,如果不小心把私鑰弄丟了,那么就表示這個證書基本上已經(jīng)被咔嚓了,不要怕不要慌,你只是不能簽名了而已,解決的辦法就是revoke掉已經(jīng)咔嚓了的證書,再重新申請一個,不過由此帶來的麻煩可也是不少,所以可見備份的重要性啊,在申請完證書的時候,最好導出并且保存好你的私鑰。這么做的另一個好處是當你需要跟其他人共享證書時(尤其是手頭兒銀子不多的個人開發(fā)者),只需要把私鑰發(fā)給他人就好。當你用自己的私鑰對代碼進行簽名后,蘋果就可以用證書中的公鑰來進行驗證,確保真的是你對代碼進行簽名了,一來防止冒名頂替,二來確保代碼的完整性。
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開頭的應用程序
每次創(chuàng)建一個新的App ID,我們可以設置該App ID所使用的App Services,比如有的使用Game Center,有的不使用,需要注意的是如果你要使用推送服務,那么你要新建的這個新的App ID必須是Explicit類型的App ID,這樣兒,蘋果的Apns才能識別到唯一的一個應用從而進行推送提醒,而不會出現(xiàn)所謂“一呼百應”的現(xiàn)象,下面是目前的一些可選服務和相對應的配置要求:
配置的時候,一定仔細瞅瞅哈,搞錯了不要打我~\(≧▽≦)/~啦啦啦
Identifiers是標識符的意思,相當于身份證吧,用于創(chuàng)建以下三個:
App IDs
Pass Type IDs
Website Push IDs
其中,App ID是應用的唯一標識符,每個應用的App ID是不一樣的。
Provisioning Profile是配置文件,一個Provisioning Profile文件包含了剛剛我們上面講的所有的內(nèi)容:證書、App ID、設備。
試想一下,如果我們要打包或者在真機上運行一個應用程序,我們首先需要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且驗證Bundle ID是否與其一致;再次,如果是真機調(diào)試,需要確認這臺設備能否用來運行程序。而Provisioning Profile就把這些信息全部打包在一起,方便我們在調(diào)試和發(fā)布程序打包時使用,這樣我們只要在不同的情況下選擇不同的profile文件就可以了。而且這個Provisioning Profile文件會在打包時嵌入.ipa的包里。
例如,如下圖所示,一個用于Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可使用的證書和設備。這意味著使用這個Provisioning Profile打包程序必須擁有相應的證書,并且是將App ID對應的程序運行到Devices中包含的設備上去。
如上所述,在一臺設備上運行應用程序的過程如下:
與證書一樣,Provisioning Profile也分為Development和Distribution兩種:
(注:前面提到不同賬戶類型所能創(chuàng)建的證書種類不同,顯然Profile文件的種類是和你所能創(chuàng)建的證書種類相關的)
Development (1年)
Distribution (1年)
In House
Ad Hoc
App Store
In House 與Ad Hoc的不同之處在于:In House沒有設備數(shù)量限制,而Ad Hoc是用來測試用的,Ad Hoc的包只能運行在該賬戶內(nèi)已登記的可用設備上,顯然是有最多100個設備的數(shù)量限制。所以這兩種Provisioning Profile文件的區(qū)別就在于其中的設備限制不一樣而已,而他們所使用的Certificate是相同的。
證書的大概講解就先到這里,我先出門剪個頭發(fā)去,晚上把開發(fā)和發(fā)布流程整理一下。