之前被證書折騰的死去活來的,現在懂了點。mark下一些相關知識。
今天先介紹下Certificate、AppId和Provisioning Profile。
參考博文:ios學習之 關於Certificate、Provisioning Profile、App ID的介紹及其之間的關係
當你準備進行真機測試或者發佈應用到App Store上去的時候, 免不了要申請相應的證書。(Development--測試證書。 Distribution--發佈證書)
進入證書管理相應網站https://developer.apple.com/account/ios/profile/profileList.action。
可以很容易的發現這樣的幾個東西。
其中, Devices指的當然是設備了。 這裏不做介紹。每個開發者賬號可以關聯100臺設備。你可以通過xcode直接添加你的設備。
現在, 着重講解下Certificate、AppId和Provisioning Profile。
Certificate(證書)
證書是你有權利開發的憑證,是開發者的一種標識,相當於身份證,一個開發者賬號只有一套。一套含兩個,Development和Distribution(也就是Production)。
其中Development證書提供開發者在電腦上真機調試的權限,可以製作多個副本分發到多臺電腦。
Distribution證書給開發者提供發佈ios程序的權限,也就是說有了這個,你就有權力發佈程序到App Store去了。只有一個,不能製作副本分發到多臺電腦。
下面是證書的分類信息:(括號內爲證書有效期)
- Development
- App Development (1年):用來開發和真機調試應用程序。
- Push Development (1年):用來調試Apple Push Notification
- Production
-
In-House and Ad Hoc (3年):用來發布In-House和AdHoc的應用程序。
-
- MDM CSR
- Push Production (1年):用來在發佈版本中使用Apple Push Notification。
- Pass Type ID Certificate
- Website Push ID Certificate
-
注:
我們申請一個Certificate之前,需要先申請一個Certificate Signing Request (CSR) 文件,而這個過程中實際上是生成了一對公鑰和私鑰,保存在你Mac的Keychain中。代碼簽名正是使用這種基於非對稱祕鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。如下圖所示,在你Mac的keychain的login中存儲着相關的公鑰和私鑰,而證書中包含了公鑰。你只能用私鑰來進行簽名,所以如果沒有了私鑰,就意味着你不能進行簽名了,所以就無法使用這個證書了,此時你只能revoke之前的證書再申請一個。因此在申請完證書時,最好導出並保存好你的私鑰。當你想與其他人或其他設備共享證書時,把私鑰傳給它就可以了。私鑰保存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。當你用自己的私鑰對代碼簽名後,蘋果就可以用證書中的公鑰來進行驗證,確保是你對代碼進行了簽名,而不是別人冒充你,同時也確保代碼的完整性等。
App ID
App ID用於標識一個或者一組App,App ID應該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:
- Explicit App ID:唯一的App ID,這種App ID用於唯一標識一個應用程序,例如com.ABC.demo1,標識Bundle ID爲com.ABC.demo1的程序。
- Wildcard App ID:通配符App ID,用於標識一組應用程序。例如*可以表示所有應用程序,而com.ABC.*可以表示以com.ABC開頭的所有應用程序。
每創建一個App ID,我們都可以設置該App ID所使用的APP Services,也就是其所使用的額外服務。每種額外服務都有着不同的要求,例如,如果要使用Apple Push Notification Services,則必須是一個explicit App ID,以便能唯一標識一個應用程序。下面是目前所有可選的服務和相應的配置要求。
如果你的App使用上述的任何一種service,就要按照要求去配置。
Provisioning Profile
一個Provisioning Profile文件包含了上述的所有內容:證書、App ID、設備。
試想一下,如果我們要打包或者在真機上運行一個應用程序,我們首先需要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等;然後需要指明它的App ID,並且驗證Bundle ID是否與其一致;再次,如果是真機調試,需要確認這臺設備能否用來運行程序。而Provisioning Profile就把這些信息全部打包在一起,方便我們在調試和發佈程序打包時使用,這樣我們只要在不同的情況下選擇不同的profile文件就可以了。而且這個Provisioning Profile文件會在打包時嵌入.ipa的包裏。
例如,如下圖所示,一個用於Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可使用的證書和設備。這意味着使用這個Provisioning Profile打包程序必須擁有相應的證書,並且是將App ID對應的程序運行到Devices中包含的設備上去。
如上所述,在一臺設備上運行應用程序的過程如下:
與證書一樣,Provisioning Profile也分爲Development和Distribution兩種:
(注:前面提到不同賬戶類型所能創建的證書種類不同,顯然Profile文件的種類是和你所能創建的證書種類相關的)
- Development (1年)
- Distribution (1年)
- In House
- Ad Hoc
- App Store
In House 與Ad Hoc的不同之處在於:In House沒有設備數量限制,而Ad Hoc是用來測試用的,Ad Hoc的包只能運行在該賬戶內已登記的可用設備上,顯然是有最多100個設備的數量限制。所以這兩種Provisioning Profile文件的區別就在於其中的設備限制不一樣而已,而他們所使用的Certificate是相同的。
2.開發/發佈流程
瞭解了上面的概念,再來看開發及發佈流程就非常簡單了,而且相信你不用看教程也能一步步完成所有的操作了。
開發/真機調試流程
根據上面的介紹,可以知道進行Development主要有以下幾個步驟:
- 申請證書
- 加入設備
- 生成Provisioning Profile
- 設置Xcode Code Sign Identifer
事實上第三步通常是不需要的,因爲我們通常都是用Xcode生成和管理的iOS Team Provisioning Profile來進行開發,因爲它非常方便,所以不需要自己手動生成Provisioning Profile。
iOS Team Provisioning Profile是第一次使用Xcode添加設備時,Xcode自動生成的,它包含了Xcode生成的一個Wildcard App ID(*,匹配所有應用程序),賬戶裏面所有的Devices和所有Development Certificates,如下圖所示。因此,team中的所有成員都可以使用這個iOS Team Provisioning Profile在team中的所有設備上調試所有的應用程序。並且當有新設備添加進來時,Xcode會更新這個文件。
發佈流程
網上有很多關於發佈App Store的流程,我就不綴述了,不過根據上面的概念介紹,不管是App Store、In-House還是Ad-Hoc,打包流程都是差不多的,都包括了以下幾個關鍵步驟:
- 創建發佈證書
- 創建App ID
- 創建對應的Provisioning Profile文件
- 設備Bundle ID和App ID一致
- 設置Xcode Code Sign Identifer,選擇合適的Profile和證書進行簽名,打包
以上就是對證書、Provisioning Profile、App ID等的介紹,下一篇文章會介紹以下In-House證書相關的內容。