uni-app 离线打包xcode16 运行到ios18 出现js执行中断和渲染不全的情况

发布于 1周前 作者 htzhanglong 来自 Uni-App

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:

附件图片

Image

信息 内容
产品分类 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

7 回复

看你的描述模拟器没问题,真机有问题?
你有同事测试其他机器吗,比如不同的 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社区或官方寻求更专业的帮助。

回到顶部