uni-app 离线打包xcode16 运行到ios18 出现js执行中断和渲染不全的情况
uni-app 离线打包xcode16 运行到ios18 出现js执行中断和渲染不全的情况
操作步骤:
- 正常本地打包 运行到ios18 的设备
预期结果:
- 和运行到模拟器一致
实际结果:
- 运行到设备渲染不全,有些js未执行
bug描述:
使用的xcode16 sdk和HBuilder 均为最新版。 离线打包时运行到模拟器正常,运行到手机设备,看起来像是有些js未执行 渲染不全,包括
uni.showToast()
的弹窗样式丢失(如附件图片) 控制台打印:
Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "((target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.rendering AND target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.networking AND target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.webcontent))" UserInfo={NSLocalizedFailureReason=((target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.rendering AND target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.networking AND target is not running or doesn't have entitlement com.apple.developer.web-browser-engine.webcontent))}
0x1140c24c0 - ProcessAssertion::acquireSync Failed to acquire RBS assertion 'XPCConnectionTerminationWatchdog' for process with PID=23040, error: (null)
Failed to terminate process: Error Domain=com.apple.extensionKit.errorDomain Code=18 "(null)" UserInfo={NSUnderlyingError=0x3018b3d20 {Error Domain=RBSRequestErrorDomain Code=3 "No such process found" UserInfo={NSLocalizedFailureReason=No such process found}}
Failed to terminate process: Error Domain=com.apple.extensionKit.errorDomain Code=18 "(null)" UserInfo={NSUnderlyingError=0x301928720 {Error Domain=RBSRequestErrorDomain Code=3 "No such process found" UserInfo={NSLocalizedFailureReason=No such process found}}
和
Modifying properties of a view's layer off the main thread is not allowed: view <UIView: 0x13879f800> with no associated or ancestor view controller; backtrace:
附件图片
信息 | 内容 |
---|---|
产品分类 | HbuilderX |
PC开发环境 | Mac |
PC操作系统版本号 | 3.2 GHz 八核Intel Xeon W。macos14.6.1 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.32 |
手机系统 | iOS |
手机系统版本号 | iOS 18 |
手机厂商 | 苹果 |
手机机型 | iphone12 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
看你的描述模拟器没问题,真机有问题?
你有同事测试其他机器吗,比如不同的 xcode版本,iPhone 手机型号,ios 系统型号,比如 ios17 是否正常,缩小下问题范围
嗯嗯真机有问题 ,测了一下用ios17.2也这样,用模拟器没问题,真机上有些样式和js不执行 uni.showToast()的样式也不对变成和上面图片里那样了,使用的xcode 是16 真机ios版本是18,17.2
新建了一个项目也是这样 截图贴在评论区了 是配置不对嘛
新建了一个项目也是这样
看着是暗黑模式没有设置好。你使用标准基座,开发环境运行到真机是否正常。提供个复现工程吧
看到消息提供个复现工程吧,我试试
针对您提到的uni-app离线打包在Xcode 16及iOS 18环境下出现的JS执行中断和渲染不全问题,这里提供一些可能的解决方案,主要通过代码层面的调整和配置来尝试解决问题。请注意,由于iOS 18尚未正式发布,以下解决方案基于一般经验和uni-app的通用做法,可能需要根据实际情况进行调整。
1. 更新uni-app和依赖库
首先确保uni-app框架及其相关依赖库已更新到最新版本,以兼容最新的Xcode和iOS版本。
# 更新HBuilderX及uni-app SDK
# 这一步通常在HBuilderX IDE内完成,通过“帮助”->“检查更新”来操作
2. 检查iOS项目配置
在Xcode中检查项目的Build Settings,确保以下设置正确:
- Deployment Target设置为支持的最低iOS版本(如16.0或更高)。
- Enable Bitcode设置为No(有时Bitcode可能导致兼容性问题)。
3. 优化JS代码
对于JS执行中断的问题,可能是由于代码中存在性能瓶颈或无限循环等。优化JS代码,避免长时间阻塞主线程:
// 示例:使用setTimeout避免长时间同步操作阻塞UI线程
function heavyComputation() {
// 模拟重计算
let start = Date.now();
while (Date.now() - start < 1000) { /* 计算 */ }
}
// 不推荐:直接调用可能导致UI卡顿
// heavyComputation();
// 推荐:使用setTimeout将重计算放入Web Worker或延迟执行
setTimeout(() => {
heavyComputation();
}, 0);
4. 检查渲染相关代码
渲染不全可能由于CSS样式冲突、组件布局问题或渲染逻辑错误。检查相关代码,确保:
- 使用flex布局或grid布局时,容器和子元素的尺寸设置正确。
- 避免使用不兼容的CSS属性。
- 检查Vue组件的生命周期钩子,确保渲染逻辑正确执行。
5. 调试和日志
使用Xcode的调试工具和Safari的Web Inspector来跟踪和分析问题:
- 在Xcode中运行应用,观察控制台日志,查找可能的错误信息。
- 使用Safari的Web Inspector连接iOS设备,检查控制台和网络请求,分析可能的JS错误或性能瓶颈。
总结
由于iOS 18尚未正式发布,具体的兼容性问题可能需要等待uni-app官方或社区发布更新。以上建议仅供参考,实际操作中可能需要根据具体情况进行调整。如果问题持续存在,建议向uni-app社区或官方寻求更专业的帮助。