做者:Toyun
在iOS開發過程當中,不可避免的要和證書打交道,真機調試、App上架、打包給測試去測試等都須要搞證書。在此過程當中咱們會遇到不少的問題,可是若是掌握了真機調試的原理和本質;遇到問題,咱們就更容易定位問題之所在,從而迅速的解決問題。這篇文章不是一步步教給你證書,描述文件的製做(其實製做步驟是很是簡單的),而是儘量的講明白Member Center中的一些知識及原理。而且此文不涉及如何申請開發者帳號,以及App上架App Store的流程。html
此篇文章的邏輯以下圖所示:ios
圖0-0 此篇文章的邏輯圖app
Certificateside
什麼是證書工具
什麼是證書?證書就是:證實證書擁有者擁有證書上所說的能力。一個證書要涉及到頒發者,擁有者,證實擁有者擁有了什麼能力。例如,CET-4證書;頒發者:學校,擁有者:本身,證實的能力:英語達到四級水平。蘋果開發者證書也是同樣,頒發者:本身,擁有者:安裝證書的電腦;證實的能力:能夠安裝或者打包某應用程序。開發者證書分爲兩種類型:Development Certificate(開發證書)和Production Certificate(發佈證書)。學習
開發者證書能力來源測試
那麼當某臺電腦安裝開發者證書後,這臺電腦是如何擁有這種能力的呢?ui
蘋果在此運用了代碼簽名技術。代碼簽名驗證容許咱們的操做系統來判斷是誰對App進行了簽名,在安裝了Xcode後,Xcode會在項目編譯期間使用你的代碼簽名驗證,這個驗證由一個由Apple認證過的公鑰-私鑰對組成,私鑰存儲在你的鑰匙串中(Mac本地,在系統實用工具中),公鑰包含在證書(Certificates)中,證書在本地鑰匙串和開發者帳號中都有存儲,另外,還有一個咱們能夠叫作媒介證書的證書來確保咱們的證書(Certificates)是通過受權而發佈的當安裝好Xcode時,媒介證書(Intermediate Certificate)就已經安裝到咱們的鑰匙串中去了。經過在開發者帳號(Developer Account)和本地(Mac)都通過驗證的證書(Certificate)咱們就能夠利用合法的證書進行App的測試和發佈了。操作系統
證書在Xcode工程中所對應的位置3d
圖1-1 證書在Xcode工程中所對應的位置
Identifiers
Identifiers中又分爲App IDs、Pass Type IDs、Website Push IDs、iCloud Containers、App Groups、Merchant IDs、這裏主要講解App IDs。
App ID是什麼
App ID其實就是一個App的身份證,一個App的惟一標示。在Project中稱爲Bundle ID。在Member Center、Project、iTunes Connect都是須要此ID去標示此App的惟一性。Bundle ID在不一樣環境下的表現關係。如(圖2-1)所示。
圖2-1 Bundle ID在不一樣環境下的表現
一個Bundle ID精確的標識了一個App。Bundle ID字符串中只能包含字符(A-Z,a-z,0-9),鏈接符(-),點(.)並且此字符串最好是reverse-DNS格式的。例如你公司的域名是Acme.com,你App的名字是Hello,那麼你能夠用com.Acme.Hello做爲你的Bundle ID。
Bundle ID的做用:
在Xcode工程中,Bundle ID儲存在Info.plist中,當你編譯工程的時候,他會把此文件拷貝到你的app包中。
在iTunes Connect,用Bundle ID去標識App,在你第一次構建上傳以後,你就不能在改變或者刪除你的Bundle ID了。
在Member Center,你建立一個和Bundle ID相匹配的App ID。若是App ID是精準類型的,你就必須精確的去匹配你的Bundle ID,Bundle ID是大小寫敏感的。
在Member Center中添加App ID
在Member Center中添加App ID也是很簡單,選中App ID點擊右上角的+號,App ID Description就是寫一下這個App ID的描述了。App ID Prefix:App ID的前綴,這裏蘋果爲了更精確的保證App ID的惟一性使用了開發者帳號的Team ID做爲App ID的前綴。App ID Suffix:App ID的後綴,這裏有兩種類型,一種是精準的,一種是通用的,咱們在使用中大多數都是使用精準的,直接把咱們的Bundle ID填進去就好。下面就是App包含的服務,這個根據本身業務所需的類型本身選擇就能夠了,而咱們用的最多的也就是Push Notifications推送服務。而後continue就能夠了。
Devices
Device就是用來測試的設備。在Member Center中添加device的步驟其實也很簡單了,主要就是要拿到device的UDID,這裏咱們能夠利用iTunes、iTools、Xcode這些工具均可以拿到設備的UDID。須要注意的就是,每一個開發者帳號,每一年最多能夠添加100臺調試設備,並且不能更改,想要更改就要等到下一年從新續費的時候才能更改調試設備了。在下面要講述的描述文件中只有發佈到App Store和In House的時候這兩種類型的描述文件的製做是不須要添加device的,而其餘描述文件的製做都是須要添加device的。具體使用狀況,參考下面的【Provisioning Profiles】。
使用iTunes查找UDID
圖3-1 使用iTunes查找UDID
使用Xcode查找UDID
選擇Xcode工具條上的Window,而後選Devices選項。
圖3-2 使用Xcode查找UDID
Provisioning Profiles
描述文件描述了可由哪臺電腦,把哪一個App,安裝到哪臺手機上面。一個描述文件的製做是須要上面的一些信息的。因此蘋果在Member Center中把這個文件的製做排在最後面是很合理的。描述文件其實能夠分爲兩種類型,一種是帶有device信息的;而另外一種是不帶device信息的。
帶device信息的描述文件
圖4-1帶有device信息的描述文件
這種類型的描述文件包括全部開發類型的描述文件和發佈到Ad Hoc上面的描述文件,由於作這些事情的時候,都有很明確的目的,這個App要安裝到哪臺設備上面。
不帶device信息的描述文件
圖4-2不帶device信息的描述文件
不帶device信息的描述文件只有發佈到App Store和In House兩種狀況下才使用這個描述文件,由於經過這兩個渠道發佈的App咱們是不能肯定未來那一臺設備纔會安裝,只讓也就不會帶有App的信息。
描述文件在Xcode中的位置
圖4-1 描述文件在Xcode中的位置
團隊開發證書的管理
在團隊開發的時候,最好是一我的去管理證書,當有其餘人要用的時候,可直接導出.p12證書供其餘開發者使用。證書出了問題,我感受仍是至關麻煩的,而App ID在添加以後,基本上是不會改變的,除非要爲App添加新的服務,這時候纔要從新編輯App ID,因此App ID最好也是管理證書的人去管理App ID。添加設備這一塊就很隨意了,全部的開發者都應該有權去管理添加設備這一塊。描述文件的製做這個要區分一下是開發類型的描述文件,仍是發佈類型的描述文件。開發類型的描述文件應該是團隊裏的每個開發者都有權去管理的,實際上當開發類型的描述文件出現問題的時候,開發者能夠對此描述文件從新編輯一下進行使用,這樣是不會影響其餘開發者的,甚至你能夠本身從新制做一個描述文件也沒什麼問題。可是發佈類型的描述文件,這個最好仍是管理證書的那我的去管理這個描述文件。打包發佈的時候若是這個描述文件出現變化,仍是很麻煩的,並且這個描述文件對於團隊其餘開發者來講也不是很經常使用,甚至是根本用不到這個描述文件。以上這些就是我我的對於團隊開發證書管理的建議,固然也有不足之處,如你有好的建議,也歡迎你私密我,共同交流,共同進步。
舉例使用
上面幾段可能原理性的內容過多了一些,可是我的感受掌握這些原理仍是頗有必要的。下面舉個例子,對應上面的原理,講一下實際的運用。
產品需求:個人一個App,包含推送功能,在開發狀態下已經測試完成全部功能,可是這時產品經理爲了保證產品在上線後也萬無一失,就想測試一下上線後,推送的功能是否穩定。這時咱們的App尚未上線,那咱們要怎樣才能去測試這樣的一個功能呢?
分析這個需求,要測試上線後推送功能,其實無非就是看上線後推送的證書會不會出現什麼問題。這時候咱們就會想到Ad Hoc。由於發佈App除了App Store渠道以外,還能夠選擇Ad Hoc。這時候咱們就先選定用哪幾部手機進行測試,先添加到device中,而後開始製做描述文件。點擊右上角+號 -> 而後選擇Distribution中的Ad Hoc -> 點擊continue -> 選擇你要測試的App的App ID -> 點擊continue -> 選擇你發佈到App Store時候所用的證書 -> 點擊continue -> 選擇你要安裝的測試設備 -> 給此描述文件起一個名字 -> 點擊generate。這樣你就生成了一個發佈到Ad Hoc上面對應的描述文件,用此描述文件打包出來的App和發佈到App Store上面的App用的是同一個證書,因此在此狀況下App的推送沒有什麼問題,基本能夠推斷App上線以後應該也是沒有什麼問題的。
總結
對於蘋果開發者證書不是太瞭解的同窗,證書問題多是很是頭疼的一件事情。由於開發者帳號有三種類型,而在製做證書的時候,有開發證書,發佈證書以及一些附帶屬性的證書,以及添加App ID,Device,製做描述文件,感受就是很亂,搞了一堆的東西,最後也不知道這些東西到底都是幹什麼用的,運氣好的話,可能這樣瞎搞一通,App就能跑到真機上面了,可是也不排除,瞎搞一通,仍是有各類問題。因此咱們在學習知識的時候,仍是要儘量的去了解他的原理。關於開發者證書,咱們還要根據實際需求本身去作一些判斷,來知足實際的需求。這篇文章看起來可能有些亂,並且有些地方也沒有提到。一些不足之處,還請多多見諒,同時也歡迎你私密我,私下交流共同探討,共同進步。
參考