名称: software-mobile 描述: 面向iOS(Swift/SwiftUI/UIKit)、Android(Kotlin/Jetpack Compose)和跨平台(React Native、Flutter、Kotlin Multiplatform、WebView)的生产级移动应用开发和架构。用于导航、状态管理、网络请求、离线存储、身份验证/通行密钥、推送通知、性能优化、测试、CI/CD,以及应用商店发布准备。
移动开发技能 — 快速参考
本技能为移动开发者提供构建原生和跨平台移动应用的执行就绪模式。当您需要iOS/Android应用架构、UI组件、导航流程、API集成、离线存储、身份验证或移动特定功能时,应用这些模式。
何时使用此技能
当您需要时使用此技能:
- iOS应用开发(Swift、SwiftUI、UIKit)
- Android应用开发(Kotlin、Jetpack Compose)
- 跨平台开发(React Native、WebView)
- 移动应用架构和模式
- 导航和路由
- 状态管理(Redux、MobX、MVVM)
- 网络请求和API集成
- 本地数据存储(Core Data、Room、SQLite)
- 身份验证和会话管理
- 推送通知(APNs、FCM)
- 相机和媒体访问
- 位置服务
- 应用商店/Play商店部署
- 移动性能优化
- 离线优先架构
- 深度链接和通用链接
快速参考表
| 任务 | iOS | Android | 跨平台 | 何时使用 |
|---|---|---|---|---|
| 原生UI | SwiftUI + UIKit | Jetpack Compose + Views | React Native | 原生:最佳性能;跨平台:代码共享 |
| 导航 | NavigationStack | Navigation组件 | React Navigation | 平台特定以实现原生感 |
| 状态管理 | @State/@Observable | ViewModel + StateFlow | Redux/MobX | iOS:@Observable;Android:ViewModel;RN:Redux |
| 网络请求 | URLSession + async/await | Retrofit + Coroutines | Axios/Fetch | 原生:类型安全;RN:JavaScript生态系统 |
| 本地存储 | Core Data + SwiftData | Room数据库 | AsyncStorage/SQLite | 原生:完全控制;RN:更简单 |
| 推送通知 | APNs | FCM | React Native Firebase | 原生:平台特定;RN:统一API |
| 后台任务 | BGTaskScheduler | WorkManager | Headless JS | 用于计划/后台工作 |
| 深度链接 | 通用链接 | 应用链接 | React Navigation链接 | 用于基于URL的应用入口 |
| 身份验证 | AuthenticationServices | 凭证管理器 | Expo AuthSession | 用于社交/生物识别身份验证 |
| 分析 | Firebase/Amplitude | Firebase/Amplitude | Expo Analytics | 跟踪用户行为 |
决策树:平台选择
需要为[目标受众]构建移动应用:
│
├─ 仅iOS?
│ ├─ 新应用? → SwiftUI(现代、声明式)
│ ├─ 现有UIKit代码库? → UIKit + 逐步采用SwiftUI
│ └─ 复杂动画? → UIKit以进行精细控制
│
├─ 仅Android?
│ ├─ 新应用? → Jetpack Compose(现代、声明式)
│ ├─ 现有Views代码库? → Views + 逐步采用Compose
│ └─ 复杂自定义视图? → 自定义视图以进行精细控制
│
├─ 同时iOS和Android?
│ ├─ 需要最大性能/平台保真度?
│ │ └─ 构建单独的原生应用(Swift + Kotlin)
│ │
│ ├─ 需要更快开发 + 代码共享?
│ │ ├─ JavaScript/TypeScript团队? → React Native(Expo管理或裸项目)
│ │ ├─ Dart团队? → Flutter
│ │ └─ Kotlin团队? → Kotlin Multiplatform(KMP)
│ │
│ ├─ Kotlin Multiplatform(KMP)?
│ │ ├─ 仅共享业务逻辑? → KMP共享模块 + 原生UI
│ │ ├─ 共享一些UI? → Compose Multiplatform(验证iOS成熟度以满足需求)
│ │ └─ 共享模块需要平台UI? → 保持原生UI,共享领域/数据/网络
│ │
│ └─ 包装现有Web应用?
│ ├─ 简单包装? → WebView(iOS WKWebView / Android WebView)
│ └─ 需要原生功能? → Capacitor或React Native WebView
│
└─ 仅原型/MVP?
└─ React Native或Flutter以实现最快迭代
决策树:架构模式
选择架构模式?
│
├─ iOS(Swift)?
│ ├─ SwiftUI应用? → MVVM与@Observable/ObservableObject(基于操作系统基准)
│ ├─ 复杂SwiftUI? → TCA(Composable Architecture)以提高可测试性
│ ├─ UIKit应用? → MVVM-C(协调器模式)
│ ├─ 大型团队? → 清洁架构 + MVVM
│ └─ 简单应用? → MVC(Apple默认)
│
├─ Android(Kotlin)?
│ ├─ Compose应用? → MVVM与ViewModel + StateFlow
│ ├─ Views应用? → MVVM与LiveData
│ ├─ 大型团队? → 清洁架构 + MVVM
│ └─ 简单应用? → Activity/Fragment基础
│
└─ React Native?
├─ 小型应用? → Context API + useState
├─ 中型应用? → Redux Toolkit或Zustand
└─ 大型应用? → Redux + RTK Query + 基于功能的结构
决策树:数据持久化
需要在本地存储数据?
│
├─ 简单键值对?
│ ├─ iOS → UserDefaults
│ ├─ Android → SharedPreferences / DataStore
│ └─ RN → AsyncStorage
│
├─ 具有关系的结构化数据?
│ ├─ iOS → Core Data或SwiftData
│ ├─ Android → Room数据库
│ └─ RN → WatermelonDB或Realm
│
├─ 安全凭证?
│ ├─ iOS → 钥匙串
│ ├─ Android → EncryptedSharedPreferences / Keystore
│ └─ RN → react-native-keychain
│
└─ 大文件/媒体?
├─ iOS → FileManager(文档/缓存)
├─ Android → 内部/外部存储
└─ RN → react-native-fs
决策树:网络请求
需要进行API调用?
│
├─ iOS?
│ ├─ 简单REST? → URLSession + async/await
│ ├─ 复杂API? → URLSession + Codable
│ └─ GraphQL? → Apollo iOS
│
├─ Android?
│ ├─ 简单REST? → Retrofit + Coroutines
│ ├─ 复杂API? → Retrofit + OkHttp拦截器
│ └─ GraphQL? → Apollo Android
│
└─ React Native?
├─ 简单REST? → fetch()或Axios
├─ 复杂API? → RTK Query或React Query
└─ GraphQL? → Apollo Client
核心能力
iOS开发
- UI框架:SwiftUI(声明式)、UIKit(命令式)
- 架构:MVVM、清洁架构、协调器、TCA(Composable Architecture)
- 并发:Swift Concurrency(async/await、actors、TaskGroup);保持UI状态在
@MainActor上;根据情况启用严格并发检查 - 存储:Core Data、SwiftData、钥匙串
- 网络请求:URLSession、async/await模式
- 平台合规:隐私清单文件 + 必需原因API、后台执行限制、无障碍设置(动态类型、VoiceOver)
- 防御性解码:处理缺失字段、数组/字典格式、snake_case/camelCase
Android开发
- UI框架:Jetpack Compose(声明式)、Views(XML)
- 架构:MVVM、清洁架构、MVI
- 并发:Coroutines、Flow、LiveData
- 存储:Room、DataStore、Keystore
- 网络请求:Retrofit、OkHttp、Ktor
跨平台开发
- Kotlin Multiplatform(KMP):共享领域/数据/网络;保持原生UI;当共享UI值得约束时考虑Compose Multiplatform
- React Native:JavaScript/TypeScript;评估新架构就绪度和原生模块表面积;Expo管理路径通常是绿色项目最快的
- Flutter:Dart;高代码共享;根据需求验证平台特定差距和插件成熟度
- WebView:WKWebView(iOS)、WebView(Android)、JavaScript桥接
平台基准(验证当前要求)
iOS/iPadOS(核心)
- 隐私清单文件(应用 + 嵌入SDK)已维护和审查 https://developer.apple.com/documentation/bundlereferences/privacy_manifest_files
- 必需原因API已声明有效原因 https://developer.apple.com/documentation/bundlereferences/privacy_manifest_files
- 后台工作使用支持的原语(避免脆弱计时器) https://developer.apple.com/documentation/backgroundtasks
- 应用传输安全已配置;异常已合理化和文档化 https://developer.apple.com/documentation/bundlereferences/information_property_list/nsapptransportsecurity
- 并发已使用Swift Concurrency(async/await、actors、TaskGroup)实现,并使用当前Swift语言模式设置检查 https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html
- Swift 6迁移 / 严格并发指南在升级工具链时遵循 https://developer.apple.com/documentation/swift/adoptingswift6
- UI/UX遵循当前人机界面指南(包括无障碍) https://developer.apple.com/design/human-interface-guidelines/ios
Android(核心)
- 后台工作使用WorkManager进行可延迟、保证的工作 https://developer.android.com/topic/libraries/architecture/workmanager
- 网络调用和身份验证状态在进程死亡后存活(无隐藏单例假设)[推断]
- 目标SDK满足当前Google Play要求(验证政策 + 截止日期) https://support.google.com/googleplay/android-developer/answer/11926878
- 优先使用Play Integrity API而不是已弃用的SafetyNet Attestation https://developer.android.com/google/play/integrity
- 优先使用凭证管理器进行通行密钥和现代登录流程 https://developer.android.com/identity/sign-in/credential-manager
跨平台(核心)
- 功能对等是明确的(记录哪些是原生仅有的 vs 共享的)[推断]
- 桥接被视为公共API(版本化、测试和可观察)[推断]
- React Native升级遵循官方升级指南;根据您的原生模块表面积验证新架构就绪度 https://reactnative.dev/docs/upgrading
- Expo SDK升级遵循Expo发布说明和升级指南 https://expo.dev/changelog
可选:AI/自动化扩展
注意:除非应用包含AI/自动化功能,否则跳过。
- iOS:Core ML / 设备上推理原语 https://developer.apple.com/documentation/coreml
- Android:Google ML Kit https://developers.google.com/ml-kit
- 验证:模型大小/电池影响、离线/在线行为、用户控制(取消/撤销)和隐私边界[推断]
常见模式
应用启动清单
-
初始化依赖项
- 配置DI容器(Hilt/Koin/Swinject)
- 设置日志记录和崩溃报告
- 初始化分析
-
检查身份验证状态
- 验证存储的令牌
- 如果需要则刷新
- 路由到登录或主屏幕
-
配置应用状态
- 加载用户偏好
- 设置推送通知处理器
- 初始化深度链接处理
离线优先架构
1. 本地优先数据访问
- 始终从本地数据库读取
- 立即显示缓存数据
- 显示同步加载指示器
2. 后台同步
- 队列写入操作
- 当连接可用时同步
- 处理冲突解决
3. 乐观更新
- 立即更新UI
- 在后台同步
- 失败时回滚
推送通知设置
iOS(APNs):
1. 启用推送通知能力
2. 请求用户权限
3. 注册远程通知
4. 处理设备令牌
5. 实现通知委托
Android(FCM):
1. 添加Firebase到项目
2. 实现FirebaseMessagingService
3. 处理通知/数据消息
4. 管理通知渠道(Android 8+)
5. 处理后台/前台状态
性能优化
| 领域 | iOS | Android | 指标 |
|---|---|---|---|
| 启动时间 | 预热、懒加载 | 冷启动优化 | < 2秒冷启动 |
| 列表滚动 | LazyVStack、预取 | LazyColumn、分页 | 60 FPS |
| 图像加载 | AsyncImage、缓存 | Coil/Glide、磁盘缓存 | < 100毫秒可见 |
| 内存 | Instruments分析 | LeakCanary、分析器 | 无内存泄漏 |
| 电池 | 后台应用刷新限制 | Doze模式合规 | 最小消耗 |
应用商店部署清单
iOS应用商店
- [ ] 应用图标(所有必需尺寸)
- [ ] 启动屏幕配置
- [ ] 每个目标和嵌入框架的隐私清单(iOS 18+)
- [ ] 必需原因API已声明理由
- [ ] 第三方SDK隐私清单附加;SDK签名证明(iOS 19+)
- [ ] Info.plist权限解释
- [ ] 应用商店截图(所有设备尺寸)
- [ ] 应用商店描述和关键词
- [ ] 隐私政策URL
- [ ] TestFlight beta测试
Google Play商店
- [ ] 应用图标和功能图
- [ ] 商店列表截图
- [ ] 隐私政策URL
- [ ] 内容评级问卷
- [ ] 目标API级别合规
- [ ] 数据安全表
- [ ] 内部/封闭/开放测试轨道
导航
资源
- references/ios-best-practices.md — iOS架构、并发、测试、性能、防御性解码和无障碍
- references/android-best-practices.md — Android/Kotlin架构、coroutines、Compose、测试、性能
- references/operational-playbook.md — 移动架构模式、平台特定指南、安全说明和决策表
- README.md — 文件夹概述和使用说明
- data/sources.json — 按平台整理的参考资源
共享清单
- …/software-clean-code-standard/assets/checklists/mobile-release-checklist.md — 产品无关的移动发布就绪清单(核心 + 可选AI)
共享工具(集中模式 — 提取,不重复)
- …/software-clean-code-standard/utilities/auth-utilities.md — Argon2id、jose JWT、OAuth 2.1/PKCE(移动客户端后端身份验证)
- …/software-clean-code-standard/utilities/error-handling.md — 错误模式、Result类型
- …/software-clean-code-standard/utilities/resilience-utilities.md — 重试、网络调用的断路器
- …/software-clean-code-standard/utilities/logging-utilities.md — 结构化日志模式
- …/software-clean-code-standard/utilities/testing-utilities.md — 测试工厂、夹具、模拟
- …/software-clean-code-standard/references/clean-code-standard.md — 规范的清洁代码规则(
CC-*)用于引用
模板
- Swift:assets/swift/template-swift.md、assets/swift/template-swift-concurrency.md、assets/swift/template-swift-combine.md、assets/swift/template-swift-performance.md、assets/swift/template-swift-testing.md
- SwiftUI:assets/swiftui/template-swiftui-advanced.md
- Kotlin/Android:assets/kotlin/template-kotlin.md、assets/kotlin/template-kotlin-coroutines.md、assets/kotlin/template-kotlin-compose-advanced.md、assets/kotlin/template-kotlin-testing.md
- 跨平台:assets/cross-platform/template-platform-patterns.md、assets/cross-platform/template-webview.md
避免的反模式
| 反模式 | 问题 | 解决方案 |
|---|---|---|
| 阻塞主线程 | UI冻结、ANRs | 对所有I/O使用async/coroutines |
| 庞大的视图控制器 | 难以测试/维护 | 提取到MVVM/服务 |
| 硬编码字符串 | 无本地化 | 使用NSLocalizedString/strings.xml |
| 忽略生命周期 | 内存泄漏、崩溃 | 尊重activity/view生命周期 |
| 无离线处理 | 无网络时用户体验差 | 缓存数据、队列操作 |
| 在代码中存储秘密 | 安全漏洞 | 使用钥匙串/Keystore |
使用decode()而无回退 |
在缺失/错误格式API数据时崩溃 | 使用decodeIfPresent()带默认值 |
| 缺少@Bindable用于@Observable | NavigationStack绑定不工作 | 在body中添加@Bindable var vm = vm |
趋势意识协议
重要:当用户询问移动开发的推荐问题时,您必须使用网络搜索功能(如果可用)在回答前检查当前趋势。如果网络搜索不可用,请说明并使用data/sources.json,明确标记推荐可能已过时。
触发条件
- “对于[用例],最好的移动框架是什么?”
- “我应该使用什么进行[跨平台/原生/混合]开发?”
- “iOS/Android开发的最新动态是什么?”
- “[Swift/Kotlin/React Native]的当前最佳实践?”
- “在2026年,[React Native/Flutter/Expo]还相关吗?”
- “[React Native] vs [Flutter] vs [原生]?”
- “对于[离线/推送/深度链接]的最佳方法?”
必需搜索
- 搜索:
"移动开发最佳实践 2026" - 搜索:
"[iOS/Android/React Native/Flutter] 更新 2026" - 搜索:
"移动框架比较 2026" - 搜索:
"[Expo/Swift/Kotlin] 新功能 2026"
报告内容
搜索后,提供:
- 当前格局:现在流行的框架/方法是什么
- 新兴趋势:正在获得关注的新模式或工具
- 已弃用/衰退:正在失去相关性的方法
- 推荐:基于新数据和最近发布
示例主题(用新搜索验证)
- 当前iOS + Swift Concurrency迁移指南
- 当前Play目标SDK政策和身份/身份验证指南
- React Native新架构就绪度和升级痛点
- Expo管理 vs 裸React Native权衡
- 2026年Flutter vs React Native vs KMP生态系统
- 2026年Compose Multiplatform对iOS的就绪度
相关技能
- …/software-frontend/SKILL.md — 面向Web的UI模式和Next.js集成
- …/software-backend/SKILL.md — 移动客户端的API设计、身份验证和后端合约
- …/qa-testing-strategy/SKILL.md — 移动CI、测试策略和可靠性门
- …/qa-resilience/SKILL.md — 网络化移动应用的弹性模式
- …/qa-testing-ios/SKILL.md — 以iOS为重点的测试规划、XCTest/Swift测试模式、设备矩阵和应用健康检查
- …/software-ui-ux-design/SKILL.md — 移动UI/UX设计模式和无障碍