欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。
根据你的描述和提供的 ios-extension.json 配置,问题很可能出在 Bundle Identifier 的命名规则或描述文件(Provisioning Profile)的匹配上。你提到直接用 Xcode 原生运行是正常的,这通常说明 Extension 本身的代码和配置没有问题,但在 uni-app x 的云端打包环境中,有几个关键的坑需要特别注意。
以下是针对你问题的排查思路和解决方案:
1. 检查 Bundle Identifier 的命名规则
这是最容易出错的地方。根据文档要求,iOS Extension 的 identifier 必须嵌套在主应用的 Bundle ID 之下。
例如,如果你的主应用(uni-app x 项目)的 Bundle ID 是 com.example.myapp,那么你的 Extension 的 Bundle ID 必须是 com.example.myapp.xxx 这种格式。
你提供的配置是:
"identifier": "io.dcloud.LYScanUniPlugin.widget"
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
你需要确认你的主应用 Bundle ID 是不是 io.dcloud.LYScanUniPlugin。如果不是,或者这个层级关系不成立,云端打包时签名就会失败,导致 Extension 无法生效。
解决方案:
将 identifier 的值改为符合嵌套规则的格式。假设你的主应用 Bundle ID 是 com.yourcompany.yourapp,那么 Extension 的 Bundle ID 应该配置为:
"identifier": "com.yourcompany.yourapp.widget"
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
2. 确认描述文件(.mobileprovision)的正确性
你配置的描述文件是 ios-widget-dev.mobileprovision。需要注意的是:
- 开发环境 vs. 发布环境:如果你打的是自定义基座,那么通常需要使用开发(Development)类型的描述文件。请确认
ios-widget-dev.mobileprovision 是否是一个包含了你的 Extension Bundle ID 的有效开发描述文件。
- 设备注册:自定义基座需要将测试设备的 UDID 注册到这个开发描述文件里,否则安装后也无法运行。
- 路径问题:确认
ios-widget-dev.mobileprovision 文件确实放在了 nativeResources/ios/ 目录下,与 ios-extension.json 同级。
3. 验证 .appex 文件
你提到用 Xcode 运行原生代码是正常的。请按以下步骤重新提取 .appex 文件,确保它的完整性:
- 用 Xcode 打开你的原生工程,选择
Any iOS Device 作为目标。
- 通过菜单 Product -> Archive 进行归档。
- 在 Organizer 窗口中,选中刚生成的 Archive,点击 Distribute App,然后选择 Development 或 Ad Hoc 导出(具体取决于你的描述文件类型)。
- 导出后会得到一个
.ipa 文件。将 .ipa 后缀改为 .zip 并解压。
- 进入
Payload/YourApp.app/PlugIns/ 目录,这里的 .appex 文件才是你需要放到 uts 插件 app-ios/Plugins/ 目录下的正确文件。
4. 最终配置检查清单
请再次核对你的项目结构和配置:
- uts 插件目录:
app-ios/Plugins/WidgetTestExtension.appex(文件已放置正确)。
- uni-app x 项目目录:
nativeResources/
└── ios/
├── ios-extension.json
└── ios-widget-dev.mobileprovision
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
- ios-extension.json 内容(修正后的示例):
{
"WidgetTestExtension.appex": {
"identifier": "com.yourcompany.yourapp.widget", // 修改为嵌套于主应用Bundle ID下的ID
"profile": "ios-widget-dev.mobileprovision",
"plists": {},
"entitlements": {}
}
}
本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码
完成以上修改后,务必删除手机上的旧 App,重新提交云端打包制作自定义基座,再次运行测试。
如果问题依旧,建议检查 HBuilderX 的控制台日志,看是否有关于 Extension 签名或嵌入失败的具体报错。