證書(Certificate)與描述文件(Provisioning Profiles)

  在使用腳本xcodebuild自動打包的時候,會用到簽名證書和描述文件,我在編譯的時候搞了好長時間才搞明白,下面介紹如何獲得正確配置。html

  證書:證書是用來給應用程序簽名的,只有通過簽名的應用程序才能保證他的來源是可信任的,而且代碼是完整的, 未經修改的。在Xcode Build Setting的Code Signing Identity中,你能夠設置用於爲代碼簽名的證書。ios

  .p12:由於直接從Apple下載的證書只有公鑰,沒有私鑰。沒辦法證實這個證書是你的(沒有辦法證實你有這個權利)。而從本地鑰匙串中導出的.p12文件是包含公鑰和私鑰的,也就是說能夠把證書上描述的權利賦予他人。xcode

  描述文件:描述文件裏包含了App ID , Certificates (證書), Devices(設備)。 說明生成描述文件須要用到這些信息。咱們要打包或者在真機上運行一個應用程序,首先須要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等。而後須要指明它的App ID,而且驗證Bundle ID是否與其一致。再次,若是是真機調試,須要確認這臺設備可否用來運行程序。而Provisioning Profile就把這些信息所有打包在一塊兒,方便咱們在調試和發佈程序打包時使用,這樣咱們只要在不一樣的狀況下選擇不一樣的profile文件就能夠了。並且這個Provisioning Profile文件會在打包時嵌入.ipa的包裏。安全

 1、「手動管理證書」與「自動管理證書」

  在Xcode8之後蘋果引入了自動管理證書(automatically manage signing),設置自動管理證書後xcode會根據帳號證書和蘋果開發者中心設置的內容,自動生成描述文件並下載到機器中使用。bash

  若是咱們想手動管理證書,請將xcode中的「automatically manage signing」勾掉。app

2、正確得到證書「經常使用名稱」

  首先要安裝證書或者直接安裝處處的p12文件。其次要獲得「經常使用名稱」ide

一、打開「鑰匙串訪問」ui

  在「Launch」中搜索「鑰匙串訪問」編碼

二、找到你的證書,單擊鼠標右鍵,單擊「顯示簡介」spa

三、其中經常使用名稱就是證書名稱copy待用

3、獲得對應證書的描述文件

   獲得證書名稱還不夠還須要獲得描述文件(Provisioning Profiles)

   每一個用戶有其相應的Provisioning Profiles配置目錄在當前用目錄中,個人目錄以下

cd /Users/rongshenglai/Library/MobileDevice/Provisioning Profiles

   其中就是我目前持有的描述文件。

 

一、登陸「蘋果開發者中心」 https://developer.apple.com/

二、點擊「Certificates, Identifiers & Profiles」

   這裏就是個人描述文件,「Development」是開發者描述文件能夠打包後在真機上安裝,「Distribution」是發佈描述文件若是要發佈到appstore須要這個描述文件。

 

三、建立描述文件

a)單擊「+」建立一個描述文件

 b)選擇開發者描述文件仍是發佈描述文件,選擇後單擊「continue」

 

c)選擇appid(也就是設置此描述文件應用於那個app,若是你有多個app須要給每一個app都配置一個描述文件),選擇好後單擊「continue」

 d)選擇那個證書可使用此描述文件,不知道全選便可,單擊「Continue」

e)選擇打包後能夠在那些設備上使用,選擇好後單擊「Continue」

f)在Profile Name中輸入此描述文件的名字,單擊「Continue」。

四、下載描述文件

  證書建立完成後須要把描述文件手動下載到本機

  找到你要使用的描述文件(開發者、發佈)單擊後顯示以下內容,單擊「Download」後保存到 「/Users/rongshenglai/Library/MobileDevice/Provisioning Profiles」 目錄中注意每一個人的我的目錄不一樣根據狀況修改。

  下載的文件名相似「XXXX.mobileprovision」 前邊的XXXX記錄下來它就是描述文件名,使用時不要帶.mobileprovision

  注意:剛纔製做描述文件時必定要選擇你使用的證書。

 4、Provisioning Profile文件的說明

如下爲典型供應配置文件 *.mobileprovision 的構成簡析:

(1)Name:該mobileprovision的文件名。

(2)UUID:該mobileprovision文件的真實文件名。

(3)TeamName:Apple ID帳號名。

(4)TeamIdentifier:Team Identity。

(5)AppIDName:explicit/wildcard App ID name(ApplicationIdentifierPrefix)。

(6)ApplicationIdentifierPrefix:完整App ID的前綴(TeamIdentifier.*)。

(7)DeveloperCertificates:包含了能夠爲使用該配置文件應用簽名的全部證書<data><array>。

證書是基於 Base64 編碼,符合 PEM(PrivacyEnhanced Mail, RFC 1848) 格式的,可以使用 OpenSSL 來處理(opensslx509 -text -in file.pem)。

從 DeveloperCertificates 提取 <data></data> 之間的內容到文件 cert.cer(cert.perm):

-----BEGIN CERTIFICATE-----

將<data></data>之間的內容拷貝至此

-----END CERTIFICATE-----`

Mac 下右鍵 QuickLook 查看 cert.cer(cert.perm),在 Keychain Access 中右鍵 Get Info 查看對應證書 ios_development.cer,正常狀況(公私鑰 KeyPair 配對)應吻合;Windows 下沒有足夠信息(WWDRCA.cer),沒法驗證該證書。

若是你用了一個不在這個列表中的證書進行簽名,不管這個證書是否有效,這個應用都將 CodeSign Fail。

(8)Entitlements 鍵<key>對應的<dict>:

keychain-access-groups:$(AppIdentifierPrefix),參見Code Signing Entitlements(*.entitlements)。

每一個應用程序都有一個能夠用於安全保存一些如密碼、認證等信息的 keychain,通常而言本身的程序只能訪問本身的 keychain。經過對應用簽名時的一些設置,還能夠利用keychain的方式實現同一開發者簽證(就是相同bundle seed)下的不一樣應用之間共享信息的操做。好比你有一個開發者賬戶,並開發了兩個不一樣的應用A和B,而後經過對A和B的 keychain access group 這個東西指定共用的訪問分組,就能夠實現共享此 keychain 中的內容。

application-identifier:帶前綴的全名,例如$(AppIdentifierPrefix)com.apple.garageband。

com.apple.security.application-groups:App Group ID(group. com.apple),參見Code Signing Entitlements(*.entitlements)。

com.apple.developer.team-identifier:同Team Identifier。

(9)ProvisionedDevices:該mobileprovision受權的開發設備的UDID <array>。

 

 

參考文檔:

  https://blog.csdn.net/potato512/article/details/52180916

  https://www.cnblogs.com/ym123/p/4292002.html

  https://blog.csdn.net/phunxm/article/details/42685597/

相關文章
相關標籤/搜索