uni-app打包iOS前须严格核对4项证书:AppID须与App Store Connect的Bundle ID完全一致;profile文件必须为Distribution类型且匹配AppID;.p12私钥证书须同源导出并密码一致;图标须直角、无alpha、尺寸齐全(含1024×1024等)。
uni-app打包前必须核对的4个证书关键项
hbuilderx里点“发行 → 原生安装包 → ios”时,appid、profile文件、私钥证书(.p12)、私钥密码这四个字段不是填了就行,而是必须严格匹配苹果开发者后台的配置。常见错误是:用开发证书打正式包,或appid和你在app store connect里创建app时选的bundle id不一致——结果ipa上传后在构建版本里根本找不到,审核流程卡死。
-
AppID必须和App Store Connect中该App的Bundle ID完全一致(比如com.example.myapp),不能多空格、不能大小写混用 -
profile文件必须是Distribution类型,且包含你选的AppID,不能是Ad Hoc或Development -
.p12文件必须由同一台Mac导出,且密码要和HBuilderX里填的一致;Windows用户用Appuploader生成.p12时,务必勾选“导出为用于发布”选项 - 图标必须是直角、无alpha通道、尺寸齐全(1024×1024主图标 + 各尺寸App Icon),否则Xcode归档或App Store Connect上传会静默失败
上传ipa别碰Xcode,直接用Appuploader或香蕉云编
苹果官方要求ipa必须通过App Store Connect上传,但Xcode只支持macOS,而且大体积ipa(尤其含音视频资源的uni-app)常在“Distribute App → Upload”阶段卡住或报ERROR ITMS-90161。实测Windows/Linux用户用Appuploader或香蕉云编更稳,它们本质是调用苹果Transporter服务,绕过Xcode UI层。
- 上传前先登录App Store Connect确认App已创建,且状态为“准备提交”
- 工具会要求输入苹果开发者账号 +
专用密码(App-Specific Password),不是Apple ID登录密码;没设置的话,必须去appleid.apple.com → 安全 → “生成专用密码” - 上传成功后不会立刻出现在构建版本列表,等15–30分钟,刷新页面看到蓝色
+才代表可用 - 若上传后始终不出现,检查邮件:苹果会发
Invalid Binary通知,大概率是证书/描述文件不匹配或图标含透明像素
截图不用真机,但必须按苹果尺寸规则合成
App Store Connect强制要求上传5.5英寸(iPhone 8)、6.5英寸(iPhone 14 Pro Max)、7.9英寸(iPad mini)、9.7英寸(iPad Air)、12.9英寸(iPad Pro)共5组设备的截图,每组至少2张,且第一张必须是启动页。没这么多真机?没问题,但P图不能随便拉伸——苹果会校验图片DPI和宽高比。
- 推荐用
香蕉云编的截图生成器(https://www.php.cn/link/890e8cebfa390cee4536728b4149d70b)或Appuploader内置截图工具,它们自动套用标准边框+阴影+设备轮廓 - 所有截图必须是PNG格式、RGB色彩、无透明背景、分辨率精确(如6.5英寸截图必须是1242×2688或2778×1284)
- uni-app项目可在HBuilderX里运行到iOS模拟器(需Mac),用Xcode Devices窗口截原生尺寸图;但注意:模拟器截的图默认带状态栏,需裁掉或用工具自动去除
提审前最后三步检查清单
很多uni-app应用卡在“等待审核”变“元数据被拒绝”,其实问题不出在代码,而在资料填写。苹果现在对隐私、功能描述、截图一致性查得极严。
-
隐私政策URL必须可公开访问、HTTPS、内容含明确数据收集说明(uni-app项目记得在manifest.json → App SDK配置 → 隐私协议地址里填好) -
关键词别堆砌,3个以内精准词(如记账、预算、理财),和App实际功能强相关,否则触发“误导性关键词”拒审 -
构建版本选中后,滚动到最底部点“保存”,再点“提交审核”——漏点“保存”会导致提交按钮灰掉,且无提示
苹果现在对uni-app类H5壳应用特别敏感,如果你的App首页就是web-view加载H5,又没明显原生交互(如蓝牙、定位、本地数据库),大概率收到4.3 Design: Spam驳回。真要这么做,至少加一个原生启动页、离线缓存逻辑、或调一次uni.getSystemInfoSync()证明在用原生API。










