背景
首先來點背景——為什么會有「簽名」男应。
1970年代麻裁,在Unix上運行program/軟件,不需要額外獲取權(quán)限贤姆,就能訪問系統(tǒng)的硬件、數(shù)據(jù)(因為程序是自己寫的——你應(yīng)該不會給自己電腦「下毒」)稳衬。
后來霞捡,第三方軟件出現(xiàn),出于安全原因薄疚,需要對第三方軟件的權(quán)限做出限制(請求同意后才能獲取權(quán)限)——你應(yīng)該不想出現(xiàn)這種情況:別人開發(fā)的軟件碧信,在不經(jīng)你同意的情況下,讀取了你D盤「Cooking」文件夾里面《第一次做鴨的經(jīng)歷》這個文件——雖然你的鴨做得真的很好街夭。
所以砰碴,為了解決上面這個問題,Apple的工程師板丽,想到的解決方案是App Sandbox——就是把第三方軟件框在一個盒子里呈枉,想要用你的硬件(攝像頭、麥克風(fēng))埃碱,或者訪問你的數(shù)據(jù)猖辫,都要經(jīng)過你的同意。
這個看這張圖:
「RW APP」就表示第三方軟件砚殿,黃色區(qū)域就是Sanbox啃憎,左邊就是你電腦的一些資源——第三方軟件在經(jīng)過你同意后,才能訪問似炎。
而今天討論的「簽名」辛萍,就隱藏在右邊的「Provisioning Profile」,這個術(shù)語羡藐,這里就不作翻譯了叹阔,后面會介紹定義。
術(shù)語
這里涉及幾個術(shù)語:App ID传睹,Entitlement耳幢,Certificate,Provisioning Profile
先看一張圖:
App ID
是你的App在蘋果平臺上的唯一識別碼。并通過這個App ID睛藻,和你的開發(fā)團隊綁定在一起启上。(App ID
,Bundle ID
店印,Identifier
冈在,可以當(dāng)作是同一樣?xùn)|西)
如圖所述,它回答的問題是:Who are you按摘?
Entitlement
Xcode中點擊Capability
的+
按鈕包券,會增加一個entitlements
后綴的文件。
(這里的Entitlement
炫贤,Capability
溅固,Capabilities
,可以簡單看做是同一樣?xùn)|西)
也可以看作是「permission」的同義詞兰珍。
這些文件侍郭,描述了你的App要訪問哪些系統(tǒng)資源。如圖所示掠河,就是「你想干嘛」—— What do you want to do?
注意亮元,在操作層面,Entitlement是App ID的一部分唠摹,因為在蘋果開發(fā)者網(wǎng)站中爆捞,你想修改Entitlement,就是去到修改Identifier的地方:
另外勾拉,如果修改了這里的Entitlement煮甥,就需要重新生成「Provisioning Profile」去打包。
Certificate
我們常說的「證書」望艺,用于確認開發(fā)者的身份苛秕〖》茫回答問題:Can I trust you找默?
常用的是兩種類型:
- Development:你用Xcode跑App到真機,用的就是這個「開發(fā)證書」吼驶。因為開發(fā)者很多惩激,所以可以有很多的「Development Certificate」
- Distribution:打包上傳到App Store,用的就是這個「打包證書」蟹演。有一定權(quán)限才能生成风钻、使用這個證書,所以不是每個開發(fā)者都能打包App酒请。
證書有1年的有效期骡技,過期了,「Provisioning Profile」也就用不了了。
Provisioning Profile
「 Provisioning Profile」將上述的3樣?xùn)|西布朦,整合在一起囤萤,讓你可以打包你的App。
注意是趴,如果是用Ad Hoc這種發(fā)布方式涛舍,Provisioning Profile里面還會包含一個額外的Device List——哪些設(shè)備能安裝這個App。
Ad Hoc是Apple提供的一種內(nèi)部分發(fā)方式唆途,主要是方便小規(guī)模的(內(nèi)部)測試富雅。
除了發(fā)布到App Store,蘋果還提供了以下5種非公開的「內(nèi)部」分發(fā)方式:
- Personal Team distribution:就是你自己用Xcode安裝App到真機
- Ad hoc distribution:只能裝100臺機器肛搬,而且「Provisioning Profile」要包含一個能安裝App的設(shè)備列表——換言之没佑,你需要在打包前取得所有安裝手機的UDID。
- TestFlight:內(nèi)部100滚婉,外部1萬——更強大的分發(fā)图筹、測試App的方式
- In-house distribution:大企業(yè)的內(nèi)部分發(fā)
- Custom App Distribution:后出的非公開分發(fā)方式,和TestFlight让腹,App Store Connect整合远剩,推薦大企業(yè)使用。
(簽名)打包
下面演示兩種分發(fā)方式:「App Store發(fā)布」和「Ad Hoc發(fā)布」
App Store發(fā)布
一些額外的術(shù)語
- CSR(Certificate Signing Request):
- 用Mac的Keychain Access這個軟件骇窍,生成的「
.certSigningRequest
」文件 - 里面包含了「公鑰」瓜晤、「私鑰」、「證書/Certificate」
- 上傳到蘋果開發(fā)者網(wǎng)站腹纳,讓蘋果「簽名」痢掠,就會得到一個
.cert
文件。這樣就能確認你的身份了(下載后雙擊安裝)
- 用Mac的Keychain Access這個軟件骇窍,生成的「
黑框部分嘲恍,是「發(fā)布證書」的生成足画,解決的是上述的「Can I trust you」這個問題。
黃框部分的Entitlement佃牛,解決的是上述「What do you want to do」這個問題淹辞。
紅框部分,就是將「發(fā)布證書」俘侠、「App ID」(提前創(chuàng)建好的)象缀、「Entitlement」這3個東西整合在一起,生成「App Store」類型的「Provisioning Profile」
藍框部分:打包爷速、上傳了——利用Xcode得Archive & Upload
Ad Hoc發(fā)布
粉色框部分:因為Ad Hoc只能分發(fā)到特定手機央星,所以要到開發(fā)者網(wǎng)站,注冊要安裝App的手機(需要拿到手機的UDID)
黑框部分惫东,是「發(fā)布證書」莉给,因為上面「App Store發(fā)布」的時候,已經(jīng)創(chuàng)建過「發(fā)布證書」了,這里可以用同樣的「發(fā)布證書」颓遏,無需再重復(fù)創(chuàng)建胁黑。
紅框部分,就是將「發(fā)布證書」州泊、「App ID」(提前創(chuàng)建好的)丧蘸、「Entitlement」、「Device List」這4個東西整合在一起遥皂,生成「Ad Hoc」類型的「Provisioning Profile」(和「App Store」類型會有些許差異)
藍框部分:打包力喷、導(dǎo)出ipa文件——利用Xcode得Archive & Upload。然后ipa文件演训,可以手動安裝到手機弟孟,也可以上傳到第三方平臺(DeployGate, 蒲公英 etc),進行「無線安裝」样悟》髂迹或者自建服務(wù)器也可以。
畢窟她。
下回預(yù)告:《Build Settings的那些破事兒》