Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload

随着 Compose Multiplatform 1.8.0 的发布,iOS 版本也引来的第一个稳定版本,按照官方的原话:「iOS Is Stable and Production-Ready」 ,而 1.8.0 版本,也让 Kotlin 和 Compose 在移动端有了完整的支持。

在 2023 年 4 月 Compose 发布了 Compose for iOS Alpha ,而在 2024 年的 5 月的 1.6 版本发布了iOS Beta ,一年后的今天,1.8 版本终于有迎来了 Stable 发布。

三年之期已到,龙王归来?

在官方的调查里,超过 96% 的开发者表示在 iOS 上使用 Compose Multiplatform 没有重大的性能问题,这也是官方本次 stable 的原因:

同时在性能对比也有不错的基准测试结果:

  • 启动时间与原生应用程序相当
  • 滚动性能与 SwiftUI 相当
  • 仅增加了 ~9 MB 的大小

基准测试:https://github.com/JetBrains/compose-multiplatform/tree/master/benchmarks/showcases/LazyGridImageView

如果你去看 1.8.0 的更新日志 ,就会看到 Compose 大部分都是 iOS 的亮点,基本这个版本就是为了 iOS 而发布,其中最有意思的莫过于本次加入了并发渲染支持:

Compose Multiplatform 在 iOS 现在支持将渲染任务卸载到专用渲染线程,而并发渲染可以在没有 UIKit 互操作的情况下提高性能。

用户通过直接在 ComposeUIViewController 配置块中启用 ComposeUIViewControllerConfiguration 类的 useSeparateRenderThreadWhenPossible 标志或 parallelRendering 属性,选择在单独的渲染线程上对渲染命令进行编码:

@OptIn(ExperimentalComposeUiApi::class)
fun main(vararg args: String) {UIKitMain {ComposeUIViewController(configure = { parallelRendering = true }) {// ...}}
}

而另一个 iOS 的核心实现就是 Kotlin/Native ,Kotlin/Native 是 KMP 在 iOS 支持的关键能力,它负责将 Kotlin 代码直接编译为目标平台的机器码或 LLVM 中间表示 (IR),最终为 iOS 生成一个标准 .framework ,这也是为什么 Compose iOS 能实现接近原生的性能。

鸿蒙 Compose 实现支持目前主流也是 Kotlin/Native ,不得不说 Kotlin 最强大的核心价值不是他的语法糖,而是他的编译器。

当然,Compose Multiplatform 的 UI 渲染并非直接依赖于 iOS 的 UIKit 或 SwiftUI 的原生组件,而是依赖于Skia 图形库,在 Compose Multiplatform 里是通过 Skiko (Skia for Kotlin) 这套 Kotlin 绑定库的能力进行绘制。

简单理解,Skiko 在 iOS 利用 CAMetalLayer 作为其绘图表面,Compose UI 的每一帧都会通过 Skia 引擎渲染到由 CAMetalLayer 提供的 Metal 纹理上,这层实现逻辑和 Flutter 类似。

而前面提到了 UIKit 的互操作,这也是 Compose 渐进式集成的支持之一,在 iOS 上 Compose 可以同时与 SwiftUI 和 UIKit 进行互操作,换句话说,开发者可以在 Swift/UIKit 中使用 Compose,也在 Compose 中使用 SwiftUI/UIKit 。

当然,基于 Compose iOS 的实现模式,在继承的数据绑定和状态同步交互上可能还会存在某些边界问题。

同时,就像我们之前聊过的,klibs.io 的发布也补全了 Compose Multiplatform 在跨平台最后一步,这也是 Compose iOS 能正式发布的另外一个原因:

而 1.8 下的 Compose iOS 也更新了一些细节:、

  • 与原生 iOS 物理特性匹配的滚动行为
  • 原生 selection 和从右到左支持的文本编辑
  • 与系统的拖放集成
  • 遵循系统设置(如字体大小和对比度)的自适应 UI
  • iOS 原生的导航手势

目前官方表示,许多团队(包括 Markaz、Wrike、Feres 和 Physics Wallah)已经将 Compose Multiplatform 集成到它们的大型应用中,根据 Compoes 的理念 ,可以一次集成一个屏幕或功能,所以你无需从头开始就可以使用 Compose iOS。

也就是除了 Web 路线之后,基本上 Compose 在 Stable 的节奏上已经跟上了 Flutter 。

最后,现在 Compose 开发模式下的 hot reload 已经可以使用 ,不过暂时只支持 desktop,原理大概是只支持 jvm 模式, 现在 Compose Multi 开发可以和 Flutter 一样在更改代码后立即查看结果:

在补全这一点后, Compose 跨平台的开发体验也上了一个档次,至少 hot load 的体验比 preview 好太多了,虽然还不支持类似 Flutter Attach 的模式。

至于为什么不支持 Kotlin Native 下 iOS 的 hotload ,这个可以参考过去写过 Flutter 在 iOS 上如何实现开发过程中的二进制 JIT Kernel hotload 和遇到的问题,iOS 上的 hotload 基本需要走 hack 支持。

那么,你已经用上 Compose iOS 了吗?或者说你接下来会考虑吗?

参考链接

  • https://blog.jetbrains.com/kotlin/2025/05/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins 服务器上安装 Git

安装 Git # 更新包列表 sudo apt update# 安装 Git sudo apt install git 验证安装 # 检查 Git 版本 git --version 查看所有全局配置 git config --global --list 查看特定配置项 # 查看用户名配置 git config --global user.name# 查看邮箱配置 git config --global u…

OpenHarmony SystemUI开发——实现全局导航栏和状态栏关闭

在实际生产中,进场遇到需要关闭导航栏和状态栏的需求,现分享解决办法: 开发环境 OpenHarmony 5.0.0r 代码分析 思路: launcher本身可以关闭 导航栏(实际是 公共事件,发送消息给systemUI来实控制&#x…

大模型微调终极方案:LoRA、QLoRA原理详解与LLaMA-Factory、Xtuner实战对比

文章目录 一、微调概述1.1 微调步骤1.2 微调场景 二、微调方法2.1 三种方法2.2 方法对比2.3 关键结论 三、微调技术3.1 微调依据3.2 LoRA3.2.1 原理3.2.2 示例 3.3 QLoRA3.4 适用场景 四、微调框架4.1 LLaMA-Factory4.2 Xtuner4.3 对比 一、微调概述 微调(Fine-tun…

单片机-STM32部分:10-2、逻辑分析仪

飞书文档https://x509p6c8to.feishu.cn/wiki/VrdkwVzOnifH8xktu3Bcuc4Enie 安装包如下:根据自己的系统选择,目前这个工具只有window版本哦 安装方法比较简单,都按默认下一步即可,注意不要安装到中文路径哦。 其余部分参考飞书文档…

uniapp-商城-48-后台 分类数据添加修改弹窗bug

在第47章的操作中,涉及到分类的添加、删除和更新功能,但发现uni-popup组件存在bug。该组件的函数接口错误导致在小程序中出现以下问题:1. 点击修改肉类名称时,回调显示为空,并报错“setVal is not defined”&#xff0…

STM32-ADC模数转换器(7)

目录 一、ADC简介 二、逐次逼近型ADC 三、ADC基本结构图 四、规则组的四种转换模式 五、转换时间 对GPIO来说,它只能读取引脚的高低电平,使用了ADC模数转化器之后,就可以对高电平和低电平之间的任意电压进行量化,最终用一个变…

智能商品推荐系统技术路线图

智能商品推荐系统技术路线图 系统架构图 --------------------------------------------------------------------------------------------------------------- | 用户交互层 (Presentation Layer) …

【Docker系列】docker inspect查看容器部署位置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

标量/向量/矩阵/张量/范数详解及其在机器学习中的应用

标量(Scalar)、向量(Vector)、矩阵(Matrix)、张量(Tensor)与范数(Norm)详解及其在机器学习中的应用 1. 标量(Scalar) 定义&#xff1…

【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)

【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&…

SierraNet协议分析使用指导[RDMA]| 如何设置 NVMe QP 端口以进行正确解码

在解码RoCEv2数据包(包括TCP RDMA和RoCE RDMA)时,若捕获的跟踪数据无法正确解码,通常需要执行特定的解码步骤。对于RoCE RDMA跟踪数据的处理,分析器主要采用两种方式获取必要信息以实现数据包解码: 首先&am…

JavaScript基础-局部作用域

在JavaScript中,理解不同种类的作用域是掌握这门语言的关键之一。作用域决定了变量和函数的可访问性(即可见性和生命周期)。与全局作用域相对应的是局部作用域,它限制了变量和函数只能在其定义的特定范围内被访问。本文将深入探讨…

李沐动手深度学习(pycharm中运行笔记)——09.softmax回归+图像分类数据集+从零实现+简洁实现

09.softmax回归图像分类数据集从零实现简洁实现(与课程对应) 目录 一、softmax回归 1、回归 vs 分类 2、经典分类数据集: 3、从回归到分类——均方损失 4、从回归到多类分类——无校验比例 5、从回归到多类分类——校验比例 6、softmax和…

C++八股——内存分配

文章目录 1. 虚拟内存空间2. malloc和free3. new和delete4. 内存池 1. 虚拟内存空间 程序进程的虚拟内存空间是操作系统为每个进程提供的独立、连续的逻辑地址空间,与物理内存解耦。其核心目的是隔离进程、简化内存管理,并提供灵活的内存访问控制。 &am…

【Linux基础】网络相关命令

目录 netstat命令 1.1 命令介绍 1.2 命令格式 1.3 常用选项 1.4 常用命令实例 1.4.1 显示所有TCP连接 1.4.2 查看路由表 1.4.3 实时监控网络接口流量 1.4.4 查看监听中的端口以及关联进程 ping命令 2.1 命令介绍 2.2 命令格式 2.3 常用选项 2.4 常用示例 ifconfi…

adb 实用命令汇总

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 基础adb命令 # 重启adb adb kill-server# 查看已连接的设备 adb devices# 进入命令行 adb shell# 使用 -s 参数来指定设备 adb -s <设备序列号> shell…

C#管道通讯及传输信息丢失的原因

以下是C#管道通讯客户端/服务端共用类 namespace PipeCommunication { /// <summary> /// 管道信息回调通知 /// </summary> /// <param name"msg"></param> public delegate void PipeMessageEventHandler(string msg…

MixTeX - 支持CPU推理的多模态LaTeX OCR

文章目录 一、项目概览相关资源核心特性技术特点 二、安装三、使用说明环境要求 四、版本更新五、当前限制 一、项目概览 MixTeX是一款创新的多模态LaTeX识别小程序&#xff0c;支持本地离线环境下的高效CPU推理。 无论是LaTeX公式、表格还是混合文本&#xff0c;MixTeX都能轻…

简单 Linux 字符设备驱动程序

注&#xff1a;本文为 “Linux 字符设备驱动” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 未整理去重&#xff0c;如有内容异常&#xff0c;请看原文。 Simple Linux character device driver 简单 Linux 字符设备驱动程序 Oleg Kutko…

NX949NX952美光科技闪存NX961NX964

NX949NX952美光科技闪存NX961NX964 在半导体存储领域&#xff0c;美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计&#xff0c;成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…