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

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

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

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

Certificates

什么是證書

什么是證書根时?證書就是:證明證書擁有者擁有證書上所說的能力。一個證書要涉及到頒發(fā)者辰晕,擁有者蛤迎,證明擁有者擁有了什么能力。例如含友,CET-4證書替裆;頒發(fā)者:學(xué)校,擁有者:自己窘问,證明的能力:英語達到四級水平辆童。蘋果開發(fā)者證書也是一樣,頒發(fā)者:自己惠赫,擁有者:安裝證書的電腦把鉴;證明的能力:可以安裝或者打包某應(yīng)用程序。開發(fā)者證書分為兩種類型:Development Certificate(開發(fā)證書)和Production Certificate(發(fā)布證書)儿咱。

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

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

蘋果在此運用了代碼簽名驗證混埠。代碼簽名驗證允許我們的操作系統(tǒng)來判斷是誰對App進行了簽名怠缸,在安裝了Xcode后,Xcode會在項目編譯期間使用你的代碼簽名驗證钳宪,這個驗證是一個由Apple認證過的公鑰-私鑰對組成揭北,私鑰存儲在你的鑰匙串中(Mac本地扳炬,在系統(tǒng)實用工具中),公鑰包含在證書(Certificates)中罐呼,證書在本地鑰匙串和開發(fā)者賬號中都有存儲鞠柄。另外,還有一個我們可以叫做媒介證書的證書來確保我們的證書(Certificates)是經(jīng)過授權(quán)而發(fā)布的嫉柴。當安裝好Xcode時媒介證書(Intermediate Certificate)就已經(jīng)安裝到我們的鑰匙串中去了厌杜。通過在開發(fā)者賬號(Developer Account)和本地(Mac)都經(jīng)過驗證的證書(Certificate)我們就可以利用合法的證書進行App的測試和發(fā)布了。

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

在制作證書的時候會有一步讓你上傳一個CSR文件(用于換取證書的公鑰文件)计螺,導(dǎo)出CSR這個過程其實就是電腦向證書機構(gòu)申請憑證的過程夯尽。證書是你用電腦制作的并且頒發(fā)給你的電腦的。但是這臺電腦是否具有制作證書的能力登馒,就是要這個CSR文件來憑證匙握。CSR從鑰匙串中導(dǎo)出,具體步驟在制作證書的時候有具體描述陈轿,這里不再詳細敘述圈纺。

證書在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其實就是一個App的身份證峻呛,一個App的唯一標示罗售。在Project中稱為Bundle ID。在Member Center钩述、Project寨躁、iTunes Connect都是需要此ID去標示此App的唯一性。Bundle ID在不同環(huán)境下的表現(xiàn)關(guān)系切距。如(圖2-1)所示朽缎。

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

一個Bundle ID精確的標識了一個App。Bundle ID字符串中只能包含字符(A-Z谜悟,a-z,0-9)北秽,連接符(-)葡幸,點(.)而且此字符串最好是reverse-DNS格式的。例如你公司的域名是Acme.com贺氓,你App的名字是Hello蔚叨,那么你可以用com.Acme.Hello作為你的Bundle ID。

Bundle ID的作用:

  • 在Xcode工程中,Bundle ID儲存在Info.plist中蔑水,當你編譯工程的時候邢锯,他會把此文件拷貝到你的app包中。
  • 在iTunes Connect搀别,用Bundle ID去標識App丹擎,在你第一次構(gòu)建上傳之后,你就不能在改變或者刪除你的Bundle ID了歇父。
  • 在Member Center蒂培,你創(chuàng)建一個和Bundle ID相匹配的App ID。如果App ID是精準類型的榜苫,你就必須精確的去匹配你的Bundle ID护戳,Bundle ID是大小寫敏感的。

在Member Center中添加App ID

在Member Center中添加App ID也是很簡單垂睬,選中App ID點擊右上角的+號媳荒,App ID Description就是寫一下這個App ID的描述了。App ID Prefix:App ID的前綴驹饺,這里蘋果為了更精確的保證App ID的唯一性使用了開發(fā)者賬號的Team ID作為App ID的前綴钳枕。App ID Suffix:App ID的后綴,這里有兩種類型逻淌,一種是精準的么伯,一種是通用的,我們在使用中大多數(shù)都是使用精準的卡儒,直接把我們的Bundle ID填進去就好田柔。下面就是App包含的服務(wù),這個根據(jù)自己業(yè)務(wù)所需的類型自己選擇就可以了骨望,而我們用的最多的也就是Push Notifications推送服務(wù)硬爆。然后continue就可以了。

Devices

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

使用iTunes查找UDID

圖3-1 使用iTunes查找UDID

使用Xcode查找UDID

選擇Xcode工具條上的Window,然后選Devices選項箱残。

圖3-2 使用Xcode查找UDID

Provisioning Profiles

描述文件描述了可由哪臺電腦滔迈,把哪個App,安裝到哪臺手機上面疚宇。一個描述文件的制作是需要App ID亡鼠、Device、Certificate這些信息的敷待。所以蘋果在Member Center中把這個文件的制作排在最后面是很合理的间涵。描述文件其實可以分為兩種類型,一種是帶有device信息的榜揖;而另一種是不帶device信息的勾哩。

帶device信息的描述文件

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

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

不帶device信息的描述文件

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

不帶device信息的描述文件只有發(fā)布到App Store和In House兩種情況下才使用這個描述文件思劳,因為通過這兩個渠道發(fā)布的App我們是不能確定將來要安裝到那一臺設(shè)備上的,因此也就不會帶有Device的信息妨猩。

描述文件在Xcode中的位置

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

團隊開發(fā)證書的管理

在團隊開發(fā)的時候潜叛,最好是一個人去管理證書,當有其他人要用的時候壶硅,可直接導(dǎo)出.p12證書供其他開發(fā)者使用威兜。證書出了問題,我感覺還是相當麻煩的庐椒,而App ID在添加之后椒舵,基本上是不會改變的,除非要為App添加新的服務(wù)约谈,這時候才要重新編輯App ID笔宿,所以App ID最好也是管理證書的人去管理App ID。添加設(shè)備這一塊就很隨意了棱诱,所有的開發(fā)者都應(yīng)該有權(quán)去管理添加設(shè)備這一塊泼橘。描述文件的制作這個要區(qū)分一下是開發(fā)類型的描述文件,還是發(fā)布類型的描述文件迈勋。開發(fā)類型的描述文件應(yīng)該是團隊里的每一個開發(fā)者都有權(quán)去管理的侥加,實際上當開發(fā)類型的描述文件出現(xiàn)問題的時候,開發(fā)者可以對此描述文件重新編輯一下進行使用粪躬,這樣是不會影響其他開發(fā)者的担败,甚至你可以自己重新制作一個描述文件也沒什么問題。但是發(fā)布類型的描述文件镰官,這個最好還是管理證書的那個人去管理這個描述文件提前。打包發(fā)布的時候如果這個描述文件出現(xiàn)變化,還是很麻煩的泳唠,而且這個描述文件對于團隊其他開發(fā)者來說也不是很常用狈网,甚至是根本用不到這個描述文件。以上這些就是我個人對于團隊開發(fā)證書管理的建議笨腥,當然也有不足之處拓哺,如你有好的建議,也歡迎你私密我脖母,共同交流士鸥,共同進步。

導(dǎo)出.p12

.p12又稱為個人信息交換證書谆级。此證書實際包含了.cer證書及對應(yīng)的私鑰信息烤礁。上述證書中提到.cer文件中包含公鑰,私鑰在本地鑰匙串中肥照。而.p12包含了公鑰私鑰脚仔,所以可以分發(fā)給團隊其他成員使用。.cer文件沒有包含私鑰舆绎,所以別人的電腦上用此證書時找不到對應(yīng)私鑰鲤脏,從而使用不了。在導(dǎo)出p12的時候是點擊證書導(dǎo)出的吕朵,如(圖5-1)所示:有下標箭頭的就是有對應(yīng)的私鑰猎醇。

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

舉例使用

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

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

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

總結(jié)

對于蘋果開發(fā)者證書不是太了解的同學(xué)洽胶,證書問題可能是非常頭疼的一件事情。因為開發(fā)者賬號有三種類型往湿,而在制作證書的時候妖异,有開發(fā)證書,發(fā)布證書以及一些附帶屬性的證書领追,以及添加App ID他膳,Device,制作描述文件绒窑,感覺就是很亂棕孙,搞了一堆的東西,最后也不知道這些東西到底都是干什么用的些膨,運氣好的話蟀俊,可能這樣瞎搞一通,App就能跑到真機上面了订雾,但是也不排除肢预,瞎搞一通,還是有各種問題洼哎。所以我們在學(xué)習(xí)知識的時候烫映,還是要盡可能的去了解他的原理。關(guān)于開發(fā)者證書噩峦,我們還要根據(jù)實際需求自己去做一些判斷锭沟,來滿足實際的需求。這篇文章看起來可能有些亂识补,而且有些地方也沒有提到族淮。一些不足之處,還請多多見諒,同時也歡迎你私密我祝辣,私下交流共同探討贴妻,共同進步。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末较幌,一起剝皮案震驚了整個濱河市揍瑟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乍炉,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤馍,死亡現(xiàn)場離奇詭異岛琼,居然都是意外死亡,警方通過查閱死者的電腦和手機巢株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門槐瑞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阁苞,你說我怎么就攤上這事困檩。” “怎么了那槽?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵悼沿,是天一觀的道長。 經(jīng)常有香客問我骚灸,道長糟趾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任甚牲,我火速辦了婚禮义郑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丈钙。我一直安慰自己非驮,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布雏赦。 她就那樣靜靜地躺著劫笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喉誊。 梳的紋絲不亂的頭發(fā)上邀摆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音伍茄,去河邊找鬼栋盹。 笑死,一個胖子當著我的面吹牛敷矫,可吹牛的內(nèi)容都是我干的例获。 我是一名探鬼主播汉额,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨汤!你這毒婦竟也來了蠕搜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤收壕,失蹤者是張志新(化名)和其女友劉穎妓灌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜜宪,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡虫埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了圃验。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掉伏。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澳窑,靈堂內(nèi)的尸體忽然破棺而出斧散,到底是詐尸還是另有隱情,我是刑警寧澤摊聋,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布鸡捐,位于F島的核電站,受9級特大地震影響栗精,放射性物質(zhì)發(fā)生泄漏闯参。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一悲立、第九天 我趴在偏房一處隱蔽的房頂上張望鹿寨。 院中可真熱鬧,春花似錦薪夕、人聲如沸脚草。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏慨。三九已至,卻和暖如春姑隅,著一層夾襖步出監(jiān)牢的瞬間写隶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工讲仰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慕趴,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像冕房,于是被迫代替她去往敵國和親躏啰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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