2013-04-14 73 views
51

什麼是XCode中的「代碼簽名身份」?什麼是代碼簽名身份?

他們是證書嗎?

他們是私鑰嗎?

他們是應用ID嗎?

它們是配置文件嗎?

如果我轉到目標構建設置,它會詢問代碼簽名身份,所以我需要弄清楚這一點。

我以爲我們使用我們的私鑰簽署了代碼。但是,我的私鑰名稱沒有出現。它顯示了證書列表(我認爲,儘管我甚至不確定)

回答

121

您已經確定遇到了非常迅速變得非常深的主題,並且在嘗試進行設備構建時很常見iOS應用程序。首先,讓我把一點點的結構圍繞每個參與代碼簽名過程的條款(包括你和任何人碰到這個問題以後絆),然後我們就可以把你的主要問題:

協同設計術語

iOS設備構建的代碼簽名階段是我們對應用程序中的數據進行加密簽名和安全保護的過程,包括應用程序可執行二進制文件本身,任何嵌入式媒體資產(如按鈕紋理,自定義插圖,字體等)以及一組關於我們的應用程序的元數據,並代表我們應用程序數據的獨特「指紋」。此指紋是Apple和iOS用來確保我們的應用程序在交付給用戶設備或在用戶的iOS設備上運行時不會被篡改的指紋。爲此,開發人員需要向Apple註冊,設置應用標識符,請求開發和分發證書,註冊一組測試設備,並最終請求供應配置文件進行開發。這些元件的作用每如下:

  • 應用標識符(或的AppID) - 反向DNS風格串唯一標識在AppStore上正好一個iPhone應用程序。
  • 開發和分發證書 - 這些是由Apple加密簽署的數字文檔,用於證明文檔所發出的個人的身份。對於那些熟悉公鑰基礎設施的人員來說,證書本身包含一個公鑰,可以用來在後續過程中驗證簽名的完整性。
  • 測試設備 - 唯一批准的iOS軟件標準分銷渠道是通過AppStore。通過註冊測試設備,開發人員可以規避AppStore並將軟件直接安裝到設備上進行開發和測試。在給定的會員年度允許的測試設備總數爲100個測試設備。
  • 供應配置文件 - 包含三個主要組件的文檔:1)恰好一個應用程序ID,2)一個或多個iOS開發人員證書,以及3)可以直接安裝指定iOS應用程序的零個或更多註冊測試設備。本文檔的內容由Apple加密簽署,以確保其內容不會被篡改。

這是存在此文件和指紋檢查,確定是否可以安裝到設備的開發人員生成的應用程序,因爲它包含「誰」(證書),'什麼'(AppID )和'Where'(哪些設備)。

太好了,我知道了...現在你看這個代碼簽名身份的事情嗎?

在一個個人的構建目標的構建設置的上下文中,術語代碼簽名身份指的是通用名是安裝在開發機器的鑰匙扣這些證書的。在Xcode構建設置顯示爲一個選項列表,從中開發者必須選擇一個標識用於協同設計 - 有很多在這個菜單中的每個部分編碼信息

Xcode Code Sign Identity

展望首先在黑色文本 - 從上面的圖片'iPhone Developer:Bryan Musial(XXXXXXXXXX)' - 這實際上是Xcode用來查找用於Code Sign的公鑰和私鑰的主要項目。當選擇這個項目,你指示的Xcode伸進你的鑰匙鏈,並試圖找到一個證明誰是「通用名稱」字段的字符串相匹配,然後抓住該證書(其中包含公開密鑰),並在使用相應的私鑰代碼簽名操作。

如果你打開鑰匙串訪問,並雙擊任何的只是要徹底的「iPhone開發:...」或「iPhone分佈:...」證書表明所有的編碼到證書蘋果問題的信息它的開發者。如果我選擇的第一個圖像中的條目時,Xcode會深入到我的鑰匙扣和拉回該證書(注:獨特的識別細節已經X'd或改變):

Keychain Certificate Common Name Example

,你可以請參閱Xcode選擇中的黑色文本與我的證書中的公用名字段完全匹配,因此Xcode將撤回此證書及其鏈接的私鑰,以用於代碼簽名我的應用。

回首Xcode的重新設定,我們也注意到,有在菜單選擇更多的文本,以及 - 淺灰色文本標識將被內置到應用程序的供應配置文件。在我的示例設置的情況下,Xcode將去並獲得其AppID設置爲'com.myiosapp。*'的配置文件「MyiOSApp測試」。 Xcode對存儲配置文件非常貪婪,幸運的是,Organizer爲您提供了一個很好的地方來查看已安裝的配置文件,並瞭解它們包含的基本數據。再次爲Xcode的代碼登錄身份在第一幅圖像,在我管理的相關供應配置文件是這樣的:

Organizer Provisioning Profile

「名稱」欄和應用標識符列的尾端光匹配來自我的Xcode設置的灰色文本,所以這是在代碼簽名期間將被選擇使用的供應配置文件。注意行尾的'狀態'欄也很重要。在這種情況下,它是綠色的,並指示「有效配置文件」。這意味着我的鑰匙串至少有一個在該配給配置文件中編碼的證書的公鑰和私鑰。如果這個狀態是綠色以外的任何再有就是與您當前的公鑰/私鑰和/或供應配置文件的設置有問題 - 代碼簽名不能工作,除非供應簡介你試圖使用有其狀態設置爲綠色。其他可能的狀態選項包括:未發現

Organizer Provisioning Status Options

  • 有效簽名身份:您沒有公衆和在此部署配置文件編碼證書的至少一個私鑰。從管理器中刪除配置文件,然後返回到developer.apple.com/ios上的證書,標識符&配置文件工具,並確保您的配置文件中包含開發證書。驗證Keychain中的證書Access沒有過期或被撤銷,並且有一個私鑰鏈接到公鑰證書。
  • 個人資料已過時:供應配置文件的到期日已失效。刪除從主辦方這個供應配置文件,然後再講證書,標識&簡介工具上developer.apple.com/ios並重新發出該供應配置文件(如果實際上仍然需要它)

,並觸發你的其他項目up

除了所有關於確保安裝公鑰和私鑰的細微差別,以及配置文件設置恰到好處之外,還有其他一些事情可能會使開發人員感到不安。首先,Xcode收集配置文件並掛起,直到您告訴它將其刪除。從理論上講,除了您更改供應配置文件,下載並安裝更新版本的情況外,這不是一個超級大交易。很多時候,Xcode會抓住正確的配置文件,但有時它不會正確,你會花幾個小時看看證書,標識符&配置文件工具以及你的鑰匙串,試圖瞭解發生了什麼。

建議1:安裝更新版本的Provisioning Profile時,請刪除較舊的版本,以便Xcode不會處於可能需要做出決定的位置。

如果您重新簽發開發或分發證書,可能會發生類似的情況 - 大多數情況下,Xcode在生成關於不明確的證書時會觸發警告。

建議2:在構建過程中注意模糊警告。這意味着你有一箇舊的證書滿足構建條件,並且可能會無意中使用,可能會導致構建問題。

建議3:任何時候你都在鑰匙串處理您的證書,尋找「iPhone開發人員:...」或「iPhone分佈:...」的證書對他們有一個紅色的「X」。這是證書已過期或已被吊銷的指標。無論哪種方式,該公鑰(以及可能鏈接的私鑰)對於構建目的來說都沒有進一步的用處,並且可以被刪除。

最後,Code Sign Identity設置還有一個選項,其中列出了「自動配置文件選擇器」。在很多情況下,您會希望使用此選項,因爲它會盡最大努力從構建目標的設置中自動查找您的AppID,查找與該AppId相匹配的配給配置文件,並且包含您擁有公鑰和私鑰的證書。在一些自定義構建環境中,可能無法使用此選項,您必須使用其中一個固定的特定選項,例如第一張圖像中的演示設置。請注意,如果您使用固定選項,每次更新Provisioning Profile時,您都需要更新Code Signing Identity構建設置以匹配較新的版本。

重點外賣

  • 請務必保持兩個鑰匙串和Xcode的供應配置文件列表乾淨,重複數據刪除。
  • 安裝證書和供應配置文件後,請確保組織者報告供應配置文件的狀態爲綠色('有效配置文件')。任何其他狀態都表示在您考慮運行構建之前,需要解決的Keychain和配置文件之間存在問題。
  • 嘗試並使用「自動輪廓選擇器」。如果您的團隊和自動構建系統不需要考慮代碼標識身份設置,那麼您的團隊成員和任何自動構建系統都會更加愉快。
  • 如果您不能使用自動配置文件選擇器,請確保始終保持該設置的最新狀態,因爲您的配置文件的更新迭代已完成。

祝您的構建配置好,並請讓我知道如果您有任何其他跟進問題!

+5

Brian ...寫一本書。請? –

+4

@AndrewDuncan :)我需要爲現代Xcode進行更新 - 請記住Xcode接口的某些部分已經改變了稍微隱藏在我的[不是很小]答案中引用的UI元素,但要檢查的內容仍然是100 %準確。如果遇到問題,請提問我! –

+0

@BryanMusial,這是一個很好的解釋。有什麼步驟來驗證您的設備(如Apple Watch)是否已包含在Xcode設置爲使用的Provisioning Profile for Development中? – kzia

相關問題