關於 iOS 證書,你必須瞭解的知識

来源:http://www.cnblogs.com/liuliliuli2017/archive/2017/04/28/6782680.html
-Advertisement-
Play Games

收錄待用,修改轉載已取得 "騰訊雲" 授權 最新騰訊雲技術公開課直播,提問騰訊W3C代表,如何從小白成為技術專家? "點擊瞭解活動詳情" 。 作者 |陳澤濱 編輯 | 顧鄉 從事 "iOS" 開發幾年,越來越發現,我們的開發者往往聚焦在程式的開發,如何實現一個功能,如何寫好一行代碼。但對iOS應用開 ...


收錄待用,修改轉載已取得騰訊雲授權


最新騰訊雲技術公開課直播,提問騰訊W3C代表,如何從小白成為技術專家?點擊瞭解活動詳情

作者 |陳澤濱
編輯 | 顧鄉

從事iOS開發幾年,越來越發現,我們的開發者往往聚焦在程式的開發,如何實現一個功能,如何寫好一行代碼。但對iOS應用開發到發佈過程中必不可少的一環,證書簽名相關部分,卻只是一知半解。真正過程中遇到問題:如真機調試、團隊開發證書環境同步,產品發佈上架,才胡亂折騰一通,最終解決問題的時候其實對證書的構成與機理還是一無所知,不知所以然。

本文從iOS證書體系的基本構成模塊 (Certificates, Identifiers, Device, ProvisioningProfile) 入手,一步步解釋各模塊的內容與註意項;同時文末簡單補充了iOS證書日常管理經驗項。力求為大家答疑解惑,補上iOS應用開發中不可或缺卻往往被人忽視的一個知識面。

1. 證書(Certificates)

代碼簽名可以讓系統確保你的應用來源,並確保你的應用不被修改(執行代碼修改後,原簽名將失效)。

首先你要有一個證書,通過Keychain的證書助理生成Certificates Signing Request文件後,即可進一步得到最後的證書。完整的iOS證書包含公鑰與私鑰,也就是所謂的非對稱加密方式。在這裡,公鑰用於驗證,私鑰用於簽名。與此同時,僅包含公鑰的證書文件(.cer)將會被放置在開發帳號下提供到開發團隊人員下載共用使用。然而,我們知道僅包含公鑰的證書是不具備簽名能力,而私鑰又保存在生成證書的機器Keychain內,所以當其他開發人員需要使用這份證書時候,我們需要將完整的公鑰私鑰導出生成個人信息交換文件(.p12),這樣的證書環境才是完整可用的。

特別值得一提的是,我們日常遇到的revoke證書,也就是因為開發人員當下的開發環境沒有包含可用的私鑰,revoke相當於重新申請證書,暴力操作過後其他開發人員的舊證書(包含私鑰)將不可用,需要revoke的開發人員將最新的證書信息同步出來。

證書分為開發(Developerment)與發佈(Distribution)兩類,各自用途顧名思義,這裡不再累述。

2. Identifiers

註冊一個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等等),生成同時按照實際需要對應配置即可。

3. 設備(Device)

這裡的設備就是指的可調試的iOS設備,可以是iPhone、iPad、iPod、Apple Watch甚至是Apple TV。新增一個設備到帳號下可以進行設備調試,僅需要提供對應名稱與UDID,但是,一個蘿蔔一個坑,一個帳號最多僅支持加入100個設備,即便你後續刪除設備,用掉的名額也不會立刻恢復,直到來年開發者帳號的membership year開始時,才能選擇刪掉一些設備來恢複名額,或清空所有設備恢復到最多100個名額。

4. 描述配置文件(Provisioning Profile)

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配置信息。

5. iOS證書管理

開發團隊的人員越多,合理的證書管理愈顯重要。流程上,為保證日常開發應用程式的安全與效率,無論是大到公司的發佈證書抑或是小到項目組的團隊個人開發證書,我們都儘量做到:

1、帳號密碼統一由一個關鍵介面人維護(證書管理員);

2、開發人員統一到證書管理員領取.p12文件與Provision Profile文件進行應用開發或發佈;

3、新增設備,提供設備名與UDID到證書管理員添加。證書管理員更新後,周知並同步新的ProvisioningProfile到團隊開發人員。

補充提醒:

1、.p12文件與Provisioning Profile文件同步到svn,可高效並及時同步整個團隊;

2、嚴格控制iOS調試設備的加入,確保隨時有可用名額。


原文鏈接:https://www.qcloud.com/community/article/628343


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、Box Model(盒模型) CSS中的Box Model分為兩種:第一種是W3C的標準模型,另一種是IE的傳統模型。它們的相同之處是對元素的width、height、padding、border、margin以及元素實際尺寸的計算關係,而它們的不同之處則是兩者的計算方法不一致。 1)、W3C的 ...
  • <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <style> #div2 { width: 150px; height: 150px; position: absolute; background: #CCCC ...
  • 今天想在新項目中使用es6的generators,發現雖然gulp已經有了babel編譯,但仍會報錯,網上查找後發現解決辦法是載入polyfill,但是找到的辦法都不試用我的項目。 解決辦法:在index.html中載入node_modules的babel-polyfill,這樣就能在gulp打包編 ...
  • currentColor顧名思意就是“當前顏色”,準確講應該是“當前的文字顏色”,例如: currentColor表示“當前的標簽所繼承的文字顏色”,換種方式表示就是:currentColor = color的值。 凡事需要使用顏色值的地方,都可以使用currentColor替換,比方說背景色 – ...
  • gulp-jslint jslint是一個javascript代碼質量檢測工具。 使用教程: 1.先安裝全局npm install gulp-jslint -g 2.再安裝到你的項目里,使用命令 npm install gulp-jslint --save-dev 3.配置glupfile.js 4 ...
  • 由於angularJS的路由機制,切換頁面並不像傳統html那樣直接設置a標簽中的href屬性,進行頁面的跳轉,而實際上angularJS是單頁面應用,視圖之間的切換實際上是在切換模板文件,順便說下,好處是,頁面改變時不需要刷新,而每個頁面都展現不同的數據。尤其在使用模板頁的時候,非常方便。 ...
  • var minSize=50;var maxSize=100;var newOn=200;var flakeColor="#fff";var flak=$("<div></div>").css({"position":"absolute","top":"-50px"}).html("<img src ...
  • https方式每次都要輸入密碼,按照如下設置即可輸入一次就不用再手輸入密碼的困擾而且又享受https帶來的極速 設置記住密碼(預設15分鐘): 如果想自己設置時間,可以這樣做: 這樣就設置一個小時之後失效 長期存儲密碼: 增加遠程地址的時候帶上密碼也是可以的。(推薦) 補充:使用客戶端也可以存儲密碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...