最簡(jiǎn)單的實(shí)現(xiàn)
要實(shí)現(xiàn)這個(gè)需求很簡(jiǎn)單,最直接的方式,蘋果官方生成一對(duì)公私鑰媒熊,私鑰由蘋果后臺(tái)保管,公鑰內(nèi)置到iOS設(shè)備里坟比,在我們將App上傳到App Store上時(shí)芦鳍,蘋果后臺(tái)使用私鑰對(duì)App進(jìn)行簽名,iOS設(shè)備下載這個(gè)應(yīng)用后葛账,用公鑰驗(yàn)證這個(gè)簽名柠衅,若簽名正確,則說明這個(gè)App是經(jīng)過蘋果后臺(tái)認(rèn)證的籍琳,并且沒有被修改過菲宴,這樣也就達(dá)到了蘋果的目的:保證iOS設(shè)備安裝的每一個(gè)APP都是經(jīng)過蘋果官方允許的贷祈。
如果我們的iOS設(shè)備安裝App只通過App Store這一種方式的話,那么問題到這里就已經(jīng)解決了喝峦,但是實(shí)際上除了從App Store上下載應(yīng)用势誊,還可以以一下三種方式安裝一個(gè)APP:
1.作為開發(fā)者,開發(fā)App時(shí)直接進(jìn)行真機(jī)調(diào)試谣蠢。
2.In-House 企業(yè)內(nèi)部分發(fā)粟耻,可以直接安裝企業(yè)證書簽名后的App。
3.AD-Hoc 相當(dāng)于是企業(yè)分發(fā)的限制版眉踱,限制安裝設(shè)備數(shù)量挤忙。
1.在你的Mac上生成一對(duì)公鑰和私鑰,稱為公鑰L和私鑰L谈喳。
2.蘋果自己有一對(duì)固定的公鑰和私鑰册烈,私鑰在蘋果后臺(tái),公鑰內(nèi)置在iOS設(shè)備中婿禽,分別稱為私鑰A和公鑰A茄厘。
3.把公鑰L傳到蘋果后天,用蘋果后天的私鑰A去簽名公鑰L谈宛,得到一份數(shù)據(jù)包括公鑰L和簽名,這份數(shù)據(jù)稱為證書胎署。
4.在蘋果后臺(tái)申請(qǐng)好AppID吆录,配置好設(shè)備ID列表,App權(quán)限開關(guān)琼牧,再加上第三步的證書恢筝,組成的數(shù)據(jù)用蘋果后天的私鑰A簽名,把數(shù)據(jù)和簽名一起組成一個(gè)Provisioning Profile文件巨坊,下載到本地Mac撬槽。
5.在開發(fā)時(shí),編譯完一個(gè)App后趾撵,用本地的私鑰L對(duì)這個(gè)App進(jìn)行簽名侄柔,同時(shí)把第四步生成的Provisionning Profile一起打包進(jìn)App里,文件名為embeded.mobileprovision占调,把App安裝到手機(jī)暂题。
6.在安裝時(shí),就可以使用iOS設(shè)備里內(nèi)置的公鑰A來驗(yàn)證Provisioning Profile的數(shù)字簽名是否正確究珊。
7.如果數(shù)字簽名沒有問題薪者,那么就能確保設(shè)備ID,AppID剿涮,entitlements言津,和App都是經(jīng)過蘋果認(rèn)證的攻人,可以安裝到iOS設(shè)備上。
上面的步驟對(duì)應(yīng)我們平時(shí)具體操作和概念是這樣的:
1.第一步對(duì)應(yīng)的是從keychain里“從這證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書”悬槽,這樣就在本地生成了一對(duì)公私鑰怀吻,保存的額CertificateSigningRequest就是公鑰,公鑰保存在本地電腦里陷谱。
2.第二步蘋果處理烙博,不用管。
3.第三步把CertificateSigningRequest上傳到蘋果后天烟逊,生成證書渣窜,并下載到本地。
4.第四步是在蘋果網(wǎng)站操作的宪躯,配置AppID乔宿,設(shè)備ID,權(quán)限等访雪,生成Provisioning Profile文件详瑞,并下載Provisioning Profile文件到本地。
5.xcode通過第三步下載下來的證書臣缀,去找對(duì)應(yīng)的本地私鑰坝橡,用本地私鑰去簽名App,并把Provisioning Profile文件一起打包進(jìn)去精置,安裝進(jìn)iOS設(shè)備计寇。
總結(jié)一些概念:
1.證書:內(nèi)容是公鑰或者私鑰,由其它機(jī)構(gòu)對(duì)其簽名組成的數(shù)據(jù)包脂倦。
2.entitlements:包含了App權(quán)限開關(guān)列表番宁,AppID,設(shè)備ID等赖阻。
3.CertificateSigningRequest:本地公鑰蝶押。
4.p12:本地私鑰。
5.Provisioning Profile:包含證書火欧,entitlements等數(shù)據(jù)棋电,并由蘋果后臺(tái)私鑰簽名的數(shù)據(jù)包。