- 多端开发 Kbone
kbone 是一个致力于微信小程序和 Web 端同构的解决方案。
2022-03-23 - 【四川航空】利用云测提升自动化回归测试效率
背景 美丽川航,美好出行。四川航空作为中国最具特色的航空公司之一,始终以安全为品牌核心价值,持续安全飞行34年,现运营中国国内最大的全空客机队超过190架飞机,执飞国内外航线500余条。而微信小程序是四川航空用户订票的最重要的入口之一,对小程序质量要求也非常高。 每次新版本发布时,需要对会员、机票、行程、服务大厅等业务重点模块进行回归测试。每次上线前,靠人工进行完整测试的难度大,时间紧,易遗漏。 云测实践 为了提升测试效率,解决人工回归容易遗漏的了问题,从23年3月开始,四川航空向自动化测试方向转型。 首先四川航空的测试同学,对150+个功能点,按照业务重要程度,用户访问量等维度进行排序,对重要的、变更较少的业务先开展自动化测试。 在自动化测试选型中,组内测试同学有一定的Python基础,选择了Minium框架来编写自动化测试用例,并且采用了PageObject设计模式,将用例逻辑和底层操作分离,降低了Case的维护成本。 为了方便大家快速上手,我们开放了具体实践的示例代码,方便大家一起学习交流。 [图片] 在具体实践过程中,发现随着用例数量增加,自动化测试耗时也增加很快。 例如在某次发版时,在开发者工具上,全量执行85个Case时需要2小时!执行时长过长很影响回归测试效率。 为了解决这个问题,四川航空的测试同学,将用例放在小程序云测服务中执行,首先利用多机协同执行用例的方案,将case分散给多台机器同时执行,大大提升了执行效率。 在此基础上,四川航空采用了小程序云测服务的快速测试机器,节省了真机安装和初始化微信的时间,进一步提升了真机执行速度 经过优化后,现在全量执行85个自动化用例,只需要40分钟即可完成,大大提升了回归测试效率 使用效果 ●截止到目前已有85个自动化用例,占总测试用例的的60%,后续将持续提升自动化测试用例占比。自动化测试明显缩短测试时间,节约了人力成本。 ●大部分测试用例采用自动化方式覆盖后,测试同学可以专注其他较复杂的业务场景,提升了测试覆盖率。 ●目前已帮助产品发现8个缺陷,且云测服务提供的详细的测试报告,包括小程序日志,网络请求日志,运行截图等信息,帮助研发同学快速定位问题,提升修复效率。
2023-11-30 - 【微盟】利用 jupyter-notebook 提升编写用例效率
作者|微盟-王保军 背景 微盟集团成立于2013年,是业内领先的小程序第三方服务商,致力于为商家打造去中心化的数字化转型SaaS产品及全链路增长服务,助力商家经营可持续增长。 目前授权微盟开发的的小程序多达10万多个。保证这么多小程序的质量,依赖手动测试显然无法覆盖众多情况。 微盟电商零售团队在小程序自动化方向做了调研与探索,从行业调查,选型分析等过程中选定了微信测试团队开发的Minium测试框架 和 小程序云测服务。 本文将结合微盟的实际业务需求与小程序自动化在业界的实践经验进行分析,阐述电商零售小程序使用Minium+云测服务落地实践。 技术选型 多年来,针对小程序的自动化测试框架、工具一直处于半真空地带,业界主流的落地方案分为: Appium,AirTest,UiAutomator2等app测试思路miniprogram,MiniTest(minium)这种官方提供的测试框架;我们调研后对各框架在小程序测试方面的适用性与优缺点进行分析对比: [图片] 为什么选择Minium? 微盟作为小程序服务商,管理的小程序也是千店千面,不同小程序的页面组件,样式都是完全不同的,这就使得图像识别的AirTest先被排除; 另外我们需要在渲染层之外对逻辑层就行测试,例如接口mock,js注入,获取页面JsonData,Storage等需求是appium等基于Chrome DevTools Protocol的测试方案所不具备的;Minium支持Python进行case开发,与现有的UI自动化与接口自动化技术栈匹配,可降低学习开发成本;微信测试团队提供了一套可视化测试平台--小程序云测服务,方便了case管理,任务创建,报告查看和分享。最重要的是,云测服务提供的丰富WeTest云真机,无需本地维护真机,且每周都有赠送免费测试时长,基本满足测试需求。 从POM开始设计自动化case 无论是小程序的UI测试亦或是Web UI, 本质都可以将业务流程与页面元素操作分离,这将使得测试代码变得更加清晰。页面对象模型将页面抽象为一个对象(一个类), 页面的元素以及操作分别抽象为对象的属性和方法,与case机型分离,case的流程编写更像是搭积木,页面的方法就是你的积木块。 完整的示例代码下载可前往 : https://git.weixin.qq.com/minitest_best_practices/weimeng 页面示例 例如微盟小程序中一个商品列表页面,有如下功能: [图片] 获取元素 我们将页面中这些元素分别通过微信开发者工具获取其选择器,如要获取搜索框的selector: [图片] 这里我们看到在input框之外存在#shadow-root(shadow-dom 其实是浏览器的一种能力,它允许在浏览器渲染文档(document)的时候向其中的 Dom 结构中插入一棵 DOM 元素子树,但是特殊的是,这棵子树(shadow-dom)并不在主 DOM 树中),是因为ti-input是一个自定义组件,我们就需要用到跨自定义组件的后代选择器,最终selector为:'ti-input >>> input' 我们在元素选择器中大量使用了class与标签选择器,尽可能避免使用xpath,一方面在于xpath非常容易受到业务更新的影响而导致失效,另一方面在于微盟小程序统一使用了自研UI组件库:Titian,实现了页面元素的标与统一。 [图片] 实现对页面对象模型 可参考商品页面示例代码 goods_list_page.py 这里完成了一个商品列表页面的抽象模型,后续如果新的元素以及操作新增,只需要在class中补齐selector选择器以及操作方法即可 抽象页面基类 由于很多操作在不同页面会有相同的,所以需要抽出来作为公共方法,放在base_page里面,这样做的好处是一次定义多次复用,如指定页面跳转,滚动,等待页面加载完成,自定义授权等。 页面通用方法示例代码 base_page.py 编写case 测试商品列表功能页面的用例 ,可参考代码 test_demo.py 查看运行效果 [视频] POM结构图 随着页面与case越来越多,可组合性也就越多,我们大致可以得出如下图所示的case平面图,还可以拓展出数据驱动以及接口调用等模块完善case测功能验证点。 详细示例代码,可参考附录的Git地址。 [图片] 使用jupyter-notebook辅助调试case 在case的实际编写过程中,如何高效的定位元素以及调试case对工作效率的的提升至关重要。试想一下,我现在需要订单创建页面的发票信息进行新增,那从小程序启动到发票信息添加页面我至少需要经历如下页面切换流程: [图片] 如此想要调试发票信息页面相关元素与方法,就需要case先运行创建订单以及之前的步骤流程,调试一个元素或者方法运行一次,调试成本极高。 为什么不能指定path¶ms编译 由于页面的特殊性,需要对下单时生成的页面参数orderKey进行检查,所以不允许直接通过指定path以及参数编译小程序打开页面 [图片] jupyter-notebook怎么用于case调试 借助jupyter-notebook进行交互式调试页面元素&方法,这个过程就变得极其简单了: 安装jupyter-notebook: pip install jupyter在终端项目路径下打开jupyter-notebook:[图片] 3. 浏览器会自动打开项目目录 a. 自己新建一个notebook文件 [图片] b. 从config.json中提取出关键信息,并赋值给minium.WXMinium的conf参数 import minium # native = minium.Native({"serial": "f3054355"}, "Android") native = minium.Native({}, "ide") mini = minium.WXMinium(conf={ "debug_mode": "debug", "enable_app_log": False, "platform": "ide", "wda_project_path": "/Users/baojunw/wda/node_modules/appium/node_modules/appium-webdriveragent", "device_desire": { "serial": "f3054355" }, "remote_connect_timeout": 1200, "project_path": "/Users/baojunw/Desktop/v1.1.76-20230823", "dev_tool_path": "/Applications/wechatwebdevtools.app/Contents/MacOS/cli", "auto_authorize": False, "enable_network_panel": True, "assert_capture": True, }, native=native) 4. 接着我们光标选中代码快运行一下,ide会打开小程序: [图片] 5.通过手动在微信ide执行前置下单流程,让页面跳转到发票添加页面 a. 获取发票类型选项元素:class选择器 value:sinvoceSelecttem [图片] b. 在jupyter-notebook中调试: [图片] c. 调试一个方法 switch_invoice_type,可见调试代码运行后元素发票类型已经更改为”增值税专用发票“: [图片] 持续集成 云测服务提供了可视化的操作平台,但是受限于项目成员登录权限问题(如AppID开发者权限仅部分人员被添加),此外为了简化创建任务成本,我们通过云测服务提供的 第三方接口,在内部测试平台实现了简化版本的任务管理功能,解决账号限制的使用问题 [图片] [图片] 此外还打通微盟内部小程序发布平台与灰度平台,实现了自感知版本变更的任务自动触发,以及报告通知到企微: [图片] 小程序自动化成果 截止目前已完成: 1. 小程序页面覆盖数达到49个; 2. 覆盖C端业务场景数:142+; 3. case稳定性到通过率97%+; 4. 小程序发版上线代替人工值守回归验证; 5. 发现有效bug 46 个 附录: 1、 微盟自动化测试代码示例下载:https://git.weixin.qq.com/minitest_best_practices/weimeng 2、 Minium文档:小程序云测-MiniTest 3、 小程序云测服务官方文档:MiniTest 小程序云测服务简介 | 微信开放文档
07-24 - 微信小程序转多端成功上架AppStore!
[代码]printf 'hello AppStore' [代码] 先上代码为敬。 初始 - 微信小程序的幻想 说下背景,闲暇之余,博主开发了一款微信小程序,在技术选型上,直接选择了微信提供的开发体验,同时采用了SASS + TS的开发模式。 小程序名字叫鲁班计算器,主要为一款系统增强型计算器App。最近一直有基础的计算需求,使用系统的计算器,经常忘了自己输入了什么,极为不方便。网上找了一圈,没有一个能兼顾体验的计算器,要不是广告满天飞,要不是界面很丑,实在是无奈,于是决定自己做一款干净、清爽、好用、无广告的计算器,同时加入一些诸如历史记录、震动反馈、语音播报等功能,另外,实在看不惯千分位的分割方式,对于中国人来讲,万分位才是最易于阅读的数字体验,所以在这点上,鲁班计算器做了最基础的支持和优化。 想体验的小伙伴可以直接扫码体验微信小程序或者微信搜索鲁班计算器。 [图片] 计算器经过 开发 -> 提审 -> 备案 -> 上架的流程,终于在微信小程序上和大家见面了。 这里提及几个过程 提审 这里不得不说,微信处理小程序的审核是真的快,鲁班计算器最长不超过1天,最快就提审完几分钟就完成了审核,对于鲁班计算器这么一款简单的工具小程序来说,因为逻辑、功能也比较简单,基本上没有被拒的问题 备案 根据国家的规定,现在微信小程序的上架都是需要经过国家审核的。 备案原来我预计的是5-10天,但整体流程下来比我想象的要顺利,整体耗时2天左右。在有通过审核的版本情况下,就可以做微信小程序的备案流程了。 进入微信小程序的备案信息填下页面,基本上按照微信的指引做填下就可以。这里要提的是,原本以为微信小程序的各种体验一般,但当我尝试做qq小程序的备案的时候,我发现我错了,qq小程序的备案槽点是真的多,文档各方面做的比微笑小程序差,同时备案流程是要先备案才能提交版本审核,同时,备案信息填写的非常冗余,不得不想吐槽qq小程序的体验。 当在微信上提交备案流程以后,就很快会有微信审核的工作人员给我拨打电话,确认一些审核细节,和提醒收到管局短信记得要去操作。然后就提交给管局审核了,很快我就收到了管局的短信,要求登录系统确认,在确认后的第二题,就收到了另外一条短信,大概过一会,就可以看到微信上的备案信息就已经通过了。 上架 通过以后就可以上架微信小程序了,不得不说,第一次上架微信小程序还是很开心的,想到能与微信13亿用户分享体验,想想就很激动啊。 现实的骨感 - 微信的封闭生态 很快我就发现我错了,微信虽然有庞大的用户群体,但是微信是一个极其封闭的生态。微信小程序的流量获取只有几个有限的渠道:群/好友分享,朋友圈,微信搜索,而群/好友分享,朋友圈是一个封闭关系,并非开放的关系,而另一个渠道微信搜索,又极其依赖微信的SEO算法,SEO算法中,对新上架的APP又不会有多少帮助。通过搜索计算器,排在第一名的,又是一个广告满天飞,体验差劲的小程序,这是多么糟糕的一件事情。 对于一个封闭的群分享/好友分享,封闭性决定了其用户的分母不会太大,而这么一个小工具,又不能天天在群里分享。另外,随着发展,大部分群都已经禁止分享小程序了,分享的后果就是被踢出去,这在一定程度上,加剧了微信生态的封闭性。 所以总体上来说,这么一个封闭的生态,对开发者来说并不友好。微信的小程序生态中,只适合已有App的情况下,做简单页面的中转载体。 新的美好伊甸园 - AppStore 所以,基于这些认知,我开始了对AppStore的美好憧憬,起码他是开放的生态,用户群体更大。 如果要上架AppStore,面临技术方案的重新抉择 开发模式 成本 维护性 扩展性 与微信小程序体验差异 Native开发 高 一般 高 大 RN Native开发 一般 高 高 一般 微信小程序多端方案 低 高 一般 几乎一致 在综合考虑成功和收益以及后期维护性上,我最终选择了微信提供的多端方案。 只需下载最新的微信开发工具,就会有一个多端开发模式,点击即可切换为多端开发模式。切换了以后,大部分的API都已经做了兼容: [图片] 基本上可以按照多端方案的文档说明进行操作。 适配主要可以使用条件编译来区分多端场景, [代码]// #if NATIVE ...多端 // elseif ... 小程序 // endif [代码] 这里说一些需要注意和适配的点 微信云托管的适配 如果有使用微信托管的朋友们,原有的 [代码]wxCloud.callContainer[代码]方法已不能用,需要考虑使用域名调用的方式。另外,使用云托管后端可以直接取到微信的openid,在这种情况下,已经不能适用,需要考虑对用户id(登录方案)的适配。 微信开放平台关联 在上架之前,微信会一直提供一个临时的App 签名ID供开发和调试,如果想要上架App Store,更换App的ID是必须的,要更换AppID,需要关联微信开放平台(open.weixin.qq.com)的应用。这也是比较难受的一个点,在微信开放平台注册,需要经过开放平台的审核,而开放平台的审核又是极其严格的事情。 开放平台的审核会非常看重应用的官网介绍,当时我就想,我就一个简单的App,还要开发一个应用官网么?是的!而且不能简单糊弄,要看得过去,AppStore没有要求,微信要求了! [图片] 而这个的审核相对耗时,一次拒绝修改后,等待下一次审核就是一天。 在花了点时间,装修了下官网以后,微信开放平台才给正式通过,通过了以后,就可以做多端平台的关联了,这个时候应用才会被替换为正式的AppID App Developer平台和App Connect平台注册 要上架App Store, App Developer平台和App Connect平台又是必经之路。App Developer主要用来收钱,App Connect用来管理应用的上架和审核。 [图片] 4.证书管理 证书分为开发证书和发布证书,开发证书可以直接在XCode里面的设置,账户里面申请到,这样就可以在真机或者模拟器上开发。 如果要提交发布,需要有发布证书,这个可以按照微信官方的指引https://dev.weixin.qq.com/docs/framework/guideline/devtools/ios-certificate.html 打包和发布 选择构建 - 打包ipa, 选择正式正式,分发证书,版本选择正式版,即可按照指引打包一个ipa产物。 接着通过在Mac App Store下周的Transporter应用,来交付ipa文件。ipa应用会做一些基础的检查,然后就可以上架交付了。 [图片] 需要注意的是,即使Transporter提示成功,在App Connect上也未必能开到构建的版本,这个时候就要查收邮件了,看App是否给你发了需要修改的邮件。这里针对多端,会提示一些关键信息的plist缺乏描述,根据邮件提示缺少提示的plist,添加进去即可,重新打包交付。 App Store提审 在提审之前,还要填写一堆的信息和资料,这里需要准备 官方网站链接 隐私声明和用户协议 屏幕预览截图 点击提交 点击提交之后就是静静的等待苹果的审核吧,手机上可以装一个App Connect。因为众所周知的原因,苹果的审核一般是在晚上我们睡觉的时候进行😁,一早醒来,我们就会收到苹果发来的拒绝,或者通过的消息,如果拒绝了,就根据提示做些修改,继续提交就可以了。 [图片] 经过几次修改之后,鲁班智能计算器终于上架App Store了!整体上,体验几乎和微信小程序基本一致。 对于想用微信小程序来开发App的同学,这是一个不错的选择。 未来 - 曙光 无论如何,对于App讲,面向的是一个开放的用户和市场,不确定为来如何发展,至少心态上是开放了很多。 想体验的同学可以上App Store搜索 “鲁班计算器”, 同时可以在微信小程序上对比下差异,几乎做到了零代码适配迁移到App Store。 对于微信小程序转App过程中有什么问题,欢迎大家留言讨论哈~
2023-12-01 - 从零开始学uni-app小程序开发
创建 uni-app 项目方式uni-app 支持两种方式创建项目: 通过 HBuilderX 创建通过命令行创建(推荐)HBuilderX 创建 uni-app 项目创建步骤1.下载安装 HbuilderX 编辑器 [图片] 2.通过 HbuilderX 创建 uni-app vue3 项目 [图片] 3.安装 uni-app vue3 编译器插件 [图片] 4.编译成微信小程序端代码 [图片] 5.开启服务端口 [图片] 小技巧分享:模拟器窗口分离和置顶 [图片] Hbuildex 和 微信开发者工具 关系 [图片] 温馨提示:Hbuildex 和 uni-app 都属于 DCloud 公司的产品。 pages.json 和 tabBar 案例目录结构我们先来认识 uni-app 项目的目录结构。 ├─pages 业务页面文件存放的目录 │ └─index │ └─index.vue index页面 ├─static 存放应用引用的本地静态资源的目录(注意:静态资源只能存放于此) ├─unpackage 非工程代码,一般存放运行或发行的编译结果 ├─index.html H5端页面 ├─main.js Vue初始化入口文件 ├─App.vue 配置App全局样式、监听应用生命周期 ├─pages.json **配置页面路由、导航栏、tabBar等页面类信息** ├─manifest.json **配置appid**、应用名称、logo、版本等打包信息 └─uni.scss uni-app内置的常用样式变量 解读 pages.json用于配置页面路由、导航栏、tabBar 等页面类信息 案例练习效果预览 [图片] 参考代码 { // 页面路由 "pages": [ { "path": "pages/index/index", // 页面样式配置 "style": { "navigationBarTitleText": "首页" } }, { "path": "pages/my/my", "style": { "navigationBarTitleText": "我的" } } ], // 全局样式配置 "globalStyle": { "navigationBarTextStyle": "white", "navigationBarTitleText": "uni-app", "navigationBarBackgroundColor": "#27BA9B", "backgroundColor": "#F8F8F8" }, // tabBar 配置 "tabBar": { "selectedColor": "#27BA9B", "list": [ { "pagePath": "pages/index/index", "text": "首页", "iconPath": "static/tabs/home_default.png", "selectedIconPath": "static/tabs/home_selected.png" }, { "pagePath": "pages/my/my", "text": "我的", "iconPath": "static/tabs/user_default.png", "selectedIconPath": "static/tabs/user_selected.png" } ] } } uni-app 和原生小程序开发区别主要区别uni-app 项目每个页面是一个 .vue 文件,数据绑定及事件处理同 Vue.js 规范: 1.属性绑定 src="{ { url }}" 升级成 :src="url" 2.事件绑定 bindtap="eventName" 升级成 @tap="eventName",支持()传参 3.支持 Vue 常用指令 v-for、v-if、v-show、v-model 等 其他区别补充1.调用接口能力,建议前缀 [代码]wx[代码] 替换为 [代码]uni[代码] ,养成好习惯,这样支持多端开发。 [代码]2.<style></style>[代码] 样式不需要写 [代码]scoped[代码] 3.生命周期分为三部分:应用生命周期(小程序),页面生命周期(小程序),组件生命周期(Vue) 案例练习效果预览 [图片] 主要功能 滑动轮播图点击大图预览参考代码 <template> <swiper class="banner" indicator-dots circular :autoplay="false"> <swiper-item v-for="item in pictures" :key="item.id"> <image @tap="onPreviewImage(item.url)" :src="item.url"></image> </swiper-item> </swiper> </template> <script> export default { data() { return { // 轮播图数据 pictures: [ { id: '1', url: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/goods_preview_1.jpg', }, { id: '2', url: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/goods_preview_2.jpg', }, { id: '3', url: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/goods_preview_3.jpg', }, { id: '4', url: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/goods_preview_4.jpg', }, { id: '5', url: 'https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/uploads/goods_preview_5.jpg', }, ], } }, methods: { onPreviewImage(url) { // 大图预览 uni.previewImage({ urls: this.pictures.map((v) => v.url), current: url, }) }, }, } </script> <style> .banner, .banner image { width: 750rpx; height: 750rpx; } </style> 命令行创建 uni-app 项目优势 通过命令行创建 uni-app 项目,不必依赖 HBuilderX,TypeScript 类型支持友好。 命令行创建 uni-app 项目: vue3 + ts 版 npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 创建其他版本可查看:uni-app 官网 编译和运行 uni-app 项目安装依赖 [代码]pnpm install[代码]编译成微信小程序 [代码]pnpm dev:mp-weixin[代码]导入微信开发者工具温馨提示: 在 [代码]manifest.json[代码] 文件添加小程序 [代码]appid[代码] 方便真机预览 用 VS Code 开发 uni-app 项目为什么选择 VS Code?VS Code 对 TS 类型支持友好,前端开发者熟悉的编辑器 👍HbuilderX 对 TS 类型支持暂不完善,期待官方完善 👀用 VS Code 开发配置安装 uni-app 插件 uni-create-view :快速创建 uni-app 页面uni-helper uni-app :代码提示uniapp 小程序扩展 :鼠标悬停查文档TS 类型校验 安装类型声明文件 [代码]pnpm i -D @types/wechat-miniprogram @uni-helper/uni-app-types[代码]配置 [代码]tsconfig.json[代码]JSON 注释问题 设置文件关联,把 [代码]manifest.json[代码] 和 [代码]pages.json[代码] 设置为 [代码]jsonc[代码]// tsconfig.json { "extends": "@vue/tsconfig/tsconfig.json", "compilerOptions": { "sourceMap": true, "baseUrl": ".", "paths": { "@/*": ["./src/*"] }, "lib": ["esnext", "dom"], "types": [ "@dcloudio/types", + "@types/wechat-miniprogram", + "@uni-helper/uni-app-types" ] }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] } 注意:原配置 [代码]experimentalRuntimeMode[代码] 现无需添加。 开发工具回顾选择自己习惯的编辑器开发 uni-app 项目即可。 VS Code 和 微信开发者工具 关系 [图片] HbuilderX 和 微信开发者工具 关系 [图片]
01-03 - 多端框架用户成功案例
Donut 多端框架是小程序团队推出的移动应用开发框架。开发者可以使用小程序技术与工具,高效率开发移动应用,实现一次开发多端运行。现在已有不同领域的开发者选择多端框架,实现更高的开发经营效率。
07-10 - 多端框架全新上线!支持快速构建移动应用,你有什么新想法?
Donut 多端框架 支持使用小程序原生语法与工具开发移动应用,实现多端共用一套代码开发,有效降低研发与维护成本,提升开发效率和体验。 [图片] 功能亮点轻松解锁: 更高的开发效率:支持小程序原生语法,一次开发,多端编译和运行,实现高效开发 更低的开发门槛:全流程的开发工具,简单易用,让你轻松上手 更优质的用户体验:为用户带来接近原生界面的流畅交互体验 更丰富的业务场景:满足小程序与移动多端应用联动需求,拓展更多渠道场景,助力业务发展 多端框架现已全新上线!可分钟内体验你的多端应用,详情可查看 快速体验多端应用。也欢迎各位开发者访问 官网 以及 官方文档 了解更多内容。 为更好地满足开发者需求,欢迎广大开发者积极分享对多端框架的需求和建议。即日起至 2023 年 7 月 29 日,在评论区分享对多端框架的需求以及建议,精选评论的用户将获得官方精美礼品一份。 [图片] * 获奖名单将在「微信开放社区」本话题评论区进行公示
2023-06-27