manifest.json中iOS离线打包必需字段为:bundleIdentifier、mobileprovision、codeSignIdentity、teamID,且根级appid须与control.xml及资源目录名严格一致,缺一或不匹配将导致白屏、闪退或签名失败。

manifest.json 里 ios 节点必须填对哪些字段
离线打包失败的第一大原因是 manifest.json 中 iOS 配置缺失或错位。Xcode 工程不会自动读取 appid 或 bundleId,必须显式声明。
关键字段在 "ios" 对象下,缺一不可:
-
"bundleIdentifier":必须和 Apple Developer 中注册的 App ID 完全一致(如com.example.myapp),不能带空格或非法字符 -
"mobileprovision":指向本地 .mobileprovision 文件路径,建议用相对路径(如./unpackage/res/ios/MyApp.mobileprovision) -
"codeSignIdentity":开发阶段填iPhone Developer: Your Name (XXXXXX),发布阶段换为iPhone Distribution: Company Name (YYYYYY) -
"teamID":从证书详情里复制 10 位字母数字组合(不是 Team Name),Xcode 15+ 强制要求,漏填会签名失败
注意:"appid" 字段在根级(非 ios 下)也要存在,且值必须和 control.xml、Pandora/apps/xxx 目录名三者完全一致,否则运行时白屏。
Xcode 工程里 control.xml 和资源目录怎么对齐
常见白屏、启动崩溃,90% 是因为 control.xml、资源目录名、manifest.json 的 appid 不统一。这不是可选步骤,是硬性校验逻辑。
操作顺序必须是:
- 先在 HBuilderX 中「发行 → 原生App-本地打包」,生成资源到
unpackage/resources/,目录名形如__UNI__A1B2C3D - 把这个目录完整拷贝进离线 SDK 的
Pandora/apps/下,目录名不能改 - 打开
Pandora/apps/__UNI__A1B2C3D/control.xml,确认内容和manifest.json根级"appid"一模一样 - 再打开
HBuilder-Hello-Info.plist,检查dcloud_appkey是否已填入开发者中心申请的真实 key
只要三处 appid 有一处不一致,App 启动后立即黑屏或闪退,控制台无明确报错,极难排查。
Info.plist 权限描述和 IDFA 配置容易被忽略
iOS 14.5 后,只要工程里引用了任何可能读取 IDFA 的 SDK(比如优量汇、穿山甲、友盟、百度地图等),就必须主动配置权限描述,否则 App Store 审核直接拒收。
两项必须手动加到 Info.plist:
-
NSUserTrackingUsageDescription:字符串值,例如"我们需要获取您的广告标识符(IDFA),以便提供更相关的广告内容。" -
UIBackgroundModes:如果用了蓝牙、定位后台等,需添加对应数组项(如bluetooth-central、location)
另外,CFBundleDisplayName 建议直接写在 Info.plist 里,而不是依赖 InfoPlist.strings —— 后者优先级更高但容易因多语言切换导致名称异常,删掉它反而更稳。
Build 之前必须 Clean Build Folder
Xcode 缓存机制会导致旧签名、旧资源残留,尤其在反复切换 Debug/Release、更换描述文件后,大概率出现 CodeSign error: No identities were found 或 Provisioning profile doesn't include signing certificate。
每次修改证书、mobileprovision、Bundle ID 后,务必执行:
- 菜单栏
Product → Clean Build Folder(快捷键Shift + Cmd + K) - 再
Product → Build(Cmd + B) - 最后才
Archive或真机运行
跳过 Clean 步骤,Xcode 可能复用上一次成功的签名缓存,导致新配置不生效,调试时表现“明明改了却没用”。











