1. 程式人生 > >iOS-開發者相關的幾種證書

iOS-開發者相關的幾種證書

https://www.cnblogs.com/CoderAlex/p/5033852.html

目錄 

  1. 引言
  2. 寫在前面
  3. 一App IDbundle identifier
  4. 二裝置Device
  5. 三開發證書Certificates
    1. 證書的概念
    2. 數字證書的概念
    3. iOS開發證書
    4. iOS開發證書的根證書
    5. 申請證書CSRCertificate Signing Request
  6. 四供應配置檔案Provisioning Profiles
    1. Provisioning Profile的概念
    2. Provisioning Profile的構成
  7. 五開發組供應配置檔案Team Provisioning Profiles
    1. Team Provisioning Profile的概念
    2. Team Provisioning Profile生成更新時機
  8. 六App Group ID
    1. App Group的概念
    2. App Group的配置
  9. 七證書與簽名Certificate Signature
    1. Code Signing Identity
    2. Code Signing
    3. Verify Code Signature with Certificate
  10. 八在多臺機器上共享開發賬戶證書
    1. Xcode匯出開發者賬號developerprofile或PKCS12檔案p12
    2. Keychain Access匯出PKCS12檔案p12
  11. 九證書配置常見錯誤
    1. no such provisioning profile was found
    2. No identities from profile
    3. Code Signing Entitlements file do not match profile

 

引言

        關於開發證書配置(Certificates & Identifiers & Provisioning Profiles),相信做iOS開發的同學沒少被折騰。對於一個iOS開發小白、半吊子(比如像我自己)抑或老兵,或多或少會有或曾有過以下不詳、疑問、疑惑甚至困惑:

  1. 什麼是App ID?Explicit/Wildcard App ID有何區別?什麼是App Group ID?
  2. 什麼是證書(Certificate)?如何申請?有啥用?
  3. 什麼是Key Pair(公鑰/私鑰)?有啥用?與證書有何關聯?
  4. 什麼是簽名(Signature)?如何簽名(CodeSign)?怎樣校驗(Verify)?
  5. 什麼是(Team)Provisioning Profiles?有啥用?
  6. Xcode如何配置才能使用iOS真機進行開發除錯?
  7. 多臺機器如何共享開發者賬號或證書?
  8. 遇到證書配置問題怎麼辦?

本文將圍繞相關概念做個系統的梳理串燒。

寫在前面

1.假設你使用過Apple裝置(iMac/iPad/iPhone)且註冊過Apple ID(Apple Account)。

2.假設你或你所在的開發組已加入蘋果開發者計劃(Enroll in iOS Developer Program to become a member),即已註冊開發者賬號(Apple Developer Account)。

  • 只有擁有開發者賬號,才可以申請開發/釋出證書及相關配置授權檔案,進而在iOS真機上開發除錯Apps或釋出到App Store。
  • 開發者賬號分為Individual和Company/Organization兩種型別。如無特別交代,下文基於$99/Year的普通個人開發者(Individual)賬號展開。

3.若要真機除錯實踐,你必須至少擁有一臺裝有Mac OS X/Xcode的Mac開發機(iMac or MacBook),其上自帶原生的Keychain Access。

.App ID(bundle identifier)

App ID即Product ID,用於標識一個或者一組App。

App ID應該和Xcode中的Bundle Identifier是一致(Explicit)的或匹配(Wildcard)的。

App ID字串通常以反域名(reverse-domain-name)格式的Company Identifier(Company ID)作為字首(Prefix/Seed),一般不超過255個ASCII字元。

App ID全名會被追加Application Identifier Prefix(一般為TeamID.),分為兩類:

  • Explicit App ID:唯一的App ID,用於唯一標識一個應用程式。例如“com.apple.garageband”這個App ID,用於標識Bundle Identifier為“com.apple.garageband”的App。
  • Wildcard App ID:含有萬用字元的App ID,用於標識一組應用程式。例如“*”(實際上是Application Identifier Prefix)表示所有應用程式;而“com.apple.*”可以表示Bundle Identifier以“com.apple.”開頭(蘋果公司)的所有應用程式。

使用者可在Developer MemberCenter網站上註冊(Register)或刪除(Delete)已註冊的App IDs。

App ID被配置到【XcodeTarget|Info|Bundle Identifier】下;對於Wildcard App ID,只要bundle identifier包含其作為Prefix/Seed即可。

.裝置(Device)

Device就是執行iOS系統用於開發除錯App的裝置。每臺Apple裝置使用UDID來唯一標識。

iOS裝置連線Mac後,可通過iTunes->Summary或者Xcode->Window->Devices獲取iPhone的UDID(identifier)。

Apple Member Center網站個人賬號下的Devices中包含了註冊過的所有可用於開發和測試的裝置,普通個人開發賬號每年累計最多隻能註冊100個裝置。

  • Apps signed by you or your team run only on designated development devices.
  • Apps run only on the test devices you specify.

使用者可在網站上註冊或啟用/禁用(Enable/Disable)已註冊的Device。

本文的Devices是指連線到Xcode被授權用於開發測試的iOS裝置(iPhone/iPad)。

.開發證書(Certificates)

1.證書的概念

證書是由公證處或認證機關開具的證明資格或權力的證件,它是表明(或幫助斷定)事理的一個憑證。證件或憑證的尾部通常會烙印公章

每個中國人一生可能需要70多個證件,含15種身份證明。證件中“必需的”有30到40個。將這些證件按時間順序鋪開,那就是一個天朝子民的一生——持準生證許可落地,以戶籍證明入籍,以身份證認證身份,持結婚證以合法同居,最終以死亡證明登出。

2.數字證書的概念

數字證書就是網際網路通訊中 標誌通訊各方 身份資訊的一串數字,提供了一種在Internet上驗證通訊 實體身份的方式,其作用類似於司機的駕駛執照或日常生活中的身份證。它是由一個由權威機構—— CA機構,又稱為證書授權中心(Certificate Authority)發行的,人們可以在網上用它來識別對方的身份。
  • 數字證書是一個經證書授權中心數字簽名的包含公開金鑰擁有者資訊以及公開金鑰的檔案。最簡單的證書包含一個公開金鑰、名稱以及證書授權中心的數字簽名。
  • 數字證書還有一個重要的特徵就是時效性:只在特定的時間段內有效。

數字證書中的公開金鑰(公鑰)相當於公章。

某一認證領域內的根證書是CA認證中心給自己頒發的證書,是信任鏈的起始點。安裝根證書意味著對這個CA認證中心的信任。

為了防止GFW進行中間人攻擊(MitM),例如篡改github證書,導致無法訪問github網站等問題,可選擇不信任CNNIC

 

  • 在[鑰匙串-系統]中雙擊CNNIC ROOT,在【信任】|【使用此證書時】下拉選擇【永不信任】。

 

在天朝子民的一生中,戶籍證明可理解為等效的根證書:有了戶籍證明,才能辦理身份證;有了上流的身份證,才能辦理下游居住證、結婚證、計劃生育證、駕駛執照等認證。

3.iOS(開發)證書

iOS證書是用來證明iOS App內容(executable code)的合法性和完整性的數字證書。對於想安裝到真機或釋出到AppStore的應用程式(App),只有經過簽名驗證(Signature Validated)才能確保來源可信,並且保證App內容是完整、未經篡改的。

iOS證書分為兩類:Development和Production(Distribution)。

  • Development證書用來開發和除錯應用程式:A development certificate identifies you, as a team member, in a development provisioning profile that allows apps signed by you to launch on devices. 
  • Production主要用來分發應用程式(根據證書種類有不同作用):A distribution certificate identifies your team or organization in a distribution provisioning profile and allows you to submit  your app to the store. Only a team agent or an admin can create a distribution certificate.

普通個人開發賬號最多可註冊iOS Development/Distribution證書各2個,使用者可在網站上刪除(Revoke)已註冊的Certificate。

下文主要針對iOS App開發除錯過程中的開發證書(Certificate for Development)。

4.iOS(開發)證書的根證書

那麼,iOS開發證書是誰頒發的呢?或者說我們是從哪個CA申請到用於Xcode開發除錯App的證書呢?

iOS以及Mac OS X系統(在安裝Xcode時)將自動安裝AppleWWDRCA.cer這個中間證書(Intermediate Certificates),它實際上就是iOS(開發)證書的證書,即根證書(Apple Root Certificate)。

AppleWWDRCA(Apple Root CA)類似註冊管理戶籍的公安機關戶政管理機構,AppleWWDRCA.cer之於iOS(開發)證書則好比戶籍證之於身份證。

如果Mac Keychain Access證書助理在申請證書時尚未安裝過該證書,請先下載安裝(Signing requires that you have both the signing identity and the intermediate certificate installed in your keychain)。

5.申請證書(CSR:Certificate Signing Request)

可以在缺少證書時通過Xcode Fix Issue自動請求證書,這裡通過Keychain證書助理從證書頒發機構請求證書:填寫開發賬號郵件和常用名稱,勾選【儲存到磁碟】。

keychain將生成一個包含開發者身份資訊的CSR(Certificate Signing Request)檔案;同時,Keychain Access|Keys中將新增一對Public/Private Key Pair(This signing identity consists of a public-private key pair that Apple issues)。

private key始終儲存在Mac OS的Keychain Access中,用於簽名(CodeSign)對外發布的App;public key一般隨證書(隨Provisioning Profile,隨App)散佈出去,對App簽名進行校驗認證。使用者必須保護好本地Keychain中的private key,以防偽冒。

  • Keep a secure backup of your public-private key pair. If the private key is lost, you’ll have to create an entirely new identity to sign code. 
  • Worse, if someone else has your private key, that person may be able to impersonate you.

在Apple開發網站上傳該CSR檔案來新增證書(Upload CSR file to generate your certificate):

 

Apple證書頒發機構WWDRCA(Apple Worldwide Developer Relations Certification Authority)將使用private key對CSR中的public key和一些身份資訊進行加密簽名生成數字證書(ios_development.cer)並記錄在案(Apple Member Center)。

從Apple Member Center網站下載證書到Mac上雙擊即可安裝(當然也可在Xcode中新增開發賬號自動同步證書和[生成]配置檔案)。證書安裝成功後,在KeychainAccess|Keys中展開建立CSR時生成的Key Pair中的私鑰前面的箭頭,可以檢視到包含其對應公鑰的證書(Your requested certificate will be the public half of the key pair.);在Keychain Access|Certificates中展開安裝的證書(ios_development.cer)前面的箭頭,可以看到其對應的私鑰。

 

Certificate被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Identity】下,下拉選擇Identities from Profile "..."(一般先配置Provisioning Profile)。以下是Xcode配置示例:

.供應配置檔案(Provisioning Profiles

1.Provisioning Profile的概念

Provisioning Profile檔案包含了上述的所有內容:證書、App ID和裝置

一個Provisioning Profile對應一個Explicit App ID或Wildcard App ID(一組相同Prefix/Seed的App IDs)。在網站上手動建立一個Provisioning Profile時,需要依次指定App ID(單選)、證書(Certificates,可多選)和裝置(Devices,可多選)。使用者可在網站上刪除(Delete)已註冊的Provisioning Profiles。

Provisioning Profile決定Xcode用哪個證書(公鑰)/私鑰組合(Key Pair/Signing Identity)來簽署應用程式(Signing Product),將在應用程式打包時嵌入到.ipa包裡。安裝應用程式時,Provisioning Profile檔案被拷貝到iOS裝置中,執行該iOS App的裝置也通過它來認證安裝的程式。

如果要打包或者在真機上執行一個APP,一般要經歷以下三步:

  • 首先,需要指明它的App ID,並且驗證Bundle ID是否與其一致;
  • 其次,需要證書對應的私鑰來進行簽名,用於標識這個APP是合法、安全、完整的;
  • 然後,如果是真機除錯,需要確認這臺裝置是否授權執行該APP。

Provisioning Profile把這些資訊全部打包在一起,方便我們在除錯和釋出程式打包時使用。這樣,只要在不同的情況下選擇不同的Provisioning Profile檔案就可以了。

Provisioning Profile也分為Development和Distribution兩類,有效期同Certificate一樣。Distribution版本的ProvisioningProfile主要用於提交App Store稽核,其中不指定開發測試的Devices(0,unlimited)。App ID為Wildcard App ID(*)。App Store稽核通過上架後,允許所有iOS裝置(Deployment Target)上安裝執行該App。

Xcode將全部供應配置檔案(包括使用者手動下載安裝的和Xcode自動建立的Team Provisioning Profile)放在目錄~/Library/MobileDevice/Provisioning Profiles下。

2.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>。

Provisioning Profile被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下,然後在Code Signing Identity下拉可選擇Identities from Profile "..."(即Provisioning Profile中包含的Certificates)。

.開發組供應配置檔案(Team Provisioning Profiles

1.Team Provisioning Profile的概念

每個Apple開發者賬號都對應一個唯一的Team ID,Xcode3.2.3預釋出版本中加入了Team Provisioning Profile這項新功能。

在Xcode中新增Apple Developer Account時,它將與Apple Member Center後臺勾兌自動生成iOS Team Provisioning Profile(Managed by Xcode)。

Team Provisioning Profile包含一個為Xcode iOS Wildcard App ID(*)生成的iOS Team Provisioning Profile:*(匹配所有應用程式),賬戶裡所有的Development Certificates和Devices都可以使用它在這個team註冊的所有裝置上除錯所有的應用程式(不管bundle identifier是什麼)。同時,它還會為開發者自己建立的Wildcard/Explicit App IDs建立對應的iOS Team Provisioning Profile。

2.Team Provisioning Profile生成/更新時機

  • Add an Apple ID account to Xcode
  • Fix issue "No Provisioning Profiles with a valid signing identity" in Xcode
  • Assign Your App to a Team in Xcode project settings of General|Identity
  • Register new device on the apple development website or Xcode detected new device connected

利用Xcode生成和管理的iOS Team Provisioning Profile來進行開發非常方便,可以不需要上網站手動生成下載Provisioning Profile。

Team Provisioning Profile同Provisioning Profile,只不過是由Xcode自動生成的,也被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下。

.App Group (ID)

1.App Group的概念

WWDC14除了釋出了OS X v10.10和switf外,iOS 8.0也開始變得更加開放了。說到開放,當然要數應用擴充套件(App Extension)了。顧名思義,應用擴充套件允許開發者擴充套件應用的自定義功能和內容,能夠讓使用者在使用其他應用程式時使用該項功能,從而實現各個應用程式間的功能和資源共享。可以將擴充套件理解為一個輕量級(nimble and lightweight)的分身。

擴充套件和其Containing App各自擁有自己的沙盒,雖然擴充套件以外掛形式內嵌在Containing App中,但是它們是獨立的二進位制包,不可以互訪彼此的沙盒。為了實現Containing App與擴充套件的資料共享,蘋果在iOS 8中引入了一個新的概念——App Group,它主要用於同一Group下的APP實現資料共享,具體來說是通過以App Group ID標識的共享資源區——App Group Container。

App Group ID同App ID一樣,一般不超過255個ASCII字元。使用者可在網站上編輯Explicit App IDs的App Group Assignment;可以刪除(Delete)已註冊的AppGroup (ID)。

2.App Group的配置

Containing App與Extension的Explicit App ID必須Assign到同一App Group下才能實現資料共享,並且Containing App與Extension的App ID命名必須符合規範:

  1. 置於同一App Group下的App IDs必須是唯一的(Explicit,not Wildcard)
  2. Extension App ID以Containing App ID為Prefix/Seed

假如Garageband這個App ID為“com.apple.garageband”,則支援從語音備忘錄匯入到Garageband應用的外掛的App ID可能形如“com.apple.garageband.extImportRecording”。

 

 

App(ex)

 

App Group ID

Provisioning Profile

Code Signing Identity

(Certificate Key Pair)

App ID

(bundle identifier)

Devices

(test)

GarageBand

置於同一分組:

group.com.apple

(1)共用同一證書:ios_development.cer

(2)共用證書Key Pair中的Private Key進行CodeSign

com.apple.garageband

授權開發測試裝置的UDIDs

GarageBand擴充套件外掛

com.apple.garageband.extImportRecording

 

關於Provisioning Profile,可以使用自己手動生成的,也可以使用Xcode自動生成的Team Provisioning Profile。

App Group會被配置到【Xcode Target|Build Settings|Code Signing|Code Signing Entitlements】檔案(*.entitlements)的鍵com.apple.security.application-groups下,不影響Provisioning Profile生成流程。

.證書與簽名Certificate& Signature)

1.Code Signing Identity

 

Xcode中配置的Code Signing Identity(entitlements、certificate)必須與Provisioning Profile匹配,並且配置的Certificate必須在本機Keychain Access中存在對應Public/Private Key Pair,否則編譯會報錯。

Xcode所在的Mac裝置(系統)使用CA證書(WWDRCA.cer)來判斷Code Signing Identity中Certificate的合法性:

  • 若用WWDRCA公鑰能成功解密出證書並得到公鑰(Public Key)和內容摘要(Signature),證明此證書確乃AppleWWDRCA釋出,即證書來源可信;
  • 再對證書本身使用雜湊演算法計算摘要,若與上一步得到的摘要一致,則證明此證書未被篡改過,即證書完整。

2.Code Signing

每個證書(其實是公鑰)對應Key Pair中的私鑰會被用來對內容(executable code,resources such as images and nib files aren’t signed)進行數字簽名(CodeSign)——使用雜湊演算法生成內容摘要(digest)。

Xcode使用指定證書配套的私鑰進行簽名時需要授權,選擇【始終允許】後,以後使用該私鑰進行簽名便不會再彈出授權確認視窗。

3.Verify Code Signature with Certificate

上面已經提到,公鑰被包含在數字證書裡,數字證書又被包含在描述檔案(Provisioning File)中,描述檔案在應用被安裝的時候會被拷貝到iOS裝置中。

第一步,App在Mac/iOS真機上啟動時,需要對配置的bundle ID、entitlements和certificate與Provisioning Profile進行匹配校驗:

第二步,iOS/Mac真機上的ios_development.cer被AppleWWDRCA.cer中的 public key解密校驗合法後,獲取每個開發證書中可信任的公鑰對App的可靠性和完整性進行校驗。

iOS/Mac裝置(系統)使用App Provisioning Profile(Code Signing Identity)中的開發證書來判斷App的合法性:

  • 若用證書公鑰能成功解密出App(executable code)的內容摘要(Signature),證明此App確乃認證開發者釋出,即來源可信;
  • 再對App(executable code)本身使用雜湊演算法計算摘要,若與上一步得到的摘要一致,則證明此App(executable code)未被篡改過,即內容完整。

小結:

  • 基於Provisioning Profile校驗了CodeSign的一致性;
  • 基於Certificate校驗App的可靠性和完整性;
  • 啟動時,真機的device ID(UUID)必須在Provisioning Profile的ProvisionedDevices授權之列。

 

.在多臺機器上共享開發賬戶/證書

1.Xcode匯出開發者賬號(*.developerprofile)或PKCS12檔案(*.p12)

進入Xcode Preferences|Accounts:

  • 選中Apple IDs列表中對應Account的的Email,點選+-之後的☸|Export Accounts,可匯出包含account/code signing identity/provisioning profiles資訊的*.developerprofile(Exporting a Developer Profile)檔案供其他機器上的Xcode開發使用(Import該Account)。

選中右下列表中某行Account Name條目|ViewDetails,可以檢視Signing Identities和Provisioning Profiles。

  • 選中欲匯出的Signing Identity條目,點選欄底+之後的☸|Export,必須輸入密碼,並需授權export key "privateKey" from keychain,將匯出Certificates.p12

點選左下角的重新整理按鈕可從Member Center同步該賬號下所有的Provisioning Profile到本地。
選中右擊列表中某個Provisioning Profile可以【Show in Finder】到[~/Library/MobileDevice/Provisioning\ Profiles]目錄,其中Provisioning Profile的真實名稱為$(UUID).mobileprovision,名如"2488109f-ff65-442e-9774-fd50bd6bc827.mobileprovision",其中<key>Name</key>中為Xcode中看到的描述性別名。

2.Keychain Access匯出PKCS12檔案(*.p12)

在Keychain Access|Certificates中選中欲匯出的certificate或其下private key,右鍵Export或者通過選單File|Export Items匯出Certificates.p12——PKCS12 file holds the private key and certificate

其他Mac機器上雙擊Certificates.p12(如有密碼需輸入密碼)即可安裝該共享證書。有了共享證書之後,在開發者網站上將欲除錯的iOS設備註冊到該開發者賬號名下,並下載對應證書授權了iOS除錯裝置的Provisioning Profile檔案,方可在iOS真機裝置上開發除錯。

九.證書配置常見錯誤

1.no such provisioning profile was found

Xcode Target|Genera|Identity Team下提示"Your build settings specify a provisioning profile with the UUID "xxx",howerver, no such provisioning profile was found."

Xcode Target|BuildSettings|Code Signing|當前配置的指定UDID的provisioning profile在本地不存在,此時需要更改Provisioning Profile。必要時手動去網站下載或重新生成Provisioning Profile或直接在Xcode中Fix issue予以解決(可能自動生成iOS Team ProvisioningProfile)!

2.No identities from profile

Build Settings|CodeSigning的Provisioning Profile中選擇了本地安裝的provisioning profile之後,Code Signing Identity中下拉提示No identities from profile “…”or No identities from keychain.

Xcode配置指定UDID的provisioning profile中的DeveloperCertificates在本地KeyChain中不存在(No identities are available)或不一致(KeyPair中的Private Key丟失),此時需去網站檢查ProvisioningProfile中的App ID-Certificate-Device配置是否正確。如果是別人提供的共享賬號(*.developerprofile)或共享證書(*.p12),請確保匯出了對應Key Pair中的Private Key。必要時也直接在Xcode中Fix issue予以解決(可能自動生成iOS Team ProvisioningProfile)。

3.Code Signing Entitlements file do not match profile

"Invalid application-identifier Entitlement" or "Code Signing Entitlements file do not match those specified in your provisioning profile.(0xE8008016)."

(1)檢查對應版本(Debug)指定的*.entitlements檔案中的“Keychain Access Groups”鍵值是否與ProvisioningProfile中的Entitlements項相吻合(後者一般為前者的Prefix/Seed)。

(2)也可以將Build Settings|Code Signing的Provisioning Profile中對應版本(Debug)的Entitlements置空。

4.Xcode配置反應有時候不那麼及時,可重新整理、重置相關配置項開關(若有)或重啟Xcode試試。

 

 

參考:

 

iPhone真機除錯應用程式》《iOS Developer:真機測試

iOS Development--Certificates, Provisioning Profiles

關於Certificate、Provisioning Profile、App ID的介紹及其關係

 

數字簽名和數字證書》《iOS keyChain 研究

蘋果開發者賬號那些事兒》《iOS關於Provisioning Profiles這些事

iOS Code Signing 學習筆記》《程式碼簽名探析/Inside Code Signing

iOS Code Signing: 解惑/iOS Code Signing: Under The Hood

 

iOS行貨自動打包》《解決Xcode無法生成Archive的問題》《iOS釋出遇到的一些問題

Xcode打包ipa包》《iOS程式生成ipa進行真機測試