环境
- HBuilderX:5.26.2026091802 正式版
- 开发机:macOS 27.0(26A428),Apple Silicon arm64
- 项目:uni-app x,Vue 3,Vapor 模式
- 运行环境:iOS 18.6 模拟器,iPhone17,4,x86_64 自定义基座
- 打包方式:云端自定义基座
问题现象
在完整自定义基座中调用 uni.request 后,success、fail、complete 均不回调;请求前注册的看门狗 setTimeout 也不再执行,页面表现为按钮一直处于加载状态。
最小代码
以下 URL 请替换为任意已确认可访问、返回 JSON 的 HTTPS 地址:
console.log('[probe] before request')
setTimeout(() => {
console.log('[probe] watchdog fired')
}, 8000)
uni.request({
url: 'https://<可访问的 JSON HTTPS 接口>',
method: 'GET',
timeout: 6000,
success: (res) => {
console.log('[probe] success', res.statusCode)
},
fail: (err) => {
console.log('[probe] fail', err.errMsg)
},
complete: () => {
console.log('[probe] complete')
}
})
复现步骤
- 使用 HBuilderX 5.26.2026091802 正式版创建或打开 uni-app x Vapor 项目。
- 云端生成包含网络模块的 iOS x86_64 模拟器自定义基座。
- 在 iOS 18.6 模拟器中运行,并在按钮事件中执行上述代码。
- 观察请求回调及 8 秒看门狗日志。
实际结果
uni.request 不触发 success、fail、complete,看门狗 setTimeout 也不执行,页面永久停留在加载状态。
预期结果
请求成功时触发 success 和 complete;失败或超时时触发 fail 和 complete。无论网络结果如何,JS 事件循环及定时器应继续运行。
已排除项目
- 同一个 URL 和请求参数改用 UTS 混编的 Swift
URLSession后,可立即获得 HTTP 200,并正常回调到 UTS 主线程。 - 后端接口可从 macOS 原生
URLSession正常访问。 - UTS 编译、App 资源发行、自定义基座安装均成功,没有编译错误。
- Android 路径继续使用
uni.request,目前没有观察到相同行为。
初步判断与临时方案
疑似 iOS x86_64 自定义基座内 uni-network / uni.request 到原生层的桥接阻塞。当前使用 iOS 专用 Swift URLSession 作为绕过方案,希望官方确认是否为 5.26 iOS 模拟器基座问题。
1 个回复
Ask小助手 - Ask社区AI助手
关于 HBuilderX 5.26 iOS 18.6 模拟器 uni.request 无回调问题的分析
初步判断
根据您提供的信息,这个问题已经具备较好的排查基础。您提到"阻塞 JS 线程",根据 ISSUE 系统 #19575 中官方人员的解释,
uni.request在请求完成后会自动将回调 post 到调用线程执行(模拟单线程环境),如果在主线程中使用了阻塞 API(如CountDownLatch.await()),会导致死锁。但您的情况是没有主动阻塞也会出现无回调,这更可能是模拟器环境本身的问题。
关键参考:x86_64 模拟器兼容性
根据 DCloud问答 #182893 中官方人员的回复:
虽然该案例针对 Android,但 iOS 模拟器同样存在 CPU 架构差异问题。您的配置是:
在 Apple Silicon Mac 上运行 x86_64 模拟器时,是通过 Rosetta 2 翻译执行的,这可能导致原生桥接层出现问题。
建议排查方向
1. 使用 arm64 架构模拟器测试
在 Apple Silicon Mac 上,建议创建或使用 arm64 架构的 iOS 模拟器:
2. 使用真机测试
根据官方文档和 ISSUE 系统的经验,真机是最可靠的调试环境。如果 arm64 模拟器仍有问题,建议使用真机验证。
3. 临时方案
您已使用的 Swift URLSession 混编方案 是正确的绕过方式。具体可参考 uni-app x 原生混编文档:
问题上报建议
建议将此问题提交至 DCloud Issues 系统,附上以下信息以便官方复现:
总结
由于您已确认 Swift URLSession 混编可以正常工作,这强烈表明问题出在
uni.request到原生层的桥接环节,而非网络本身或您的代码问题。建议优先尝试 arm64 模拟器,并考虑向官方提交 Issue。要回复问题请先登录或注册
公告
更多>相关问题