阐明iOS证书和provision文件
譯:闡明iOS證書和provision文件
許多iOS開發(fā)人員都會和你說在iOS開發(fā)很困惑的問題之一,將app真正運行在真實的設(shè)備(iPhone iPad而不是模擬器),因為所有的這些都會涉及從蘋果獲得證書,甚至那些知道證書的一般流程的,仍會感覺有些奇怪一切是如何運行的,這將是一個長期的過程,但我希望本文將對你有用。
為了更好的理解我們需要去了解這些的理由,你需要謹(jǐn)記這背后最大的原因:
蘋果,只有蘋果,只允許硬件設(shè)備在有限的時間內(nèi)(develop id 一年的時間)運行指定的軟件
是的,這是一個非常嚴(yán)格的規(guī)則,很多人不喜歡它,但是蘋果用鐵腕強制推行,這條規(guī)則強制軟件使用密碼簽名,每一次app啟動時,系統(tǒng)將檢查app,以確保它被蘋果和開發(fā)者允許運行,通過設(shè)備越獄和軟件破解,可以繞過這些,但對大多數(shù)人這不是一個好選擇。
蘋果數(shù)字簽名
如果只有蘋果可以運行軟件,那開發(fā)者如何測試軟件?(這是不可能的)簡短的答案是蘋果只相信符合蘋果利益的app,長的答案很長,可以從以下幾點開始:
當(dāng)你注冊成為iOS開發(fā)者,蘋果允許你去申請一個特別的證書,用來以蘋果的方式去簽名app或者其他,你通過使用keychain創(chuàng)建一個
Certificate Signing Request (CSR),當(dāng)你從“證書中心請求一個證書”(
Request a Certificate from a Certificate Authority)
兩件事情發(fā)生:
1 首先,keychain 將為你自動創(chuàng)建一個公鑰和私鑰,在keys的目錄下,可以看見它們。這些keys是非常重要的:它們用來告訴蘋果你是誰,不要丟失這些文件,除非你想重做這些流程,可以做個備份。
2 最后,keychain使用keys創(chuàng)建一個certSigningRequest文件去蘋果公司,這些文件包含了你的名字、email、公鑰、并且使用私鑰簽名,從而Apple確保是你創(chuàng)建的。
現(xiàn)在,你要上傳CSR給Apple,Apple將確認(rèn)一切是否正常,然后發(fā)給你一個開發(fā)者證書(development certificate),你可以下載“developer_identity.cer”文件到你的系統(tǒng),然后拖到keychain中(雙擊該文件也可以)。這個新的證書將在“My Certificates
”目錄中顯示,雙擊它,可以查看它的內(nèi)容:這是一個簡單的證書,由Apple發(fā)布,說明Apple相信你是誰,將會在簽名app時使用到。
Provisioning Files(配置文件)
你的第一完成了,你有了一個來自Apple的說明你是誰的和簽名app的證書,就這樣么?不,你的iPod/iPhone仍然不知道它是否可以信任你,這里就需要配置文件登場了。
當(dāng)你創(chuàng)建了配置文件,你
在Provision Portal
使用上一步蘋果頒發(fā)給你的證書,關(guān)聯(lián)了iOS設(shè)備,結(jié)果就是一個用來記錄iOS app的過程(即該app是否開啟push功能等這些信息)和一個部署到設(shè)備所需要的.provision的文件。下載它,并雙擊安裝,Xcode自動將配置文件添加到Organzier.
你可以在一個工程下有數(shù)個配置文件,也可以對所有的app使用一個配置文件。如果你創(chuàng)建一個新app,或者繼續(xù)開發(fā)先前的,一個簡單方法是對開發(fā)使用一個配置文件。最后,你需要創(chuàng)建一個特別配置文件為每個app,因為AppId添加了在
Provision Portal比較該app的設(shè)置信息(如是否開啟push等)。完成這些,你可以設(shè)置AppId提交到app store。
編譯App并運行
讓我們復(fù)習(xí)一下,有已經(jīng)有了用來定義你是誰的公鑰和私鑰,從Apple頒發(fā)的證書說明了它知道你誰,配置文件說明了你的項目可以運行在你的設(shè)備上,現(xiàn)在是生成執(zhí)行文件的時候。
我將不在解釋設(shè)置Xcode或者M(jìn)ono Touch去編譯app,網(wǎng)上有許多教程。我唯一提醒的是你要使用你的這個證書和配置文件
設(shè)置
編譯工具。
當(dāng)你運行編譯的app,所做的是創(chuàng)建一個包含所有你的app需要的文件的目錄,如果你右鍵點擊最終的app,選擇顯示目錄下的內(nèi)容,除了所有正常工程文件和資源,你將發(fā)現(xiàn)還有兩個東西:
1 實際的配置文件,是你已經(jīng)配置文件的直接拷貝。
2 一個叫“_CodeSignature”的目錄,這個很有趣,里面有一個"CodeResources"的文件,這是一個簡單的plist文件,包含了該包內(nèi)所有其他文件的加密hash值。
當(dāng)app被安裝后,iOS做了很多事情:第一,它確保配置文件(provison file)是由蘋果簽發(fā)的,然后它使用provision key比較每一個真實文件的hash值和在CodeResources下hash值,去確保這些文件從編譯開始一直未被該改變,如果有任何問題,app是不會安裝的。
最后一次檢查發(fā)生在當(dāng)你運行app時,iOS檢查app未被改變,你擁有一個與嘗試運行app相匹配的配置文件,如果沒有,app將crash。
其他部署
Ad-hoc部署工作與上文寫的相似,你仍然要注冊你的設(shè)備,所有的事情都一樣。
企業(yè)開發(fā)有些不一樣,當(dāng)你有一家數(shù)千臺iPhone使用者的大公司,Apple表現(xiàn)得更喜歡你和信任你多一些,他們給你一個允許你像apple公司一樣的重簽名的證書,為了所有的iOS設(shè)備將自動識別你并且可以運行app,所以你不需要在配置文件里注冊設(shè)備,除了這一點,其他的都一樣。
最終,部署到App Store,像企業(yè)部署一樣,不需在配置文件里注冊設(shè)備,不同的是,在從Apple的的的配置文件中的簽名不允許你到處運行,你不可以運行app除了在AppStore里,你唯一能做的事就是提交到AppStore等待許可。
當(dāng)蘋果接受到你的App,已經(jīng)被你簽名過并包含配置文件,所以他們知道你是一個提交app的正確的人,并且App是一個應(yīng)該被許可的,在檢查回顧過之后,他們最終用他們自己的可以運行在任何設(shè)備的簽名重新簽名app。
寫的這些能在官方文檔之外幫助到我,我也希望能幫助到其他人,我希望沒有謬誤,如果有任何問題,請留言,我將解決它。
原文地址
http://escoz.com/blog/demystifying-ios-certificates-and-provisioning-files/
蘋果官方部署手冊
總結(jié)
以上是生活随笔為你收集整理的阐明iOS证书和provision文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 火狐下的GreaseMonkey和Chr
- 下一篇: bootstrap之 Badge 角标