[譯] 理解 iOS 應用程序的代碼簽名 (CODE SIGN) 機制
理解 iOS 應用程序的代碼簽名機制
如果你是一位 iOS 應用程序開發者,你有可能已經使用過代碼簽名了。如果你是一位初級的 iOS 應用程序開發者,你可能對開發者網站上那些有關 "Certificates,Identifiers & Profiles" 的部分感到不知所措。
本文的目的是幫助初級 iOS 應用程序開發者從宏觀角度理解代碼簽名是什么。這不是一個如何按部就班地對你的應用程序進行代碼簽名的操作手冊。理想化來說,在你閱讀完這篇文章后,你能夠對應用程序進行代碼簽名而不需要按照任何操作手冊。
我不準備對底層細節進行討論,但是我們將討論一些非對稱加密技術的內容。
非對稱加密技術
你至少要知道的是,非對稱加密技術使用一個 公鑰 和一個 私鑰 。用戶需要保留自己的私鑰,但是他們能把公鑰分享出去。并且使用這些公鑰和私鑰,用戶就能證明那確實就是他自己。
這里 有一篇淺顯易懂地解釋什么是非對稱加密技術的文章。如果你想知道實現這個技術的細節或者背后用到了哪些數學算法原理,在網絡上有很多這樣的文章。
App ID
App ID 是你應用程序的唯一識別符。它由蘋果為你創建的 team id (團隊 id) (你無法插手) 和你應用程序的 bundle id (程序包 id) (比如, com.youcompany.yourapp )組成。
也有通配符形式的 App ID : com.yourcompany.* 。它們會匹配多個 bundle id 。
總而言之,你的應用程序會有一個明確的 App ID ,而不是一個通配符形式的。
Certificates / 證書
你可能已經注意到,為了在蘋果開發者網站上創建一個證書 / certificate,你需要上傳一個簽名證書申請 (Certificate Signing Request)。你能通過 Keychain 創建這個 CSR 文件,并且這個 CSR 文件包含一個私鑰。
之后在開發者網站上,你能使用這個 CSR 文件創建一個證書 (certificate)。
證書 (certificates) 的類型有很多種。最常見的是:
- 應用程序開發證書 ( iOS 應用程序開發) - 你需要使用這些證書才能讓 XCode 中的應用程序運行在設備上。
- 應用程序分發證書 (蘋果應用市場和內部分發渠道) - 你需要使用這些證書,它能讓你把應用程序提交到蘋果應用市場或者內部分發渠道。
- APNS (Apple Push Notification Service / 蘋果推送通知服務系統) - 你需要使用這些證書,它能讓你推送內容到你的應用程序中。與應用程序的開發證書和分發證書不同, APNS 與 APP ID 有關。 APNS 有兩種證書,對于開發環境來說 - Apple Push Notification Service / 蘋果推送通知服務 SSL (適用于沙盒環境),對生產環境來說 - Apple Push Notification Service / 蘋果推送通知服務 SSL (適用于沙盒和生產環境)。如果你想讓推送服務在調試和分發程序上都能使用,你需要創建這兩個證書。
Devices / 設備
在你賬戶每年的會員期內,你能為每個產品添加最多 100 個設備。100 個 iPhone, 100 個 iPad, 100 個 iPod Touch, 100 個 Apple Watche 和 100 個 Apple TV。為了把設備添加到你的賬戶下,你需要添加該設備的唯一識別碼。你能在 Xcode 中方便地找到它,或在 iTunes 中(可能會稍微麻煩點兒)。 這里 有一份詳細的指導手冊教你如何添加設備到你的賬戶下。
Provisioning profiles / 配置文件
配置文件將 App ID ,開發者或者內部分發證書和一些設備聯系起來。你在蘋果開發者網站上創建這些配置文件,然后在 Xcode 內下載它們。
使用方法
在你創建了這些以后,回到 Xcode 頁面,添加你的證書,更新你的配置文件,之后選擇你想要的那個配置文件。從這些配置文件中,你能選擇需要的簽名身份(這取決于聯系到它的證書)。
常見問題解答
多年來在 iOS 開發的過程中,我問過也被很多人問過有關代碼簽名的問題。比如下面的這些。
-
問題: 我已經從開發者網站上下載了配置文件和證書,但是我還是不能對應用程序簽名。
解答: 是的,因為你沒有私鑰,就是那個在證書簽名申請中使用的那個。可能是之前其他團隊的成員創建了這些證書和配置文件。你能從原來的開發者那里獲得這些私鑰,重新激活這個證書并且創建一個新的 (和這個證書有聯系的所有配置文件都會失效,但是不會對任何應用市場上使用這些證書的應用程序造成問題) 或者如果可能的話,創建一個全新的證書。(目前,每一個開發者賬戶最多申請 3 個應用程序分發證書。)
-
問題: 那有關推送服務的證書呢?我想讓應用程序能接收推送通知。難道我不應該使用 APNS 證書創建一個配置文件么?
解答: 不是這樣的。當你創建一個 APNS (Apple Push Notification Service / 蘋果推送通知服務) 證書的時候,你把 APP ID 聯系到這個證書上。所以,首先要有 CSR 文件,之后通過這個 CSR 文件創建一個新的 APNS ,下載后在 Keychain 中打開它,并以 .p12 文件格式導出,之后把這個文件上傳到你的推送服務提供商處。這個 .p12 文件知道它是和那個應用程序聯系的,并且它會只推送內容到這個應用程序。這也是為什么你不能把一個 APNS 證書聯系到通配符形式的 APP ID (com.youcompany.*)。推送通知的服務器需要知道,它需要推送內容到哪個應用程序。
-
問題: 我買了一個新的 mac 計算機,為了代碼簽名能正常工作,我應該從舊的 mac 計算機上 keychain 中導出什么到新的 mac 計算機中?
解答: 你可能想把所有 keychain 中的內容導出到新的 mac 計算機中。你可以通過 這些步驟 完成。但是如果你想導出一個證書,確保你也能導出這個私鑰。在 Keychain 中,你應該可以通過點擊證書旁邊的三角選項展開它的內容,之后你就會看到這個私鑰。這些證書都能以 .p12 文件格式導出。否則,他們會以 .cer 格式導出,沒有私鑰,這個文件是沒用的。
-
問題: 我的 iOS 應用程序分發證書過期了,我的應用程序還能繼續工作么?
解答: 當你的證書過期了,使用這個證書的配置文件就會失效了。在應用程序市場( App Store )上,只要你的開發者賬號還有效,這個應用程序還是能正常使用的。但是通過這個證書在內部渠道分發的應用程序就不能繼續使用了。
-
問題: 我的 APNS 證書過期了,現在會發生什么?
解答: 你不能再發送推送通知給應用程序。通過創建一個與 App ID 聯系的 新的 APNS 證書,下載并導出這個 .p12 文件,之后把它上上傳給你的推送通知服務提供商。并且不需要為此而更新應用程序。
總結
我想再次強調有關代碼簽名的是:
- 每一個應用程序都有一個 App ID
- 對所有使用中的證書,你都必須存有相關的 私鑰
- 一個 調試版本的配置文件 把 APP ID ,調試設備和應用程序開發證書聯系在一起。
- 一個 內部分發渠道的配置文件 把 App ID ,調試設備和應用程序分發證書聯系在一起。
- 一個 應用程序市場 ( App Store )的配置文件 把 App ID 和你的應用程序分發證書聯系在一起。
- 對于推送通知,創建一個 APNS 證書 ,它和 App ID 聯系在一起,下載并以 .p12 文件格式導出,并上傳這個文件到推送通知服務供應商處;如果你想要這個推送通知在調試和生產環境下都起作用,你不得不分別為開發調試和生產環境創建 2 個 APNS 證書。
通曉這些能幫助你更好的理解代碼簽名機制,并且最終省去了很多時間。
來自:http://www.jianshu.com/p/1383f42b92b8