96SEO 2026-08-14 18:14 7
话说回来,
最近我在考虑一个问题:
跨端开发能不能既保留共享代码带来的效率。又尽可能保留 Android 和 iOS 的原生交互体验?

在对比 uniapp、uniappx、Flutter、React Native、Kuikly 后我把目光最终放到了 Kotlin Multiplatform。
但打开 KMP 以后熟悉的感觉又来了:commonMainandroidMainiosMainCompose MultiplatformKotlin/Native…,按理说,
如果按照几年以前我学习新技术的方式。大概率是:
看官方文档。
收藏几篇教程。
再看两个 Demo。老实说,
B站大学相遇。
最终 Hello World 跑起来了但真正的项目还是没开始。
I want to learn KMP through a real Kotlin Multiplatform UX project.
I want to know:
Kotlin Multiplatform + Compose Multiplatform can we still keep near-native interaction hand feel when sharing a lot of UI and business logic?
TRAE Work 开始 MotionFlow 的制作!
- 程序分享
- Android/iOS 网站能力
**但先不要直接写代码**。我们要求 TRAE Work:
1️⃣ 查找 KMP / Compose Multiplatform / Android/iOS 当前实现方式
2️⃣ 给出一份完整技术方法
它返回了一份 MotionFlow KMP 技术方法,把能力分成两类:
KMP 的目标不是把所有代码都塞进 commonMain。再看真正关键的是,
技术方法出来以后我又让 TRAE Work 审了一遍。并要求它同时站在四种角色上:
我很喜欢这种用法。
以前学一个新技术时我最容易陷入的问题是:
"刚学会什么就想什么都用它实现。"**
而 TRAE Work 在这里更像是在提前帮我踩刹车。
比如 Haptic。
最终的思路不是:
kotlin
// 两个网站都震动30ms
再看而是。
kotlin
// commonMain只定义语义:
SelectionImpactSuccess // Haptic 类型
至于 Android 到底怎样反馈,iOS 又应该使用什么触觉效果,各自在网站层实现。
"共享的是业务语义,不是强行让两个网站一模一样。"
架构确认以后我才让 TRAE Work 开始创建 MotionFlow。
它先检查了我的开发环境:
接下来开始生成 KMP 项目骨架。老实说,但并没有“一次生成直接成功”的童话。
搭建过程中出现了 SDK 缓存问题、Navigation 版本冲突、Objective‑C 长度限制还有 Framework target 不匹配等问题。
其中一次 Android SDK 本身权限不足,需要 TRAE Work 调整 compileSdk 才能继续往下走。
我特意让它创建了一个 LEARNING_LOG.md,每解决一次真正的问题就记进去:
txt
出了什么错?
为什么出错,改了什么?最终怎么解决,
等项目骨架完成时这里已经记录了多次真实踩坑。比起十篇 “一分钟学完 KMP”,实际经验更靠谱!
项目骨架打通之后我开始做第一个真正页面 Explore。
最初只是普通列表。我让 TRAE Work 把它重新改成 HorizontalPager
Android 编译通过;iOS 编译通过,commonTest 也通过。
接着 TRAE Work 又帮我补齐 Xcode 项目,把 App 安装进 iPhone Simulator。第一次启动时还经历了一段小插曲: 模拟器明明已经启动,但截图里还是桌面。TRAE Work 检查进程 → 重拉起 App → 等待 Compose UI 加载…,直到最终…,
MOTIONFLOW 真正在 iPhone Simulator 上跑起来!️🌟️💪♂️️ ⚡️🏆♂️🦸♀️🏠⚙️🔬📱📊🛠️📈📉💻🖥️📲🚀💬✨🤩👏🏾🥇🚦🚧⏳🕰️⌛👀🐞❌✔✅🎯🎁🎉🤝🎨🤔👍🙌✌️🤞🏃♂️🏃♀️🏎🐇🐎🐴🔥🔥🔥🌈🌈🌈🔮🔭🔗🗺🎤🚁🛩✈🚤⛵🏝🏜⛰❄☃☂🍂🍁🍃🍀🌿🌱💚💙💜❤️😍😘😎😜😢😤👻👺👾👍🏼🙏😂🥰😉😷🤒😭👿👹♠♦♥♣⚔⚖⚗⚙⚛➕➖✖✴❓❗‼©®™ℹ︎❣✉✂✅‼⁇⁈↔↕↨⌘⌫⌦⏰⏱⏲⏳⌚⌛⏰⏲ '
看到 Kyoto 卡片缩放效果和页面指示器出现在 iPhone 上,我第一次有一种很明确的感觉: "这已经不再是‘我正在学 KMP’了。”🔑🔍 " 那一刻,我突然意识到 AI 辅助可以把‘想法’变成可运行实例。而不是停留在理论之上。
Explore 跑起来以后我继续让 TRAE Work 做 Detail。这一阶段加入这方面,
其中最让我欣喜的是 PlatformServices 的设计。在 commonMain 中。我只关心:
kotlin
triggerHaptic // Haptic type enum
shareDestination // 分享目标对象
具体到 Android,它走 Android 网站实现;到 iOS,则走 iOS Feedback Generator 或程序分享机制。这样我终于彻底理解了三层目录意义——不仅仅记住名称,而是真正知道何处负责何种职责!
Detail 页面里我还让 TRAE Work 实现了一个可拖拽 Bottom Sheet。它没有为了省事直接堆第三方库,而是用 Compose 自己做拖拽状态和吸附逻辑:
kotlin
Collapsed ↓ Half ↓ Expanded // 状态枚举
拖动时实时更新位置;松手后根据当前位置自动吸附,接下来触发对应 Haptic。这里有个我之前一直容易搞错的地方——将 “跨端” 理解为 “两端完全一致”。完成 MotionFlow 后我逐渐明白:
代码共享 + 一致体验 ≠ 同步行为;好的跨端方案应当: ①业务逻辑可以共享;②UI 可以尽量共享,③真正依赖网站习惯或硬件特性的功能,应交给各自的网站来调整;④共享不是目的——目标是 减少重复劳动,同时保持/体验更好质量。
回过头看整个过程。TRAE Work 确实写了很多代码,但如果只是“一键生成项目”,这篇文章就没啥价值。真正让我觉得它适合拿来学习陌生技术栈的是整个流程:
txt
查官方资料 → 设计架构 → 审查共享边界 → 检查本机环境 → 创建项目 →
处理建立错误 → Android/iOS 编译 → 在 iOS Simulator 上运行 →
继续完善真实交互 …
以前我最大的难题不是阅读文档,而是在从“大致了解”到“真的跑通一个东西”的过程中。每一步都会被各种细节卡住——从 Gradle 到 Xcode,从网络请求到硬件权限,从 Kotlin/Native 缓存到 Objective‑C 长度限制…,任何一点停顿都会让我回去再看教程或搜索答案,而不是继续往下推进。
TRAE Work 在这次项目里真正帮我缩短的是 从“想法”到“一件可运行实例”的距离。
MotionFlow 没有后端。没有数据库,也没有网络请求。这正好使其更适合纯粹关注主要能力——KMM 如何平衡共用与专属,实现近似原生体验?
为了回答这个问题,我真的碰到了这些关键概念与工具。而且把它们变成实际使用场景:
这些不再是抽象名词,而是真正参与项目建设的工具链和 API。说起来,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback