iOS打包——从入门到放弃(一)

2022-12-05 15:59:13 浏览数 (2)

——iOS签名那点儿破事儿

背景

首先来点context——为什么会有「签名」。

1970年代,在Unix上运行program/软件,不需要额外获取权限访问系统的硬件、数据(因为程序是自己写的——你应该不会给自己电脑「下毒」)。

后来,第三方软件出现,出于安全原因,需要对第三方软件的权限做出限制(请求同意后才能获取权限)——你应该不想出现这种情况:别人开发的软件,在不经你同意的情况下,读取了你D盘「Cooking」文件夹里面《第一次做鸭的经历》这个文件——虽然你鸭做得真的很好。

所以,为了解决上面这个问题,Apple的工程师,想到的解决方案是App Sandbox——就是把第三方软件框在一个盒子里,想要用你的硬件(摄像头、麦克风),或者访问你的数据,都要经过你的同意。

这个看这张图:

App Sandbox

「RW APP」就表示第三方软件,黄色区域就是Sanbox,左边就是你电脑的一些资源——第三方软件在经过你同意后,才能访问。

而今天讨论的「签名」,就隐藏在右边的「Provisioning Profile」,这个术语,这里就不作翻译了,后面会介绍定义。

术语

这里涉及几个术语:App IDEntitlementCertificateProvisioning Profile

先看一张图:

Term

App ID

是你的App在苹果平台上的唯一识别码。并通过这个App ID,和你的开发团队绑定在一起。(App IDBundle IDIdentifier,可以当作是同一样东西)

如图所述,它回答的问题是:Who are you?

Entitlement

Xcode中点击Capability 按钮,会增加一个entitlements后缀的文件。 (这里的EntitlementCapabilityCapabilities,可以简单看做是同一样东西)

也可以看作是「permission」的同义词。

这些文件,描述了你的App要访问哪些系统资源。如图所示,就是「你想干嘛」—— What do you want to do?

注意,在操作层面,Entitlement是App ID的一部分,因为在苹果开发者网站中,你想修改Entitlement,就是去到修改Identifier的地方:

Entitlement

另外,如果修改了这里的Entitlement,就需要重新生成「Provisioning Profile」去打包。

Certificate

我们常说的「证书」,用于确认开发者的身份。回答问题:Can I trust you?

常用的是两种类型:

  • Development:你用Xcode跑App到真机,用的就是这个「开发证书」。因为开发者很多,所以可以有很多的「Development Certificate」
  • Distribution:打包上传到App Store,用的就是这个「打包证书」。有一定权限才能生成、使用这个证书,所以不是每个开发者都能打包App。

证书有1年的有效期,过期了,「Provisioning Profile」也就用不了了。

Provisioning Profile

「 Provisioning Profile」将上述的3样东西,整合在一起,让你可以打包你的App。

注意,如果是用Ad Hoc这种发布方式,Provisioning Profile里面还会包含一个额外的Device List——哪些设备能安装这个App。

Ad Hoc是Apple提供的一种内部分发方式,主要是方便小规模的(内部)测试。

除了发布到App Store,苹果还提供了以下5种非公开的「内部」分发方式:

  • Personal Team distribution:就是你自己用Xcode安装App到真机
  • Ad hoc distribution:只能装100台机器,而且「Provisioning Profile」要包含一个能安装App的设备列表——换言之,你需要在打包前取得所有安装手机的UDID。
  • TestFlight:内部100,外部1万——更强大的分发、测试App的方式
  • In-house distribution:大企业的内部分发
  • Custom App Distribution:后出的非公开分发方式,和TestFlight,App Store Connect整合,推荐大企业使用。

(签名)打包

下面演示两种分发方式:「App Store发布」和「Ad Hoc发布」

App Store发布

一些额外的术语

  • CSR(Certificate Signing Request):
    • 用Mac的Keychain Access这个软件,生成的「.certSigningRequest」文件
    • 里面包含了「公钥」、「私钥」、「证书/Certificate」
    • 上传到苹果开发者网站,让苹果「签名」,就会得到一个.cert文件。这样就能确认你的身份了(下载后双击安装)

App Store Release

黑框部分,是「发布证书」的生成,解决的是上述的「Can I trust you」这个问题。

黄框部分的Entitlement,解决的是上述「What do you want to do」这个问题。

红框部分,就是将「发布证书」、「App ID」(提前创建好的)、「Entitlement」这3个东西整合在一起,生成「App Store」类型的「Provisioning Profile」

蓝框部分:打包、上传了——利用Xcode得Archive & Upload

Ad Hoc发布

Ad Hoc Release

粉色框部分:因为Ad Hoc只能分发到特定手机,所以要到开发者王长,注册要安装App的手机(需要拿到手机的UDID)

黑框部分,是「发布证书」,因为上面「App Store发布」的时候,已经创建过「发布证书」了,这里可以用同样的「发布证书」,无需再重复创建。

红框部分,就是将「发布证书」、「App ID」(提前创建好的)、「Entitlement」、「Device List」这4个东西整合在一起,生成「Ad Hoc」类型的「Provisioning Profile」(和「App Store」类型会有些许差异)

蓝框部分:打包、导出ipa文件——利用Xcode得Archive & Upload。然后ipa文件,可以手动安装到手机,也可以上传到第三方平台(DeployGate, 蒲公英 etc),进行「无线安装」。或者自建服务器也可以。

毕。

下回预告:《Build Settings的那些破事儿》

0 人点赞