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