ios學(xué)習(xí)之 關(guān)于Certificate、Provisioning Profile、App ID的介紹及其之間的關(guān)系

轉(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é)。

1.概念介紹

如果你擁有一個(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是相同的。

2.開發(fā)/發(fā)布流程

了解了上面的概念,再來看開發(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)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評(píng)論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評(píng)論 1 286
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容