来了,简单宣告下 Compose for iOS Alpha 正式发布

news2025/2/27 1:50:42

来了来了,盼星星盼月亮,广大 Compose 开发者期待许久的 Jetpack Compose Multiplatform for iOS 近期终于正式发布了 Alpha 支持,其实在此之前,我在 《一文快速带你了解 KMM 、 Compose 和 Flutter 的现状》 等文章里说了很多次 Compose Multiplatform 即将支持 iOS ,只不过现在它终于来了,给 Compose Multiplatform 补全了最后一块屏图

其实上个月 JetBrains 就对 Compose Multiplatform 做了一些「重大调整」, compose-jb 「享年 3 岁」,compose-jb 正式更名为 compose-multiplatform ,同时针对不同平台提供了模版项目,而这一次更新的,就包括了 compose-multiplatform-ios-android-template 。

另外跟随 iOS 支持发布的还有 compose-multiplatform 1.4.0 版本,也就是想体验 iOS 的需要在 1.4 版本是进行尝鲜,并且和新版 Android Studio Flamingo 一样开始支持 JDK 17,因为构建使用 jpackage,为此会使用 JDK 17:

  • JAVA_HOME 环境变量指向兼容的 JDK 版本。
  • javaHome 通过 DSL 设置:
compose.desktop {
    application {
        javaHome = System.getenv("JDK_17")
    }
}

那么,现在可以正式用 Kotlin 来编写类似的 iOS 的 UI ,并且拥有和 Swift-UI 类似的开发体验(和 XML 说再见),目前已有的 Compose 项目也可以更方便地编译为 iOS 应用从而实现 UI 和逻辑共享。

生产力提升有木有。

目前 iOS 支持还处于 Alpha 阶段,没到 beta 阶段的话,API 和兼容可能还会出现一些变化,但是作为正式发布的版本, 已经可以开始体验用相同的 Kotlin 代码来编译出一样的 Android 和 iOS 界面了。

当然,由于 KMM (Kotlin Multiplatform Mobile) 本来就支持 iOS 平台,而 Compose Multiplatform 又是基于 KMM 进行构建,所以对于需要访问 iOS 原生 API ,例如蓝牙、相机等的支持上并不会有太大问题,同时现在也支持如嵌入 MKMapView 这样的原生 UI 视图

如果是想要在 Compose Multiplatform 上尝试 iOS ,首先肯定是需要一个 macOS 的电脑,然后必须有:

  • Xcode
  • Android Studio
  • KMM 插件(Android Studio 里按照的插件)
  • CocoaPods (iOS 包管理工具)

同时你需要先通过 brew install kdoctor 安装 KDoctor ,因为 KDoctor 是 KMM 下必须的一个命令行工具,同时 KDoctor 也可以检测构建环境是否正常。

接下来,如果使用 compose-multiplatform-ios-android-template ,在你的 Compose Multiplatform 项目会包括三个模块: androidApp 、iosApp 和 shared,其中 shared 故名思义就是共享的 Kotlin module :

  • shared 包含 Android 和 iOS 上的通用的代码,也就是平台共享的部分,也是正常开发的 module 目录,比如入口 shared/src/commonMain/kotlin/App.kt ,改模块会被编译成 Android library 和 iOS framework 。

  • androidApp 和 iosApp 就是支持变异为 App 的应用模块。

而目前要在 Android Studio 的 iOS 模拟器上运行 Compose Multiplatform,会需要在 iosApp 的运行配置上进行选择,主要是选择对应的 Execution target:

如果是需要运行到真机,那么首先你要有一个 iOS 开发者账号,然后登陆到你的 Xcode 上:

  • 获取你账号下的 TEAM_ID
  • 接入真机,在 Xcode 中注册的 iOS 设备

另外可以在终端运行 kdoctor --team-ids 来获取你当然的 Team Id 列表,当然,官方也表示如果 KDoctor 没起到作用,你还是需要打开 iosApp/iosApp.xcworkspace ,然后在 Signing & Capabilities 这个 Tab 下去选择和获取你的 Team 。

注意需要在现在 Xcode 上登录开发者账号,当然你不想登陆也可以,不过更麻烦,可以直接用生成的 p12 证书和 mobileprovision 文件,可参考《搭建 iOS 命令行服务打包发布全保姆式流程》 ,不过我想你们应该不会喜欢。

运行 iOS 之前需要设置上面说到的 TEAM_ID,可以打开 iosApp/Configuration/Config.xcconfig 文件下设置 TEAM_ID ,之后在 Android Studio 中重新打开项目,这时候就可以在 iosApp 的运行配置中看到已注册的 iOS 真机。

其次可以看到上面的 Config.xcconfig 文件下有多个配置信息:

  • APP_NAME:简单理解是应用名
  • BUNDLE_ID:类似 Application ID ,注意这个很重要,属于唯一标识应用,和 Andorid 随意折腾 application id 不同,请注意测试时,不要随便在临时账号上测试 Bundle ID, 因为被「登记」过的 Bundle ID 无法重复,要「找回」和「删除」是很麻烦(bu ke neng)的事情。
  • TEAM_ID:Apple 生成给你开发者账号的团队的唯一标识,因为运行 App 到真机需要证书和描述文件,而 team ID 就是证书简介中的对应组织单位

打开 Xcode ,登陆开发者账号,插上 iOS 真机,自动注册设备和同步证书与描述文件,是最简单的流程

如果在 Android Studio 中打开项目后,还需要更改上面的对应选项,目前还需要:

  • 在 Android Studio 中关闭项目。

  • 在的终端中运行 template 目录下的 ./cleanup.sh

  • 更改设置。

  • 再次在 Android Studio 中打开项目。

上面的介绍主要来自官方的 compose-multiplatform-ios-android-template 并进行了补充,可能目前来说对于很多 android 开发,配置 iOS 环境还比较陌生,那么现在 Compose Multiplatform for iOS 就是你接触 iOS 的最好机会。

所以,不用 Flutter ,在 Kotlin 和 Compose Multiplatform 的加持下,Android 开发又再一次向 iOS 的地盘发起突击,而补全 iOS 之后的 Compose Multiplatform ,也正式实现了它全平台支持的承诺。

让我们期待 Compose Multiplatform for iOS 正式发布的那一天。

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

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

相关文章

十三款MySQL可视化管理工具

文章目录一、DBeaver二、DataGrip三、phpMyAdmin四、MySQLDumper五、Navicat六、MySQL GUI Tools七、MySQL ODBC Connector八、MySQL Workbench九、SQLyog十、MySQL-Front十一、dbForge Studio for MySQL十二、HeidiSQL十三、Beekeeper StudioMySQL 的管理维护工具非常多&#…

【C++ 二】选择结构、循环结构、跳转语句

选择结构、循环结构、跳转语句 文章目录选择结构、循环结构、跳转语句前言1 选择结构1.1 if语句1.2 三目运算符1.3 switch 语句2 循环结构2.1 while 循环语句2.2 do...while 循环语句2.3 for 循环语句2.4 嵌套循环3 跳转语句3.1 break 语句3.2 continue 语句3.3 goto语句总结前…

Unity | Video Player的使用方法和原理

讲解逻辑为Unity | 基础逻辑_菌菌巧乐兹的博客-CSDN博客 一、把素材仓库里的视频放进Game界面 1.我们需要在素材仓库中放一个视频(其他文件夹不用管,我只是懒得删了) 2.在Unity里建一个能接收视频的地方VideoPlayer 备注:视频和…

【Python基础入门学习】Python背景知识及介绍

一、背景知识 主流编程语言:java/python/c(c) Python主要应用领域:人工智能、大数据 云计算领域的openstack 框架就是Python写的 测试发展方向:测开、安全、性能 1.1 发展过程 机器语言(二进制)-- 汇编语言 – 高级汇…

招募妙记多 Mojidoc 体验官| 我们准备了诚意大礼,就等你来

在以往的推文和妙记多 Mojidoc 的官方社群里,我们分享、见证了很多妙记多 Mojidoc 用户在产品使用过程中的故事。 我们欣喜于大家对 妙记多 Mojidoc 的信任,也惊喜于在这个过程中,大家对于产品的优化和升级,不遗余力地提出建议和…

IDEA虚拟机参数配置【自我总结】

idea内存溢出问题 最近自己在跑一个大一点的微服务项目时候,发生了这样的一个现象,就是启动idea的时候,首先发现电脑的CPU小风扇急速的飞转,电脑的运行内存也快要飙升到100%了,而且最重要的是光是加载项目就加载了几分钟啊(我当时就炸锅锅)像下图一样,一直加载一直加载 想了想,…

一天吃透计算机网络八股文

网络分层结构 计算机网络体系大致分为三种,OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。最全面的Java面试网站 五层模型:应用层、传输层、网络层、数据链路层、物理层。 应用层:为应用程序提供交互服务…

MySQL:开窗函数

当查询条件需要用到复杂子查询时,聚合函数操作起来非常麻烦,因此使用开窗函数能够轻松实现。 注意:在Oracle中称为分析函数。 在MySQL中称为开窗函数,使用于MySQL8.0以上版本,sql sever、hive、Oracle等。 1 开窗函数…

Redis为什么能抗住10万并发?揭秘性能优越的背后原因

1. Redis简介 Redis是一个开源的,基于内存的,高性能的键值型数据库。它支持多种数据结构,包含五种基本类型 String(字符串)、Hash(哈希)、List(列表)、Set(集…

Win10的两个实用技巧系列之华硕电脑设置面部识别的技巧、删除背景图片的方法

Win10系统的华硕电脑怎么使用人脸解锁? 华硕电脑设置面部识别的技巧 Win10系统的华硕电脑怎么使用人脸解锁?华硕电脑想要添加面部识别,方便人脸解锁,下面我们就来看看华硕电脑设置面部识别的技巧 有些使用Win10系统的华硕电脑的用户&#…

X509证书以及相关java常用接口

二、X509证书 X.509证书是一种数字证书标准,用于验证在计算机网络中的身份认证。它们是由权威机构(例如CA)发行,包含有关证书持有者身份信息的数字签名。X.509证书通常用于SSL / TLS协议,以确保客户端和服务器之间的安…

Word转PDF:一键转换,快速高效

在现代的工作和学习中,我们经常需要将Word文档转换成PDF文件以便于分享和保留格式。虽然Word软件自身也可以保存为PDF格式,但在某些情况下,我们需要一个更快捷、高效的转换工具来帮助我们完成任务。下面将介绍一款快速高效的Word转PDF在线转换…

机器学习与深度学习——通过SVM线性支持向量机分类鸢尾花数据集iris求出错误率并可视化

线性支持向量机 先来看一下什么叫数据近似线性可分,如下图所示,蓝色圆点和红色圆点分别代表正类和负类,显然我们不能找到一个线性的分离超平面将这两类完全正确的分开;但是如果将数据中的某些特异点(黑色箭头指向的点)去除之后&a…

华为ensp配置实验大全(免费持续更新)

点开一篇文章 ,“分享”要收费。 点开一篇文章, "大全"但就两个实验。 点开一篇文章, “详细"但全截图。 我忽略了最重要的东西"产品说明书" 产品说明书优势 "规范" "详细" 此文寻找官方手册中…

BUUCTF-PWN-[第五空间2019 决赛]PWN5

这题考到 格式化字符串的方法 我之前没有学过 根据wp写完这题去看看原理 下载打开环境 checksec看看 发现有三个保护 nx打开 所以无法写入shellcode 现在看看ida32 发现/bin/sh 进去看 发现就在主函数里面 我们进行代码审计 发现输入名字 他会返回名字 然后再输入密码 如果…

MJ优质博主清单;把ChatGPT调教为英语私教;绝美SD Prompt手册;AgentGPT体验全记录;2项AI工具最强更新 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『预测五年后的应聘场景』玩转机器人将是核心竞争优势 1. 你有多少个公用机器人(基本的机器人操作能力) 2. 你…

体验亚马逊云科技产品使用 AWS Amplify 构建和部署一个 Web 应用程序

前言如果你是IT从业者,会有一个非常明显的感觉,那就是上云已经成为了趋势。以前公司如果有什么互联网业务,都要自己买服务器,自建机房,或者搬到运营商的IDC机房里面去进行托管。但现在,大家都是找云服务器厂…

Java用IO实现简单的用户注册登录并玩猜数字小游戏demo

项目场景: 简单的用Java IO读写操作完整实现用户注册登录并玩猜数字小游戏案例。 (猜数字游戏:系统随机生成一位1-100之间的数字让用户猜,给出猜大了,猜小了,及第几次猜对了的提示) 分析&#…

Shell基础知识汇总

一、变量 1.变量的类型 变量根据作用范围的大小主要分为局部变量、全局变量、环境变量: (1)局部变量:在Shell脚本中的函数内显示使用local关键字定义的变量。其作用域局限于函数内,当local变量名与global变量名同名时…

激活函数高频面试题集合

激活函数激活函数的作用是什么?常用的激活函数Relu引入Relu的原因Relu顺序relu在零点可导吗,不可导如何进行反向传播?Geluleaky relu优点缺点softmaxsigmoid缺陷tanh缺点如何选择激活函数Bert、GPT、GPT2中用的激活函数是什么?为什…