.mobileprovision 文件必须与 App ID、证书严格匹配,否则打包报错;其核心是绑定 App ID、.cer 证书及设备列表,三者任一不一致均导致签名失败。

描述文件(.mobileprovision)必须匹配 App ID 和证书
描述文件不是独立存在的,它本质是一张“许可单”,里面硬编码了三件事:你用的哪个 App ID、哪个 .cer 证书、允许安装到哪些设备(或是否上架)。只要其中任意一项不一致,HBuilderX 打包时就会报错,比如 Code signing error: No matching provisioning profile found 或 Failed to verify code signature。
常见踩坑点:
- 在
Identifiers中创建的App ID(即 Bundle ID)和 HBuilderX 里manifest.json的"id"字段必须完全一致(大小写、点号、前后空格都不能差) - 生成描述文件时选错了证书类型:开发环境要用
iOS App Development证书,生产环境必须用Apple Distribution证书;推送证书(Apple Push Notification service SSL)不能用于签名 App,只能用于后端调用 APNs - Ad Hoc 测试描述文件必须勾选已注册的设备 UDID,否则安装时提示“无法验证开发者”
P12 证书必须包含私钥且密码不能为空(除非明确留空)
.p12 文件是私钥 + 公钥证书的打包容器,HBuilderX 云打包时靠它完成代码签名。Mac 上从钥匙串导出时,系统会强制要求设密码;Windows 用户用工具(如香蕉云编、iOSUploader)生成时,密码字段可留空,但 HBuilderX 里填密码处必须保持一致——如果导出时没设密码,就别填;如果设了,就必须填对,否则报 Invalid password for p12 file。
关键细节:
- Mac 导出:
.cer双击进钥匙串 → 找到对应证书(带小箭头展开能看到私钥)→ 右键 → “导出” → 选.p12格式 → 输入密码(建议记下来) - Windows 用户不要手动改
.cer后缀名成.p12,那是无效的;必须用工具把.cer和原始私钥(ios_dev.key)一起合成.p12 - 一个
.p12文件只绑定一个证书(开发/分发二选一),不能混用;调试用开发证书,上架必须用分发证书
UniApp 打包时证书和描述文件必须成对使用
HBuilderX 的 iOS 云打包界面要求同时上传 .p12 和 .mobileprovision,这两者不是随便配对的。它们的内部签名信息必须指向同一个 App ID 和同一个证书主题(Subject),否则打包直接失败,错误信息常为 Profile doesn't match the certificate。
验证方法很简单:
- 用文本编辑器打开
.mobileprovision文件(它是 XML 格式),搜索Entitlements下的application-identifier,确认值和你的App ID一致 - 再搜
DeveloperCertificate段,Base64 解码后比对证书指纹,应与你导出的.p12里包含的.cer完全一致 - 开发环境下用
iOS App Development描述文件 + 对应开发.p12;App Store 提交则必须用App Store类型描述文件 +Apple Distribution.p12
推送功能启用后,描述文件必须开启 Push Notifications 能力
哪怕你只是想跑通 token 获取流程,也得在 Identifiers 里编辑你的 App ID,勾选 Push Notifications 并保存。否则即使证书和描述文件都正确,真机运行时 uni.getProvider 返回的 push 服务始终为 undefined,调用 uni.getPushClientId 也会静默失败。
注意:
- 勾选后必须重新生成并下载新的描述文件,旧的不会自动更新
- 开发和生产两套描述文件都要单独开启,不能复用
- 不需要勾选
Broadcast Capability,那是用于后台广播扩展,和 APNs 无关


















