收錄待用,修改轉載已取得騰訊雲授權
最新騰訊雲技術公開課直播,提問騰訊W3C代表,如何從小白成為技術專家?點擊了解活動詳情。
作者 |陳澤濱
編輯 | 顧鄉
從事iOS開發幾年,越來越發現,我們的開發者往往聚焦在程序的開發,如何實現一個功能,如何寫好一行代碼。但對iOS應用開發到發布過程中必不可少的一環,證書簽名相關部分,卻只是一知半解。真正過程中遇到問題:如真機調試、團隊開發證書環境同步,產品發布上架,才胡亂折騰一通,最終解決問題的時候其實對證書的構成與機理還是一無所知,不知所以然。
本文從iOS證書體系的基本構成模塊 (Certificates, Identifiers, Device, ProvisioningProfile) 入手,一步步解釋各模塊的內容與注意項;同時文末簡單補充了iOS證書日常管理經驗項。力求為大家答疑解惑,補上iOS應用開發中不可或缺卻往往被人忽視的一個知識面。
代碼簽名可以讓系統確保你的應用來源,並確保你的應用不被修改(執行代碼修改後,原簽名將失效)。
首先你要有一個證書,通過Keychain的證書助理生成Certificates Signing Request文件後,即可進一步得到最後的證書。完整的iOS證書包含公鑰與私鑰,也就是所謂的非對稱加密方式。在這裡,公鑰用於驗證,私鑰用於簽名。與此同時,僅包含公鑰的證書文件(.cer)將會被放置在開發帳號下提供到開發團隊人員下載共享使用。然而,我們知道僅包含公鑰的證書是不具備簽名能力,而私鑰又保存在生成證書的機器Keychain內,所以當其他開發人員需要使用這份證書時候,我們需要將完整的公鑰私鑰導出生成個人信息交換文件(.p12),這樣的證書環境才是完整可用的。
特別值得一提的是,我們日常遇到的revoke證書,也就是因為開發人員當下的開發環境沒有包含可用的私鑰,revoke相當於重新申請證書,暴力操作過後其他開發人員的舊證書(包含私鑰)將不可用,需要revoke的開發人員將最新的證書信息同步出來。
證書分為開發(Developerment)與發布(Distribution)兩類,各自用途顧名思義,這裡不再累述。
注冊一個AppID用於唯一標識一個App或一組App,這裡的應用程序AppID和BundleID是相對應的。為了確保AppID的唯一性,它的命名必須嚴格按照規范:
1、App(主程序、插件)BundleID:
com.company.appname
com.company.appname.extensionname
2、AppGroupsID:
group.com.company.appname
3、Pass TypeID:
pass.com.company.appname
4、Website PushID:
web.com.company.appname
5、iCloud Containers ID:
cloud.com.company.appname
6、Merchant ID:
merchant.com.company.merchantname
每個AppID可以設置對應的服務開關(如APNs、Game Center、iCloud等等),生成同時按照實際需要對應配置即可。
這裡的設備就是指的可調試的iOS設備,可以是iPhone、iPad、iPod、Apple Watch甚至是Apple TV。新增一個設備到帳號下可以進行設備調試,僅需要提供對應名稱與UDID,但是,一個蘿卜一個坑,一個帳號最多僅支持加入100個設備,即便你後續刪除設備,用掉的名額也不會立刻恢復,直到來年開發者帳號的membership year開始時,才能選擇刪掉一些設備來恢復名額,或清空所有設備恢復到最多100個名額。
Provisioning Profile文件將上文提及的相關信息(Certificates、Identifiers、Device)都打包在內。Provision Profile本質上是一個plist文件,以development為例,它一般包含但並不只以下內容:
1、AppIDName
2、ApplicationIdentifierPrefix
3、CreationDate
4、DeveloperCertificates
5、Entitlements
6、ExpirationDate
7、ProvisionedDevice
8、UUID
系統根據配置文件提供的信息進行一一校驗,從AppID到Entitenments,從數字證書到設備UDID等,最後運行應用程序到設備。如下所示:
此外,DistributionProvisioningProfile與Development Provisioning Profile類似,它沒有Device配置信息。
開發團隊的人員越多,合理的證書管理愈顯重要。流程上,為保證日常開發應用程序的安全與效率,無論是大到公司的發布證書抑或是小到項目組的團隊個人開發證書,我們都盡量做到:
1、帳號密碼統一由一個關鍵接口人維護(證書管理員);
2、開發人員統一到證書管理員領取.p12文件與Provision Profile文件進行應用開發或發布;
3、新增設備,提供設備名與UDID到證書管理員添加。證書管理員更新後,周知並同步新的ProvisioningProfile到團隊開發人員。
補充提醒:
1、.p12文件與Provisioning Profile文件同步到svn,可高效並及時同步整個團隊;
2、嚴格控制iOS調試設備的加入,確保隨時有可用名額。
原文鏈接:https://www.qcloud.com/community/article/628343