轉(zhuǎn)自:http://blog.csdn.net/wangeen/article/details/19930667
剛接觸iOS開發(fā)的人難免會(huì)對(duì)蘋果的各種證書、配置文件等不甚了解,可能你按照網(wǎng)上的教程一步一步的成功申請(qǐng)了真機(jī)調(diào)試,但是還是對(duì)其中的緣由一知半解。這篇文章就對(duì)Certificate、Provisioning Profile等做個(gè)總結(jié)。
如果你擁有一個(gè)開發(fā)者賬戶的話,在iOS Dev Center打開Certificates, Indentifiers & Profiles,你就可以看到如下的列表:
Profile Portal改版有一段時(shí)間了,改版之后的結(jié)構(gòu)比以前更清晰明了,易于理解和管理。
上面的列表就包含了開發(fā)、調(diào)試和發(fā)布iOS應(yīng)用程序所需的所有內(nèi)容:Certificates、Identifiers、Devices、Provisioning Profiles。下面將一一解釋這幾個(gè)東東。
Certificate
證書是用來給應(yīng)用程序簽名的,只有經(jīng)過簽名的應(yīng)用程序才能保證他的來源是可信任的,并且代碼是完整的, 未經(jīng)修改的。在Xcode Build Setting的Code Signing Identity中,你可以設(shè)置用于為代碼簽名的證書。
眾所周知,我們申請(qǐng)一個(gè)Certificate之前,需要先申請(qǐng)一個(gè)Certificate Signing Request (CSR) 文件,而這個(gè)過程中實(shí)際上是生成了一對(duì)公鑰和私鑰,保存在你Mac的Keychain中。代碼簽名正是使用這種基于非對(duì)稱秘鑰的加密方式,用私鑰進(jìn)行簽名,用公鑰進(jìn)行驗(yàn)證。如下圖所示,在你Mac的keychain的login中存儲(chǔ)著相關(guān)的公鑰和私鑰,而證書中包含了公鑰。你只能用私鑰來進(jìn)行簽名,所以如果沒有了私鑰,就意味著你不能進(jìn)行簽名了,所以就無(wú)法使用這個(gè)證書了,此時(shí)你只能revoke之前的證書再申請(qǐng)一個(gè)。因此在申請(qǐng)完證書時(shí),最好導(dǎo)出并保存好你的私鑰。當(dāng)你想與其他人或其他設(shè)備共享證書時(shí),把私鑰傳給它就可以了。私鑰保存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。當(dāng)你用自己的私鑰對(duì)代碼簽名后,蘋果就可以用證書中的公鑰來進(jìn)行驗(yàn)證,確保是你對(duì)代碼進(jìn)行了簽名,而不是別人冒充你,同時(shí)也確保代碼的完整性等。
證書主要分為兩類:Development和Production,Development證書用來開發(fā)和調(diào)試應(yīng)用程序,Production主要用來分發(fā)應(yīng)用程序(根據(jù)證書種類有不同作用),下面是證書的分類信息:(括號(hào)內(nèi)為證書有效期)
(注:不同類型的開發(fā)者賬戶所能創(chuàng)建的證書種類不同,關(guān)于開發(fā)者賬戶的對(duì)比和InHouse證書相關(guān)的內(nèi)容,請(qǐng)見我的另一篇文章)
Development
App Development (1年):用來開發(fā)和真機(jī)調(diào)試應(yīng)用程序。
Push Development (1年):用來調(diào)試Apple Push Notification
Production
In-House and Ad Hoc (3年):用來發(fā)布In-House和AdHoc的應(yīng)用程序。
App Store :用來發(fā)布提交App Store的應(yīng)用程序。
MDM CSR
Push Production (1年):用來在發(fā)布版本中使用Apple Push Notification。
Pass Type ID Certificate
Website Push ID Certificate
有一些類型的證書我沒有使用過,所以也不了解具體的作用。
App ID
App ID用于標(biāo)識(shí)一個(gè)或者一組App,App ID應(yīng)該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:
Explicit App ID:唯一的App ID,這種App ID用于唯一標(biāo)識(shí)一個(gè)應(yīng)用程序,例如com.ABC.demo1,標(biāo)識(shí)Bundle ID為com.ABC.demo1的程序。
Wildcard App ID:通配符App ID,用于標(biāo)識(shí)一組應(yīng)用程序。例如*可以表示所有應(yīng)用程序,而com.ABC.*可以表示以com.ABC開頭的所有應(yīng)用程序。
每創(chuàng)建一個(gè)App ID,我們都可以設(shè)置該App ID所使用的APP Services,也就是其所使用的額外服務(wù)。每種額外服務(wù)都有著不同的要求,例如,如果要使用Apple Push Notification Services,則必須是一個(gè)explicit App ID,以便能唯一標(biāo)識(shí)一個(gè)應(yīng)用程序。下面是目前所有可選的服務(wù)和相應(yīng)的配置要求。
如果你的App使用上述的任何一種service,就要按照要求去配置。
Device
Device最簡(jiǎn)單了,就是iOS設(shè)備。Devices中包含了該賬戶中所有可用于開發(fā)和測(cè)試的設(shè)備。 每臺(tái)設(shè)備使用UDID來唯一標(biāo)識(shí)。
每個(gè)賬戶中的設(shè)備數(shù)量限制是100個(gè)。Disable 一臺(tái)設(shè)備也不會(huì)增加名額,只能在membership year 開始的時(shí)候才能通過刪除設(shè)備來增加名額。
關(guān)于設(shè)備數(shù)量的問題,詳見這篇文章。
Provisioning Profile
一個(gè)Provisioning Profile文件包含了上述的所有內(nèi)容:證書、App ID、設(shè)備。
試想一下,如果我們要打包或者在真機(jī)上運(yùn)行一個(gè)應(yīng)用程序,我們首先需要證書來進(jìn)行簽名,用來標(biāo)識(shí)這個(gè)應(yīng)用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且驗(yàn)證Bundle ID是否與其一致;再次,如果是真機(jī)調(diào)試,需要確認(rèn)這臺(tái)設(shè)備能否用來運(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è)備。這意味著使用這個(gè)Provisioning Profile打包程序必須擁有相應(yīng)的證書,并且是將App ID對(duì)應(yīng)的程序運(yùn)行到Devices中包含的設(shè)備上去。
如上所述,在一臺(tái)設(shè)備上運(yùn)行應(yīng)用程序的過程如下:
與證書一樣,Provisioning Profile也分為Development和Distribution兩種:
(注:前面提到不同賬戶類型所能創(chuàng)建的證書種類不同,顯然Profile文件的種類是和你所能創(chuàng)建的證書種類相關(guān)的)
Development (1年)
Distribution (1年)
In House
Ad Hoc
App Store
In House 與Ad Hoc的不同之處在于:In House沒有設(shè)備數(shù)量限制,而Ad Hoc是用來測(cè)試用的,Ad Hoc的包只能運(yùn)行在該賬戶內(nèi)已登記的可用設(shè)備上,顯然是有最多100個(gè)設(shè)備的數(shù)量限制。所以這兩種Provisioning?Profile文件的區(qū)別就在于其中的設(shè)備限制不一樣而已,而他們所使用的Certificate是相同的。
了解了上面的概念,再來看開發(fā)及發(fā)布流程就非常簡(jiǎn)單了,而且相信你不用看教程也能一步步完成所有的操作了。
開發(fā)/真機(jī)調(diào)試流程
根據(jù)上面的介紹,可以知道進(jìn)行Development主要有以下幾個(gè)步驟:
申請(qǐng)證書
加入設(shè)備
生成Provisioning Profile
設(shè)置Xcode Code Sign Identifer
事實(shí)上第三步通常是不需要的,因?yàn)槲覀兺ǔ6际怯肵code生成和管理的iOS Team Provisioning Profile來進(jìn)行開發(fā),因?yàn)樗浅7奖悖圆恍枰约菏謩?dòng)生成Provisioning Profile。
iOS Team Provisioning Profile是第一次使用Xcode添加設(shè)備時(shí),Xcode自動(dòng)生成的,它包含了Xcode生成的一個(gè)Wildcard App ID(*,匹配所有應(yīng)用程序),賬戶里面所有的Devices和所有Development Certificates,如下圖所示。因此,team中的所有成員都可以使用這個(gè)iOS Team Provisioning Profile在team中的所有設(shè)備上調(diào)試所有的應(yīng)用程序。并且當(dāng)有新設(shè)備添加進(jìn)來時(shí),Xcode會(huì)更新這個(gè)文件。
發(fā)布流程
網(wǎng)上有很多關(guān)于發(fā)布App Store的流程,我就不綴述了,不過根據(jù)上面的概念介紹,不管是App Store、In-House還是Ad-Hoc,打包流程都是差不多的,都包括了以下幾個(gè)關(guān)鍵步驟:
創(chuàng)建發(fā)布證書
創(chuàng)建App ID
創(chuàng)建對(duì)應(yīng)的Provisioning Profile文件
設(shè)備Bundle ID和App ID一致
設(shè)置Xcode Code Sign Identifer,選擇合適的Profile和證書進(jìn)行簽名,打包
以上就是對(duì)證書、Provisioning Profile、App ID等的介紹,下一篇文章會(huì)介紹以下In-House證書相關(guān)的內(nèi)容。