前阵子帮同事排查一个问题:打出来的 IPA 装到手机上一直提示"无法安装",Xcode 日志也没报明确错误。查了一圈发现是描述文件没有包含那台测试设备的 UDID。这类问题在 iOS 开发里很常见——证书没问题、代码没问题,但描述文件配置不对,应用就是跑不起来。

描述文件是做什么的

描述文件(Provisioning Profile)连接了开发者账号、应用和测试设备三者。它告诉系统:这个 App 是谁签的、能用哪些服务、可以在哪些设备上运行。每次打包时 Xcode 或打包工具会把描述文件和证书一起嵌入 IPA,设备安装时会校验这些信息。

描述文件分为两类:Development 类型用于开发调试,App Store 类型用于发布上架。开发描述文件需要绑定具体的测试设备 UDID,而发布描述文件不绑定设备——用户在 App Store 下载时不需要 UDID 校验。

用 AppUploader 创建描述文件

AppUploader 的主界面里有"描述文件管理"入口。点击"新建描述文件"后,需要填写三个核心信息:描述文件名称、类型和对应的 Bundle ID。

名称建议用项目名加类型做后缀方便区分,比如 MyApp_Dev。类型根据用途选 Development 或 App Store Development 类型需要勾选测试设备——工具可以自动读取当前连接电脑的 iOS 设备 UDID 并添加到列表。如果设备不在列表里,手动输入 UDID 添加也行。

Bundle ID 是 App 的唯一标识,一个描述文件只能绑定一个 Bundle ID。但如果多个 App 共用同一个证书,不需要为每个 App 重复生成证书——证书和应用之间是多对一的关系,描述文件才是一对一的。

创建完成后点击下载,生成 .mobileprovision 文件。在打包工具或 Xcode 里选择这个描述文件即可使用。

常见问题

如果新建描述文件时提示"证书为空",先确认证书管理里有没有对应类型的证书。Development 描述文件需要开发证书,App Store 描述文件需要发布证书。类型不匹配也会报同样的错。

如果设备无法安装 IPA,最常见的原因就是设备的 UDID 没有加到描述文件里。去描述文件管理更新设备列表,重新下载描述文件再打包一次就行。

管理建议

描述文件的有效期和证书绑定,证书过期后对应的描述文件也会失效。建议在证书快到期前重新生成证书和描述文件,避免线上打包时突然报错。多项目环境下可以用 AppUploader 统一管理所有描述文件,不用每次登录 Apple Developer Center 手动操作。