关于 iOS 中 Provisioning Profile 的一些小问题

Autumn Leaves

在 iOS 打包发布的时候遇到了一些问题,所以稍微研究了下 iOS 打包时涉及到的一些概念以及打包安装流程,希望能加深下印象。

What's Provisioning Profiles?

类似于安卓应用必须经过签名才可以安装到手机上,同样的,在 iOS 设备上,只有经过 Apple 认证的应用才能被安装。在开发 iOS 应用时,我们难免需要使用真机测试,为了使测试版应用可以在真机上安装,我们就需要使用 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.

首先,我们需要有一个开发者账号,这个账号是可以被整个开发团队(也就是 iPhone Development Team)共享的。通过 Apple 认证后,这个开发者账号就可以通过添加 Provisioning Profiles 来关联测试设备了。也就是说 Provisioning Profiles 起到了一个桥梁的作用,它会对应用进行验证,决定应用能否被安装到设备上。另外,只有 Provisioning Profiles 安装到测试设备上之后我们的测试应用才能安装成功,一台测试设备可以有多个 Provisioning Profiles

Provisioning Profiles 中包含以下三部分内容:

  • iPhone Development Certificates: 开发者证书,用于应用签名。
  • Unique Device Identifiers: 包含一个设备列表,用于确认应用可在哪些设备上运行。
  • App ID: 应用 ID,对应于 xCode 项目中的 bundle identifier
一张图看懂 Provisioning Profile

How to use it?

了解了 Provisioning Profiles 之后,我们就可以学着如何使用它了。

首先,我们需要登入开发者账户,然后进入 Certificates, Identifiers & Profiles,接下来我们就可以在这里添加 Provisioning Profiles 了。

Certificates, Identifiers & Profiles

除此之外,从上面的截图中可以看出,我们还可以在这里添加:

  • Certificates,即 Provisioning Profiles 中的 iPhone Development Certificates,该证书包含一对公钥和私钥,并且会被添加到你的 Keychain 中,可以通过 Mac 上自带的 Keychain Access 查看到(login -> My Certificates)
  • Keys,与证书相似,通过 Key 我们可以配置、认证并使用 Apple 的服务。相比证书的优点是不会过期,而且在创建后可以修改所使用的 Apple 服务的种类及数量。
  • Identifiers,创建各种 ID 的地方,包括上面 Provisioning Profiles 中的 App ID 也是在这里创建的。
  • Devices,测试设备列表,对应于 Provisioning Profiles 中的 Unique Device Identifiers

在创建证书的时候我们还需要使用到 CSR (Certificate Signing Request),即证书签名请求文件。它里面包含了一串加密文字信息,当申请证书的时候我们需要将这个文件递交给认证机构(Apple)。

这里提供一个创建并配置 CSR、证书及 Provision Profile 等文件的详细文档,来自友盟,这里不得不佩服友盟的文档写的是真好。

How does it work?

熟悉了以上几个概念后,我们就可以试着理解应用打包安装过程了。

Signing Config

首先看下上面这张截图,在 Signing 时需要提供 Provisioning Profile,我们在添加完 Provisioning Profile 后就可以把它下载下来,并且导入到 xCode 就行了。

可以看到我这里分别在 Debug 和 Release 的 Signing 中使用了不同的 Provisioning Profile,其实他们唯一的区别是,Release 版可以上传到 App Store 经过 Apple 的审核并签名后被安装到任何 iOS 设备上,而 Debug 版只能被安装到该 Provisioning Profile 绑定了的设备上。

Privisioning Profile Info

如上图,在配置了 Provisioning Profile 之后,xCode 首先会对一些基本信息进行验证,如果有不匹配的项会提示错误信息。

以 Debug 版为例,在打包安装会经历以下过程:

  • 首先,Provisioning Profile 会到 Keychain 中寻找匹配的 Certificate,即 Signing 中的 Signing Certificate
  • xCode 使用该 Certificate 对 app 进行签名
  • 在安装时,首先会对设备的 UUID 和 Provisioning Profile 中的设备列表的 ID 进行匹配,匹配成功才会被安装,同时所需的 Entitlements 等信息也要与 AppID 中配置的一致
  • Keychain 中的私钥会用于和 Certificate 中的公钥进行验证(私钥如果丢失那么该 Certificate 也将失效,需要重新创建,建议导出私钥 .p12 文件并备份)

在打包安装的过程中,只有所有信息都验证通过后,应用才能安装成功并被启动。对于发布版而言,如果想要安装到真机上则必须使用类型为 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容