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