關於開發證書配置(Certificates & Identifiers & Provisioning Profiles),相信作iOS開發的同窗沒少被折騰。對於一個iOS開發小白、半吊子(好比像我本身)抑或老兵,或多或少會有或曾有過如下不詳、疑問、疑惑甚至困惑:html
- 什麼是App ID?Explicit/Wildcard App ID有何區別?什麼是App Group ID?
- 什麼是證書(Certificate)?如何申請?有啥用?
- 什麼是Key Pair(公鑰/私鑰)?有啥用?與證書有何關聯?
- 什麼是簽名(Signature)?如何簽名(CodeSign)?怎樣校驗(Verify)?
- 什麼是(Team)Provisioning Profiles?有啥用?
- Xcode如何配置才能使用iOS真機進行開發調試?
- 多臺機器如何共享開發者帳號或證書?
- 遇到證書配置問題怎麼辦?
- Xcode 7免證書調試真機調試
本文將圍繞相關概念作個系統的梳理串燒。ios
從 Xcode 7 開始支持普通 Apple 帳號進行寫在前面git
1.假設你使用過Apple設備(iMac/iPad/iPhone)且註冊過Apple ID(Apple Account)。github
2.假設你或你所在的開發組已加入蘋果開發者計劃(Enroll in iOS Developer Program to become a member),即已註冊開發者帳號(Apple Developer Account)。web
- 只有擁有開發者帳號,才能夠申請開發/發佈證書及相關配置受權文件,進而在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。xcode
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.),分爲兩類:app
- 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開發者帳號都對應一個惟一的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命名必須符合規範:
- 置於同一App Group下的App IDs必須是惟一的(Explicit,not Wildcard)
- 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試試。
十. Xcode7 免證書真機調試
在 Xcode 7 中,蘋果改變了本身在許可權限上的策略:
- 此前 Xcode 只開放給註冊開發者下載,如今 Xcode 7 改變了這種慣有的作法,無需註冊開發者帳號,僅使用普通的Apple ID就能下載和上手體驗。
- 此前開發者需每一年支付99美圓的費用成爲註冊開發者才能在 iPhone/iPad 真機上運行調試APP,蘋果新的開發者計劃則放寬要求,無需購買,只要你感興趣一樣能夠在設備上測試app。——Developers would be able to test apps on devices without a paid Apple developer account in Xcode 7.
所謂「免證書」真機調試,並非真的不須要證書,Xcode真機調試原有的證書配置體系仍在——All iOS, tvOS, and watchOS apps must be code signed and provisioned to launch on a device. 因此,上文囉嗦幾千字仍是有點用的。
自 Xcode7 開始,原來基於付費開發者帳號及自助生成證書及配置文件的繁瑣過程被蘋果簡化,Xcode將針對任何普通帳號自動爲聯調真機生成所需相關的證書及配置文件。當你打算向 App Store 提交發布應用,才須要付費。
第一步:進入 Xcode Preferences|Accounts,添加本身的 Apple ID 帳號。
第二步:Build Settings|Code Signing 下的 Provisioning Profile 選擇
第三步:General 配置 Bundle identifier,Team 下拉選擇蘋果Member Center自動爲你的帳號生成的 Bundle identifier 爲他人帳號註冊的 APP ID(例如蘋果相機應用 com.apple.camera),會報錯:
No provisioning profiles with a valid signing identity (i.e. certificate and private key pair) matching the bundle identifier 「com.apple.camera」 were found.
即便編譯經過了,可能運行時APP自身與服務器校驗也可能會報簽名錯誤,腫麼辦???
Her skill:此時,能夠在他人原有App ID基礎上添加後綴(例如 com.apple.camera.應用的衍生插件(至關於置於同一 App Group 下)就能夠快樂的玩耍了。
若是啓動APP時,Xcode報錯「process launch failed: Security」或iPhone報錯【不受信任的開發者】,此時須要到iPhone通用配置中的描述文件(最新系統中可能叫設備管理)中,在描述文件(開發商應用)中選擇對應的描述文件(你的Apple ID)點擊 信任 或 驗證 便可。
OK,All Done!