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


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

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

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

  描述文件:描述文件里包含了App ID , Certificates (證書), Devices(設備)。 說明生成描述文件需要用到這些信息。我們要打包或者在真機上運行一個應用程序,首先需要證書來進行簽名,用來標識這個應用程序是合法的、安全的、完整的等等。然后需要指明它的App ID,並且驗證Bundle ID是否與其一致。再次,如果是真機調試,需要確認這台設備能否用來運行程序。而Provisioning Profile就把這些信息全部打包在一起,方便我們在調試和發布程序打包時使用,這樣我們只要在不同的情況下選擇不同的profile文件就可以了。而且這個Provisioning Profile文件會在打包時嵌入.ipa的包里。

 一、“手動管理證書”與“自動管理證書”

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

  如果我們想手動管理證書,請將xcode中的“automatically manage signing”勾掉。

二、正確獲得證書“常用名稱”

  首先要安裝證書或者直接安裝到處的p12文件。其次要得到“常用名稱”

1、打開“鑰匙串訪問”

  在“Launch”中搜索“鑰匙串訪問”

2、找到你的證書,單擊鼠標右鍵,單擊“顯示簡介”

3、其中常用名稱就是證書名稱copy待用

三、得到對應證書的描述文件

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

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

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

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

 

1、登錄“蘋果開發者中心” https://developer.apple.com/

2、點擊“Certificates, Identifiers & Profiles”

   這里就是我的描述文件,“Development”是開發者描述文件可以打包后在真機上安裝,“Distribution”是發布描述文件如果要發布到appstore需要這個描述文件。

 

3、創建描述文件

a)單擊“+”創建一個描述文件

 b)選擇開發者描述文件還是發布描述文件,選擇后單擊“continue”

 

c)選擇appid(也就是設置此描述文件應用於那個app,如果你有多個app需要給每個app都配置一個描述文件),選擇好后單擊“continue”

 d)選擇那個證書可以使用此描述文件,不知道全選即可,單擊“Continue”

e)選擇打包后可以在那些設備上使用,選擇好后單擊“Continue”

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

4、下載描述文件

  證書創建完成后需要把描述文件手動下載到本機

  找到你要使用的描述文件(開發者、發布)單擊后顯示如下內容,單擊“Download”后保存到 “/Users/rongshenglai/Library/MobileDevice/Provisioning Profiles” 目錄中注意每個人的個人目錄不同根據情況修改。

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

  注意:剛才制作描述文件時一定要選擇你使用的證書。

 四、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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM