描述文件
前面的文章我們已經(jīng)介紹了簡單的應用簽名但是這種簽名方式并不能解決應用濫用的問題,所以蘋果又加了兩個限制.第一限制在蘋果后臺注冊過的設備才可以安裝.第二限制簽名只能針對某一個具體的APP.并且蘋果還想控制App里面的iCloud/PUSH/后臺運行/調(diào)試器附加這些權限,所以蘋果把這些權限開關統(tǒng)一稱為Entitlements(授權文件).并將這個文件放在了一個叫做Provisioning Profile(描述文件)文件中.描述文件是在AppleDevelop網(wǎng)站創(chuàng)建的(在Xcode中填上AppleID它會代辦創(chuàng)建),Xcode運行時會打包進入APP內(nèi).
所以我們使用CSR申請證書時,我們還要申請一個東西!! 就是描述文件!!流程如下
這個描述文件里面就是 可以安裝的設備有哪些.. APP的ID是什么.. 權限是些什么!
在開發(fā)時,編譯完一個 APP 后,用本地的私鑰M對這個APP進行簽名,同時把從蘋果服務器得到的 Provisioning Profile 文件打包進APP里,文件名為embedded.mobileprovision,把 APP 安裝到手機上.
我們可以利用
$security cms -D -i embedded.mobileprovision
命令查看Provisioning profile內(nèi)容,這些Xcode創(chuàng)建的Profile文件都存放在~/Library/MobileDevice/Provisioning Profiles/目錄下注意! 每次我們新建項目其實會生成一個描述文件!選擇運行到手機上!! 我們只需要編譯一下!在APP包里面就可以看到.
那么為了便于我們查看信息! 我們可以通過Xcode來查看!!
當然,Provisioning profile本身也是通過簽名認證的,所以別想著你可以更改里面的東西來達到擴充權限\設備的目的.只有老老實實的去網(wǎng)站向Apple申請一份權限更多\設備更多的profile孙蒙。
整體的流程
首先我們總結一下剛才的一些名詞
-
證書:內(nèi)容是公鑰或者私鑰,由認證機構對其簽名組成的數(shù)據(jù)包!我們開發(fā)可以使用鑰匙串訪問看到
image.png - P12:就是本地私鑰,可以導入到其他電腦
- Entitlements:權限文件,包含了APP一些權限的plist文件
- CertificateSigningRequest:CSR文件包含了本地公鑰的數(shù)據(jù)文件
- Provisioning Profile:描述文件,包含了證書/Entitlements等數(shù)據(jù),并由蘋果后臺私鑰簽名的數(shù)據(jù)包.
流程如下:
- 第 1 步對應的是 keychain 里的 “從證書頒發(fā)機構請求證書”,這里就本地生成了一對公私鑰,保存的 CertificateSigningRequest 里面就包含公鑰,私鑰保存在本地電腦里.
- 第 2 步向蘋果申請對應把 CSR 傳到蘋果后臺生成證書.
-
第 3 步證書下載到本地.這時本地有兩個證書.一個是第 1 步生成的私鑰,一個是這里下載回來的證書,keychain 會把這兩個證書關聯(lián)起來,因為他們公私鑰是對應的,在XCode選擇下載回來的證書時,實際上會找到 keychain 里對應的私鑰去簽名.這里私鑰只有生成它的這臺 Mac 有,如果別的 Mac 也要編譯簽名這個 App 怎么辦?答案是把私鑰導出給其他 Mac 用,在 keychain 里導出私鑰,就會存成 .p12 文件,其他 Mac 打開后就導入了這個私鑰.
image.png - 第 4 步都是在蘋果網(wǎng)站上操作泵喘,配置 AppID / 權限 / 設備等,最后下載 Provisioning Profile 文件弊知。
- 第 5 步 XCode 會通過第 3 步下載回來的證書(存著公鑰),在本地找到對應的私鑰(第一步生成的)粱快,用本地私鑰去簽名 App秩彤,并把 Provisioning Profile 文件命名為 embedded.mobileprovision 一起打包進去叔扼。所以任何本地調(diào)試的APP,都會有一個embedded.mobileprovision(描述文件)從App Store下載的沒有.
APP簽名的數(shù)據(jù)
這里對 App 的簽名數(shù)據(jù)保存分兩部分
-
1.Mach-O 可執(zhí)行文件會把簽名直接寫入文件里
MachOView查看 -
2.其他資源文件則會保存在 _CodeSignature 目錄下在APP包里。
image.png
至此關于iOS應用簽名的原理就介紹完了.下篇文章將介紹iOS應用重簽名技術.
由于知識水平有限如有錯誤及不足,歡迎大家留言區(qū)評論指正.