從事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調試裝置的加入,確定随時有可用名額。
相關推薦
經驗之道:最有效的iOS記憶體洩漏檢測
iOS 啟動連續閃退保護方案
iOS高性能圖檔架構與設計