天天看點

了解 iOS 應用程式的代碼簽名機制

<b>本文講的是了解 iOS 應用程式的代碼簽名機制,</b>

<b></b>

如果你是一位 <code>iOS</code> 應用程式開發者,你有可能已經使用過代碼簽名了。如果你是一位初級的 <code>iOS</code> 應用程式開發者,你可能對開發者網站上那些有關 "Certificates,Identifiers &amp; Profiles" 的部分感到不知所措。

了解 iOS 應用程式的代碼簽名機制

本文的目的是幫助初級 <code>iOS</code> 應用程式開發者從宏觀角度了解代碼簽名是什麼。這不是一個如何按部就班地對你的應用程式進行代碼簽名的操作手冊。理想化來說,在你閱讀完這篇文章後,你能夠對應用程式進行代碼簽名而不需要按照任何操作手冊。

我不準備對底層細節進行讨論,但是我們将讨論一些非對稱加密技術的内容。

你至少要知道的是,非對稱加密技術使用一個公鑰和一個私鑰。使用者需要保留自己的私鑰,但是他們能把公鑰分享出去。并且使用這些公鑰和私鑰,使用者就能證明那确實就是他自己。

<code>App ID</code> 是你應用程式的唯一識别符。它由蘋果為你建立的 <code>team id (團隊 id)</code>(你無法插手) 和你應用程式的 <code>bundle id (程式包 id)</code> (比如,<code>com.youcompany.yourapp</code>)組成。

也有通配符形式的 <code>App ID</code>: <code>com.yourcompany.*</code>。它們會比對多個 <code>bundle id</code>。

總而言之,你的應用程式會有一個明确的 <code>App ID</code>,而不是一個通配符形式的。

你可能已經注意到,為了在蘋果開發者網站上建立一個證書 / certificate,你需要上傳一個簽名證書申請 (Certificate Signing Request)。你能通過 <code>Keychain</code> 建立這個 <code>CSR</code> 檔案,并且這個 <code>CSR</code> 檔案包含一個私鑰。

之後在開發者網站上,你能使用這個 <code>CSR</code> 檔案建立一個證書 (certificate)。

證書 (certificates) 的類型有很多種。最常見的是:

應用程式開發證書 (<code>iOS</code> 應用程式開發) - 你需要使用這些證書才能讓 <code>XCode</code> 中的應用程式運作在裝置上。

應用程式分發證書 (蘋果應用市場和内部分發管道) - 你需要使用這些證書,它能讓你把應用程式送出到蘋果應用市場或者内部分發管道。

<code>APNS</code> (Apple Push Notification Service / 蘋果推送通知服務系統) - 你需要使用這些證書,它能讓你推送内容到你的應用程式中。與應用程式的開發證書和分發證書不同,<code>APNS</code> 與 <code>APP ID</code> 有關。<code>APNS</code> 有兩種證書,對于開發環境來說 - Apple Push Notification Service / 蘋果推送通知服務 SSL (适用于沙盒環境),對生産環境來說 - Apple Push Notification Service / 蘋果推送通知服務 <code>SSL</code> (适用于沙盒和生産環境)。如果你想讓推送服務在調試和分發程式上都能使用,你需要建立這兩個證書。

配置檔案将 <code>App ID</code>,開發者或者内部分發證書和一些裝置聯系起來。你在蘋果開發者網站上建立這些配置檔案,然後在<code>Xcode</code> 内下載下傳它們。

在你建立了這些以後,回到 <code>Xcode</code> 頁面,添加你的證書,更新你的配置檔案,之後選擇你想要的那個配置檔案。從這些配置檔案中,你能選擇需要的簽名身份(這取決于聯系到它的證書)。

多年來在 <code>iOS</code> 開發的過程中,我問過也被很多人問過有關代碼簽名的問題。比如下面的這些。

問題: 我已經從開發者網站上下載下傳了配置檔案和證書,但是我還是不能對應用程式簽名。

解答: 是的,因為你沒有私鑰,就是那個在證書簽名申請中使用的那個。可能是之前其他團隊的成員建立了這些證書和配置檔案。你能從原來的開發者那裡獲得這些私鑰,重新激活這個證書并且建立一個新的 (和這個證書有聯系的所有配置檔案都會失效,但是不會對任何應用市場上使用這些證書的應用程式造成問題) 或者如果可能的話,建立一個全新的證書。(目前,每一個開發者賬戶最多申請 3 個應用程式分發證書。)

問題: 那有關推送服務的證書呢?我想讓應用程式能接收推送通知。難道我不應該使用 <code>APNS</code> 證書建立一個配置檔案麼?

解答: 不是這樣的。當你建立一個 <code>APNS</code> (Apple Push Notification Service / 蘋果推送通知服務) 證書的時候,你把 <code>APP ID</code>聯系到這個證書上。是以,首先要有 <code>CSR</code> 檔案,之後通過這個 <code>CSR</code> 檔案建立一個新的 <code>APNS</code>,下載下傳後在 <code>Keychain</code> 中打開它,并以 <code>.p12</code> 檔案格式導出,之後把這個檔案上傳到你的推送服務提供商處。這個 <code>.p12</code> 檔案知道它是和那個應用程式聯系的,并且它會隻推送内容到這個應用程式。這也是為什麼你不能把一個 <code>APNS</code> 證書聯系到通配符形式的 <code>APP ID</code>(com.youcompany.*)。推送通知的伺服器需要知道,它需要推送内容到哪個應用程式。

問題: 我買了一個新的 <code>mac</code> 計算機,為了代碼簽名能正常工作,我應該從舊的 <code>mac</code> 計算機上 <code>keychain</code> 中導出什麼到新的 <code>mac</code> 計算機中?

問題: 我的 <code>iOS</code> 應用程式分發證書過期了,我的應用程式還能繼續工作麼?

解答: 當你的證書過期了,使用這個證書的配置檔案就會失效了。在應用程式市場(<code>App Store</code>)上,隻要你的開發者賬号還有效,這個應用程式還是能正常使用的。但是通過這個證書在内部管道分發的應用程式就不能繼續使用了。

問題: 我的 <code>APNS</code> 證書過期了,現在會發生什麼?

解答: 你不能再發送推送通知給應用程式。通過建立一個與 <code>App ID</code> 聯系的 新的 <code>APNS</code> 證書,下載下傳并導出這個 <code>.p12</code> 檔案,之後把它上上傳給你的推送通知服務提供商。并且不需要為此而更新應用程式。

我想再次強調有關代碼簽名的是:

每一個應用程式都有一個 <code>App ID</code>

對所有使用中的證書,你都必須存有相關的私鑰

一個調試版本的配置檔案把 <code>APP ID</code>,調試裝置和應用程式開發證書聯系在一起。

一個内部分發管道的配置檔案把 <code>App ID</code>,調試裝置和應用程式分發證書聯系在一起。

一個應用程式市場 (<code>App Store</code>)的配置檔案把 <code>App ID</code> 和你的應用程式分發證書聯系在一起。

對于推送通知,建立一個 APNS 證書,它和 <code>App ID</code> 聯系在一起,下載下傳并以 <code>.p12</code> 檔案格式導出,并上傳這個檔案到推送通知服務供應商處;如果你想要這個推送通知在調試和生産環境下都起作用,你不得不分别為開發調試和生産環境建立 2 個 <code>APNS</code> 證書。

通曉這些能幫助你更好的了解代碼簽名機制,并且最終省去了很多時間。

了解 iOS 應用程式的代碼簽名機制

<b>原文釋出時間為:2016年11月17日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>

繼續閱讀