轉載于:
原文鏈接:Code Signing in Xcode 8
譯文鏈接:Xcode 8 中的代碼簽名
譯者: leoxu
代碼簽名和管理開發證書配置多年來一直是開發者揮之不去的煩惱。為此我進行了大量的寫作和演講來幫助人們理解代碼簽名和開發證書配置到底是什么,以及如何才能對其較好的管理。所以你就可以想象得到當Matthew Firlik在今年的WWDC大會上《聯盟的平臺現狀》(53:30)上提到代碼簽名和開發證書配置時,我是有多么的驚訝和興奮。另外據其透露大會的日程安排包含了一完整的會議,討論 Xcode App 簽名會有什么新的東西,而且有兩個專注于于該話題的實際操作。那么,Xcode 8 是否能擺平過去我在代碼簽名和開發證書配置上所受到的委屈呢? 確實好多了。
在過去,代碼簽名被隱藏在Xcode的“構建設置(Build Settings)”Tab中。CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE 兩個設置項很難對付而且它們相互之間沒有直接的鏈接。開發者經常會碰到“沒有找到匹配的開發正式配置(No Matching Provisioning Profiles Found)”錯誤,或者是一個“應用程序代碼簽名授權文件中指定的權限不能匹配開發證書配置中指定的權限(The entitlements specified in your application’s Code Signing Entitlements file do not match those specified in your provisioning profile)?!卞e誤, 這還是在他們幸運的情況下。如果他們不夠走運,構建倒是會成功,但構建出來的APP會在設備上運行失敗,或者奔潰掉,就因為缺少了App組權限。Xcode 8 完全重構的開發證書系統,其所做出的變化會解決所有這些問題。
現在你在如何對你的APP進行代碼簽名和證書配置上有了選擇權 。自動代碼簽名令許多人感到興奮。自動代碼簽名使用了一個新的由Xcode管理的,獨立于你已經創建的配置的專用配置。這確實是對令人感到可怕的“(解決問題)Fix Issue”按鈕進行的一個擴展,但確實是隔離獨立的,因此并不會影響到你現在已經管理的配置。自動代碼簽名看起來很棒,而且它很有可能將會被大量的開發者使用到,
不過,這并非 Xcode 8 代碼簽名的改進中最令我感到興奮之處。在大型團隊中工作的人們或者沒有APP團隊和開發者門戶訪問權限的開發者,需要對其APP中的代碼簽名進行更細粒度的控制。自定義的代碼簽名提供了那樣的東西。自定義代碼簽名就是我們多年來如何對配置和APP進行管理的方式,它讓我們能對APP如何進行代碼簽名擁有最大程度的控制。 Xcode 8 將自定義代碼簽名和開發證書配置的從暗箱操作帶到了陽光下。沒有被埋沒在構建設置(Build Settings), 代碼簽名現在被通用(General)Tab的前頭和中心位置。當“自動管理簽名(Automatically manage signing)”沒有被選中的時候,我們可以特別地選擇我們希望用于每個配置的開發證書配置。目前這個在其自身中沒有新東西,我們總是能夠在 構建設置(Build Settings)Tab中做這個事情。真正棒的地方是 Xcode 8在這里所展示出來的機智。配置的下拉列表可選項現在對合格配置和不合格配置進行了分組,前者在后者之上。這意味著完全或者通配符匹配捆綁標識符的配置將會顯示在那些不匹配的配置之上。
不僅如此,如果你選擇了一個不匹配捆綁標識符的配置,現在就回得到一個錯誤消息,告訴你具體出了什么問題。
這是同我們的過去相比的一個巨大改善。XCode不再為我們隱藏細節。我們也不再為了找到哪里可能出了問題而東想西想。 Xcode 8 就會告訴你到底哪里出了問題,不會張冠李戴,丟三落四。如果我們止步于此,我也會對代碼簽名的變化感到完全地滿足。我知道我的描述聽起來像是一檔電視購物節目,但其實要更好!
Xcode 團隊已經在報告導航(Report Navigator)中引入了一份新的報告,概述了Xcode為你所做的跟代碼簽名相關的事情。
這一報告完全揭掉了在Xcode用來同開發者門戶打交道的“API”的面紗。老版本的Xcode會神不知鬼不覺的同Apple開發者門戶通信?,F在則是當Xcode 8代你處理代碼簽名的時候,你可以具體地看到執行了什么檢查,還有Xcode8做了什么來修復它識別出來的問題。
還有一件令我感到驚喜的事情就是有了一個新的構建配置設置,PROVISIONING_PROFILE_SPECIFIER。過去你可能要根據名稱指定 PROVISIONING_PROFILE,而Xcode轉而會像后面這樣引用項目中的配置的UUID: PROVISIONING_PROFILE = “9b7bca71-29ac-44de-a96d-131d06b46501”。如果帶有特定的那個UUID的配置丟失了,Xcode沒辦法自己去擺平這個事情。你就不得不到構建設置 (Build Settings )中你的列表里去找到配置名稱,為了讓Xcode獲取到新的UUID。 PROVISIONING_PROFILE_SPECIFIER 讓你可以指定開發證書配置名稱,而現在Xcode8將會在你的項目文件中保存后面這樣的東西: PROVISIONING_PROFILE_SPECIFIER = “9K9F9LCV74/KeyGrinder Dev”— 一個 Team ID 和配置名稱的組合(由于它是在開發者門戶中被命名的,并沒有必要時一個實際的文件名稱)。這樣Xcode就總是會使用這個名稱的最新的配置,而不管什么UUID了。在你做過更新之后,Xcode就不會再使用老的過時的配置。有了這個附加的功能,Apple為我們放開了自己的 set_project_profiles腳本。而沒有什么會比這更讓我們感到高興了。
最后一件我要重點提一提的事情就是Apple在會議和實際操作中都提到過的一個最佳實踐。應用程序發布是一個兩步走的過程:編譯然后進行代碼簽名。你的應用首先應該被編譯成一個 XCArchive 然后被導出成一個用于發布的IPA。因此,你并不需要在你的發布配置中有確切的證書和配置設定。只要APP是使用正確的發布標識、優化等等進行的編譯,它就可以用一個AdHoc或者甚至是一個開發配置來簽名。你只需要在導出IPA或者提交到 App Store時使用正確的 App Store 或者 Enterprise 配置就行了。這可以幫助那些不必接觸發布憑證和證書的開發者避免遇到那些他們拿著沒有任何辦法的錯誤。
Xcode 8 的發布讓我感覺Apple已經在傾聽并提供我們所訴求的東西了。