不讓蘋果開發(fā)者賬號(hào)折磨我

在iOS開發(fā)過程中,不可避免的要和證書打交道,真機(jī)調(diào)試、App上架、打包給測試去測試等都需要搞證書。在此過程中我們會(huì)遇到很多的問題,但是如果掌握了真機(jī)調(diào)試的原理和本質(zhì);遇到問題,我們就更容易定位問題之所在,從而迅速的解決問題。這篇文章不是一步步教給你證書,描述文件的制作(其實(shí)制作步驟是非常簡單的),而是盡可能的講明白Member Center中的一些知識(shí)及原理。并且此文不涉及如何申請開發(fā)者賬號(hào),以及App上架App Store的流程。

此篇文章的邏輯如下圖所示:

圖0-0 此篇文章的邏輯圖

Certificates

什么是證書

什么是證書?證書就是:證明證書擁有者擁有證書上所說的能力。一個(gè)證書要涉及到頒發(fā)者,擁有者,證明擁有者擁有了什么能力。例如,CET-4證書;頒發(fā)者:學(xué)校,擁有者:自己,證明的能力:英語達(dá)到四級(jí)水平。蘋果開發(fā)者證書也是一樣,頒發(fā)者:自己,擁有者:安裝證書的電腦;證明的能力:可以安裝或者打包某應(yīng)用程序。開發(fā)者證書分為兩種類型:Development Certificate(開發(fā)證書)和Production Certificate(發(fā)布證書)。

開發(fā)者證書能力來源

那么當(dāng)某臺(tái)電腦安裝開發(fā)者證書后,這臺(tái)電腦是如何擁有這種能力的呢?

蘋果在此運(yùn)用了代碼簽名驗(yàn)證。代碼簽名驗(yàn)證允許我們的操作系統(tǒng)來判斷是誰對App進(jìn)行了簽名,在安裝了Xcode后,Xcode會(huì)在項(xiàng)目編譯期間使用你的代碼簽名驗(yàn)證,這個(gè)驗(yàn)證是一個(gè)由Apple認(rèn)證過的公鑰-私鑰對組成,私鑰存儲(chǔ)在你的鑰匙串中(Mac本地,在系統(tǒng)實(shí)用工具中),公鑰包含在證書(Certificates)中,證書在本地鑰匙串和開發(fā)者賬號(hào)中都有存儲(chǔ)。另外,還有一個(gè)我們可以叫做媒介證書的證書來確保我們的證書(Certificates)是經(jīng)過授權(quán)而發(fā)布的。當(dāng)安裝好Xcode時(shí)媒介證書(Intermediate Certificate)就已經(jīng)安裝到我們的鑰匙串中去了。通過在開發(fā)者賬號(hào)(Developer Account)和本地(Mac)都經(jīng)過驗(yàn)證的證書(Certificate)我們就可以利用合法的證書進(jìn)行App的測試和發(fā)布了。

電腦向證書機(jī)構(gòu)申請憑證

在制作證書的時(shí)候會(huì)有一步讓你上傳一個(gè)CSR文件(用于換取證書的公鑰文件),導(dǎo)出CSR這個(gè)過程其實(shí)就是電腦向證書機(jī)構(gòu)申請憑證的過程。證書是你用電腦制作的并且頒發(fā)給你的電腦的。但是這臺(tái)電腦是否具有制作證書的能力,就是要這個(gè)CSR文件來憑證。CSR從鑰匙串中導(dǎo)出,具體步驟在制作證書的時(shí)候有具體描述,這里不再詳細(xì)敘述。

證書在Xcode工程中所對應(yīng)的位置

圖1-1 證書在Xcode工程中所對應(yīng)的位置

Identifiers

Identifiers中又分為App IDs、Pass Type IDs、Website Push IDs、iCloud Containers、App Groups、Merchant IDs、這里主要講解App IDs。

App ID是什么

App ID其實(shí)就是一個(gè)App的身份證,一個(gè)App的唯一標(biāo)示。在Project中稱為Bundle ID。在Member Center、Project、iTunes Connect都是需要此ID去標(biāo)示此App的唯一性。Bundle ID在不同環(huán)境下的表現(xiàn)關(guān)系。如(圖2-1)所示。

圖2-1 Bundle ID在不同環(huán)境下的表現(xiàn)

一個(gè)Bundle ID精確的標(biāo)識(shí)了一個(gè)App。Bundle ID字符串中只能包含字符(A-Z,a-z,0-9),連接符(-),點(diǎn)(.)而且此字符串最好是reverse-DNS格式的。例如你公司的域名是Acme.com,你App的名字是Hello,那么你可以用com.Acme.Hello作為你的Bundle ID。

Bundle ID的作用:

  • 在Xcode工程中,Bundle ID儲(chǔ)存在Info.plist中,當(dāng)你編譯工程的時(shí)候,他會(huì)把此文件拷貝到你的app包中。
  • 在iTunes Connect,用Bundle ID去標(biāo)識(shí)App,在你第一次構(gòu)建上傳之后,你就不能在改變或者刪除你的Bundle ID了。
  • 在Member Center,你創(chuàng)建一個(gè)和Bundle ID相匹配的App ID。如果App ID是精準(zhǔn)類型的,你就必須精確的去匹配你的Bundle ID,Bundle ID是大小寫敏感的。

在Member Center中添加App ID

在Member Center中添加App ID也是很簡單,選中App ID點(diǎn)擊右上角的+號(hào),App ID Description就是寫一下這個(gè)App ID的描述了。App ID Prefix:App ID的前綴,這里蘋果為了更精確的保證App ID的唯一性使用了開發(fā)者賬號(hào)的Team ID作為App ID的前綴。App ID Suffix:App ID的后綴,這里有兩種類型,一種是精準(zhǔn)的,一種是通用的,我們在使用中大多數(shù)都是使用精準(zhǔn)的,直接把我們的Bundle ID填進(jìn)去就好。下面就是App包含的服務(wù),這個(gè)根據(jù)自己業(yè)務(wù)所需的類型自己選擇就可以了,而我們用的最多的也就是Push Notifications推送服務(wù)。然后continue就可以了。

Devices

Device就是用來測試的設(shè)備。在Member Center中添加device的步驟其實(shí)也很簡單了,主要就是要拿到device的UDID,這里我們可以利用iTunes、iTools、Xcode這些工具都可以拿到設(shè)備的UDID。需要注意的就是,每個(gè)開發(fā)者賬號(hào),每年最多可以添加100臺(tái)調(diào)試設(shè)備,而且不能更改,想要更改就要等到下一年重新續(xù)費(fèi)的時(shí)候才能更改調(diào)試設(shè)備了。在下面要講述的描述文件中只有發(fā)布到App Store和In House的時(shí)候這兩種類型的描述文件的制作是不需要添加device的,而其他描述文件的制作都是需要添加device的。具體使用情況,參考下面的【Provisioning Profiles】。

使用iTunes查找UDID

圖3-1 使用iTunes查找UDID

使用Xcode查找UDID

選擇Xcode工具條上的Window,然后選Devices選項(xiàng)。

圖3-2 使用Xcode查找UDID

Provisioning Profiles

描述文件描述了可由哪臺(tái)電腦,把哪個(gè)App,安裝到哪臺(tái)手機(jī)上面。一個(gè)描述文件的制作是需要App ID、Device、Certificate這些信息的。所以蘋果在Member Center中把這個(gè)文件的制作排在最后面是很合理的。描述文件其實(shí)可以分為兩種類型,一種是帶有device信息的;而另一種是不帶device信息的。

帶device信息的描述文件

圖4-1帶有device信息的描述文件

這種類型的描述文件包括所有開發(fā)類型的描述文件和發(fā)布到Ad Hoc上面的描述文件。開發(fā)和發(fā)布到Ad Hoc上都是需要指明具體要安裝到哪部手機(jī)上的。

不帶device信息的描述文件

圖4-2不帶device信息的描述文件

不帶device信息的描述文件只有發(fā)布到App Store和In House兩種情況下才使用這個(gè)描述文件,因?yàn)橥ㄟ^這兩個(gè)渠道發(fā)布的App我們是不能確定將來要安裝到那一臺(tái)設(shè)備上的,因此也就不會(huì)帶有Device的信息。

描述文件在Xcode中的位置

圖4-3 描述文件在Xcode中的位置

團(tuán)隊(duì)開發(fā)證書的管理

在團(tuán)隊(duì)開發(fā)的時(shí)候,最好是一個(gè)人去管理證書,當(dāng)有其他人要用的時(shí)候,可直接導(dǎo)出.p12證書供其他開發(fā)者使用。證書出了問題,我感覺還是相當(dāng)麻煩的,而App ID在添加之后,基本上是不會(huì)改變的,除非要為App添加新的服務(wù),這時(shí)候才要重新編輯App ID,所以App ID最好也是管理證書的人去管理App ID。添加設(shè)備這一塊就很隨意了,所有的開發(fā)者都應(yīng)該有權(quán)去管理添加設(shè)備這一塊。描述文件的制作這個(gè)要區(qū)分一下是開發(fā)類型的描述文件,還是發(fā)布類型的描述文件。開發(fā)類型的描述文件應(yīng)該是團(tuán)隊(duì)里的每一個(gè)開發(fā)者都有權(quán)去管理的,實(shí)際上當(dāng)開發(fā)類型的描述文件出現(xiàn)問題的時(shí)候,開發(fā)者可以對此描述文件重新編輯一下進(jìn)行使用,這樣是不會(huì)影響其他開發(fā)者的,甚至你可以自己重新制作一個(gè)描述文件也沒什么問題。但是發(fā)布類型的描述文件,這個(gè)最好還是管理證書的那個(gè)人去管理這個(gè)描述文件。打包發(fā)布的時(shí)候如果這個(gè)描述文件出現(xiàn)變化,還是很麻煩的,而且這個(gè)描述文件對于團(tuán)隊(duì)其他開發(fā)者來說也不是很常用,甚至是根本用不到這個(gè)描述文件。以上這些就是我個(gè)人對于團(tuán)隊(duì)開發(fā)證書管理的建議,當(dāng)然也有不足之處,如你有好的建議,也歡迎你私密我,共同交流,共同進(jìn)步。

導(dǎo)出.p12

.p12又稱為個(gè)人信息交換證書。此證書實(shí)際包含了.cer證書及對應(yīng)的私鑰信息。上述證書中提到.cer文件中包含公鑰,私鑰在本地鑰匙串中。而.p12包含了公鑰私鑰,所以可以分發(fā)給團(tuán)隊(duì)其他成員使用。.cer文件沒有包含私鑰,所以別人的電腦上用此證書時(shí)找不到對應(yīng)私鑰,從而使用不了。在導(dǎo)出p12的時(shí)候是點(diǎn)擊證書導(dǎo)出的,如(圖5-1)所示:有下標(biāo)箭頭的就是有對應(yīng)的私鑰。

圖5-1 .p12證書的導(dǎo)出

舉例使用

上面幾段可能原理性的內(nèi)容過多了一些,但是個(gè)人感覺掌握這些原理還是很有必要的。下面舉個(gè)例子,對應(yīng)上面的原理,講一下實(shí)際的運(yùn)用。

產(chǎn)品需求:我的一個(gè)App,包含推送功能,在開發(fā)狀態(tài)下已經(jīng)測試完成所有功能,但是這時(shí)產(chǎn)品經(jīng)理為了保證產(chǎn)品在上線后也萬無一失,就想測試一下上線后,推送的功能是否穩(wěn)定。這時(shí)我們的App還沒有上線,那我們要怎樣才能去測試這樣的一個(gè)功能呢?

分析這個(gè)需求,要測試上線后推送功能,其實(shí)無非就是看上線后推送的證書會(huì)不會(huì)出現(xiàn)什么問題。這時(shí)候我們就會(huì)想到Ad Hoc。因?yàn)榘l(fā)布App除了App Store渠道之外,還可以選擇Ad Hoc。這時(shí)候我們就先選定用哪幾部手機(jī)進(jìn)行測試,先添加到device中,然后開始制作描述文件。點(diǎn)擊右上角+號(hào) -> 然后選擇Distribution中的Ad Hoc -> 點(diǎn)擊continue -> 選擇你要測試的App的App ID -> 點(diǎn)擊continue -> 選擇你發(fā)布到App Store時(shí)候所用的證書 -> 點(diǎn)擊continue -> 選擇你要安裝的測試設(shè)備 -> 給此描述文件起一個(gè)名字 -> 點(diǎn)擊generate。這樣你就生成了一個(gè)發(fā)布到Ad Hoc上面對應(yīng)的描述文件,用此描述文件打包出來的App和發(fā)布到App Store上面的App用的是同一個(gè)證書,所以在此情況下App的推送沒有什么問題,基本可以推斷App上線之后應(yīng)該也是沒有什么問題的。

總結(jié)

對于蘋果開發(fā)者證書不是太了解的同學(xué),證書問題可能是非常頭疼的一件事情。因?yàn)殚_發(fā)者賬號(hào)有三種類型,而在制作證書的時(shí)候,有開發(fā)證書,發(fā)布證書以及一些附帶屬性的證書,以及添加App ID,Device,制作描述文件,感覺就是很亂,搞了一堆的東西,最后也不知道這些東西到底都是干什么用的,運(yùn)氣好的話,可能這樣瞎搞一通,App就能跑到真機(jī)上面了,但是也不排除,瞎搞一通,還是有各種問題。所以我們在學(xué)習(xí)知識(shí)的時(shí)候,還是要盡可能的去了解他的原理。關(guān)于開發(fā)者證書,我們還要根據(jù)實(shí)際需求自己去做一些判斷,來滿足實(shí)際的需求。這篇文章看起來可能有些亂,而且有些地方也沒有提到。一些不足之處,還請多多見諒,同時(shí)也歡迎你私密我,私下交流共同探討,共同進(jìn)步。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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