關(guān)于 iOS 中 Provisioning Profile 的一些小問題

Autumn Leaves

在 iOS 打包發(fā)布的時(shí)候遇到了一些問題,所以稍微研究了下 iOS 打包時(shí)涉及到的一些概念以及打包安裝流程,希望能加深下印象。

What's Provisioning Profiles?

類似于安卓應(yīng)用必須經(jīng)過簽名才可以安裝到手機(jī)上,同樣的,在 iOS 設(shè)備上,只有經(jīng)過 Apple 認(rèn)證的應(yīng)用才能被安裝。在開發(fā) iOS 應(yīng)用時(shí),我們難免需要使用真機(jī)測試,為了使測試版應(yīng)用可以在真機(jī)上安裝,我們就需要使用 Provisioning Profiles。

那么,什么是 Provisioning Profiles ?

官方是這么解釋的:

A provisioning profile is a collection of digital entities that uniquely ties developers and devices to an authorized iPhone Development Team and enables a device to be used for testing. A Development Provisioning Profile must be installed on each device on which you wish to run your application code. Each Development Provisioning Profile will contain a set of iPhone Development Certificates, Unique Device Identifiers and an App ID. Devices specified within the provisioning profile can be used for testing only by those individuals whose iPhone Development Certificates are included in the profile. A single device can contain multiple provisioning profiles.

首先,我們需要有一個(gè)開發(fā)者賬號(hào),這個(gè)賬號(hào)是可以被整個(gè)開發(fā)團(tuán)隊(duì)(也就是 iPhone Development Team)共享的。通過 Apple 認(rèn)證后,這個(gè)開發(fā)者賬號(hào)就可以通過添加 Provisioning Profiles 來關(guān)聯(lián)測試設(shè)備了。也就是說 Provisioning Profiles 起到了一個(gè)橋梁的作用,它會(huì)對(duì)應(yīng)用進(jìn)行驗(yàn)證,決定應(yīng)用能否被安裝到設(shè)備上。另外,只有 Provisioning Profiles 安裝到測試設(shè)備上之后我們的測試應(yīng)用才能安裝成功,一臺(tái)測試設(shè)備可以有多個(gè) Provisioning Profiles。

Provisioning Profiles 中包含以下三部分內(nèi)容:

  • iPhone Development Certificates: 開發(fā)者證書,用于應(yīng)用簽名。
  • Unique Device Identifiers: 包含一個(gè)設(shè)備列表,用于確認(rèn)應(yīng)用可在哪些設(shè)備上運(yùn)行。
  • App ID: 應(yīng)用 ID,對(duì)應(yīng)于 xCode 項(xiàng)目中的 bundle identifier。
一張圖看懂 Provisioning Profile

How to use it?

了解了 Provisioning Profiles 之后,我們就可以學(xué)著如何使用它了。

首先,我們需要登入開發(fā)者賬戶,然后進(jìn)入 Certificates, Identifiers & Profiles,接下來我們就可以在這里添加 Provisioning Profiles 了。

Certificates, Identifiers & Profiles

除此之外,從上面的截圖中可以看出,我們還可以在這里添加:

  • Certificates,即 Provisioning Profiles 中的 iPhone Development Certificates,該證書包含一對(duì)公鑰和私鑰,并且會(huì)被添加到你的 Keychain 中,可以通過 Mac 上自帶的 Keychain Access 查看到(login -> My Certificates)
  • Keys,與證書相似,通過 Key 我們可以配置、認(rèn)證并使用 Apple 的服務(wù)。相比證書的優(yōu)點(diǎn)是不會(huì)過期,而且在創(chuàng)建后可以修改所使用的 Apple 服務(wù)的種類及數(shù)量。
  • Identifiers,創(chuàng)建各種 ID 的地方,包括上面 Provisioning Profiles 中的 App ID 也是在這里創(chuàng)建的。
  • Devices,測試設(shè)備列表,對(duì)應(yīng)于 Provisioning Profiles 中的 Unique Device Identifiers

在創(chuàng)建證書的時(shí)候我們還需要使用到 CSR (Certificate Signing Request),即證書簽名請(qǐng)求文件。它里面包含了一串加密文字信息,當(dāng)申請(qǐng)證書的時(shí)候我們需要將這個(gè)文件遞交給認(rèn)證機(jī)構(gòu)(Apple)。

這里提供一個(gè)創(chuàng)建并配置 CSR、證書及 Provision Profile 等文件的詳細(xì)文檔,來自友盟,這里不得不佩服友盟的文檔寫的是真好。

How does it work?

熟悉了以上幾個(gè)概念后,我們就可以試著理解應(yīng)用打包安裝過程了。

Signing Config

首先看下上面這張截圖,在 Signing 時(shí)需要提供 Provisioning Profile,我們?cè)谔砑油?Provisioning Profile 后就可以把它下載下來,并且導(dǎo)入到 xCode 就行了。

可以看到我這里分別在 Debug 和 Release 的 Signing 中使用了不同的 Provisioning Profile,其實(shí)他們唯一的區(qū)別是,Release 版可以上傳到 App Store 經(jīng)過 Apple 的審核并簽名后被安裝到任何 iOS 設(shè)備上,而 Debug 版只能被安裝到該 Provisioning Profile 綁定了的設(shè)備上。

Privisioning Profile Info

如上圖,在配置了 Provisioning Profile 之后,xCode 首先會(huì)對(duì)一些基本信息進(jìn)行驗(yàn)證,如果有不匹配的項(xiàng)會(huì)提示錯(cuò)誤信息。

以 Debug 版為例,在打包安裝會(huì)經(jīng)歷以下過程:

  • 首先,Provisioning Profile 會(huì)到 Keychain 中尋找匹配的 Certificate,即 Signing 中的 Signing Certificate
  • xCode 使用該 Certificate 對(duì) app 進(jìn)行簽名
  • 在安裝時(shí),首先會(huì)對(duì)設(shè)備的 UUID 和 Provisioning Profile 中的設(shè)備列表的 ID 進(jìn)行匹配,匹配成功才會(huì)被安裝,同時(shí)所需的 Entitlements 等信息也要與 AppID 中配置的一致
  • Keychain 中的私鑰會(huì)用于和 Certificate 中的公鑰進(jìn)行驗(yàn)證(私鑰如果丟失那么該 Certificate 也將失效,需要重新創(chuàng)建,建議導(dǎo)出私鑰 .p12 文件并備份)

在打包安裝的過程中,只有所有信息都驗(yàn)證通過后,應(yīng)用才能安裝成功并被啟動(dòng)。對(duì)于發(fā)布版而言,如果想要安裝到真機(jī)上則必須使用類型為 Ad Hoc 的 Provisioning Profile 才可以。


參考
  1. What is a provisioning profile & code signing in iOS?
  2. What is app signing?
  3. Working with entitlements in Xamarin.iOS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容