File contents 移动开发域 · Mobile Development
域概览
原生开发 跨平台开发
├── iOS (SwiftUI/UIKit) ├── React Native (JS/TS)
├── Android (Compose/Kotlin) └── Flutter (Dart)
└── 共通:MVVM / 网络层 / 持久化 / 测试
iOS 开发
SwiftUI 核心模式
View 组件:struct MyView: View { var body: some View { ... } }
State 管理:
@State — 本地状态
@Binding — 父子双向绑定
@StateObject — 拥有 ObservableObject
@ObservedObject — 引用 ObservableObject
@EnvironmentObject / @Environment — 全局注入
ObservableObject:@Published 属性自动触发 UI 更新
Custom ViewModifier:struct CardModifier: ViewModifier + extension View { func cardStyle() }
生命周期:.task { await ... } / .onAppear / .onDisappear
UIKit 集成
UIViewControllerRepresentable:包装 UIViewController 到 SwiftUI
UIViewRepresentable:包装 UIView 到 SwiftUI
Coordinator 模式:处理 delegate 回调
Auto Layout:NSLayoutConstraint.activate([...]) + translatesAutoresizingMaskIntoConstraints = false
Combine 响应式
Publisher:URLSession.shared.dataTaskPublisher → map → decode → eraseToAnyPublisher
订阅:.sink(receiveCompletion:receiveValue:) + .store(in: &cancellables)
常用 Operators:debounce / removeDuplicates / combineLatest / flatMap
Subject:PassthroughSubject(无初始值)/ CurrentValueSubject(有初始值)
iOS 架构
MVVM(推荐):
Model:Codable 数据结构
Repository:protocol + async throws 方法
ViewModel:@MainActor class VM: ObservableObject + @Published 属性
View:@StateObject private var viewModel = VM()
VIPER(复杂场景):
View ←→ Presenter ←→ Interactor → Entity
Router 处理导航
网络层
APIClient:泛型 func get<T: Decodable>(_ path:) async throws -> T
Token 管理:request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
错误处理:enum APIError: Error { case invalidURL, invalidResponse, httpError(Int) }
数据持久化
UserDefaults:@propertyWrapper struct UserDefault<T> 简化访问
Keychain:SecItemAdd / SecItemCopyMatching 存储敏感数据
Core Data:NSPersistentContainer + NSManagedObjectContext
SwiftData(iOS 17+):@Model 宏简化持久化
iOS Checklist
Android 开发
Jetpack Compose 核心模式
Composable:@Composable fun MyScreen() { ... }
State 管理:
remember { mutableStateOf(value) } — 本地状态
rememberSaveable — 跨配置变更保存
derivedStateOf — 派生状态避免重组
LazyColumn:items(list, key = { it.id }) 提供稳定 key
Side Effects:
LaunchedEffect(key) — 启动协程
DisposableEffect(key) — 清理资源(onDispose)
SideEffect — 同步状态到外部
snapshotFlow { state } — 监听状态变化转 Flow
Navigation:NavHost + composable(route) + navController.navigate()
Custom Modifier:fun Modifier.myModifier(): Modifier = composed { ... }
ViewModel + StateFlow
StateFlow(推荐替代 LiveData):
MutableStateFlow(UiState()) + .asStateFlow()
_uiState.update { it.copy(isLoading = true) }
Compose 中:val uiState by viewModel.uiState.collectAsState()
UiState data class:封装 loading / error / data
Kotlin Coroutines & Flow
协程:viewModelScope.launch { withContext(Dispatchers.IO) { ... } }
并发:coroutineScope { val a = async { ... }; val b = async { ... } }
Flow:flow { emit(value) } + .flowOn(Dispatchers.IO)
StateFlow:.stateIn(scope, SharingStarted.WhileSubscribed(5000), initial)
搜索防抖:searchQuery.debounce(300).filter { it.isNotEmpty() }.flatMapLatest { ... }
Channel:Channel<Event>(BUFFERED) + .receiveAsFlow() 一次性事件
依赖注入 (Hilt)
@HiltAndroidApp Application + @AndroidEntryPoint Activity
@Module @InstallIn(SingletonComponent::class) 提供依赖
@Provides @Singleton 提供实例 / @Binds 绑定接口
ViewModel:@HiltViewModel class VM @Inject constructor(repo) + hiltViewModel()
Room 数据库
Entity:@Entity(tableName) + @PrimaryKey + @ColumnInfo
DAO:@Query / @Insert(onConflict = REPLACE) / @Delete + 返回 Flow<List<T>>
Database:@Database(entities, version) + Room.databaseBuilder
网络层 (Retrofit)
ApiService:@GET / @POST / @Path / @Query / @Body / @Multipart
Interceptor:AuthInterceptor 注入 Bearer Token
OkHttpClient:addInterceptor + connectTimeout
Android Checklist
跨平台开发
React Native vs Flutter
维度
React Native
Flutter
语言
TypeScript
Dart
渲染
原生组件(桥接)
自绘引擎(Skia)
性能
接近原生
接近原生
热重载
Fast Refresh
Hot Reload
生态
npm(成熟)
pub.dev(快速增长)
UI 一致性
跟随系统
完全一致
包体积
~7MB
~15MB
React Native 核心模式
组件:函数组件 + Hooks(useState / useEffect / useCallback / useMemo)
列表:FlatList + keyExtractor + initialNumToRender + windowSize
Navigation:@react-navigation/native + createNativeStackNavigator
状态管理:Redux Toolkit(createSlice + createAsyncThunk)/ Zustand
原生桥接:NativeModules 调用 iOS(Swift) / Android(Kotlin) 原生代码
性能:React.memo / Hermes 引擎 / 新架构 JSI(无桥接序列化)
Flutter 核心模式
Widget:StatelessWidget / StatefulWidget + setState
状态管理:
Provider:ChangeNotifier + Consumer / context.watch
Riverpod(推荐):FutureProvider / StateNotifierProvider + ref.watch
Navigation:go_router(GoRoute + context.go/push/pop)
原生桥接:MethodChannel + Platform Channels(iOS Swift / Android Kotlin)
性能:const 构造函数 / ListView.builder / RepaintBoundary / ValueKey
选型建议
场景
推荐
理由
团队有 Web 背景
React Native
学习成本低
追求极致性能/动画
Flutter
自绘引擎 60fps
UI 高度定制
Flutter
完全控制渲染
大量原生交互
React Native
桥接生态成熟
需要原生极致体验
原生开发
无桥接开销
跨平台 Checklist
通用最佳实践
实践
说明
MVVM 架构
分离 UI / 业务逻辑 / 数据层
依赖注入
Hilt(Android) / Protocol(iOS) / Context(RN)
响应式状态
StateFlow / Combine / Hooks / Riverpod
网络层封装
统一错误处理 + Token 管理 + 重试
本地持久化
Room / Core Data / AsyncStorage / Hive
列表优化
懒加载 + 稳定 key + 缓存
测试覆盖
ViewModel 单元测试 + UI 测试关键流程
触发词
iOS、SwiftUI、UIKit、Combine、Android、Jetpack Compose、Kotlin、React Native、Flutter、跨平台、移动开发、MVVM
1 --- 2 name: mobile 3 description: 移动开发。iOS、Android、SwiftUI、Jetpack Compose、React Native、Flutter、跨平台。当用户提到移动开发、iOS、Android、跨平台时路由到此。 4 license: MIT 5 --- 6
7 # 移动开发域 · Mobile Development
8
9 ## 域概览
10
11 ```
12 原生开发 跨平台开发
13 ├── iOS (SwiftUI/UIKit) ├── React Native (JS/TS)
14 ├── Android (Compose/Kotlin) └── Flutter (Dart)
15 └── 共通:MVVM / 网络层 / 持久化 / 测试
16 ```
17
18 ---
19
20 ## iOS 开发
21
22 ### SwiftUI 核心模式
23
24 - View 组件:`struct MyView: View { var body: some View { ... } }`
25 - State 管理:
26 - `@State` — 本地状态
27 - `@Binding` — 父子双向绑定
28 - `@StateObject` — 拥有 ObservableObject
29 - `@ObservedObject` — 引用 ObservableObject
30 - `@EnvironmentObject` / `@Environment` — 全局注入
31 - ObservableObject:`@Published` 属性自动触发 UI 更新
32 - Custom ViewModifier:`struct CardModifier: ViewModifier` + `extension View { func cardStyle() }`
33 - 生命周期:`.task { await ... }` / `.onAppear` / `.onDisappear`
34
35 ### UIKit 集成
36
37 - UIViewControllerRepresentable:包装 UIViewController 到 SwiftUI
38 - UIViewRepresentable:包装 UIView 到 SwiftUI
39 - Coordinator 模式:处理 delegate 回调
40 - Auto Layout:`NSLayoutConstraint.activate([...])` + `translatesAutoresizingMaskIntoConstraints = false`
41
42 ### Combine 响应式
43
44 - Publisher:`URLSession.shared.dataTaskPublisher` → `map` → `decode` → `eraseToAnyPublisher`
45 - 订阅:`.sink(receiveCompletion:receiveValue:)` + `.store(in: &cancellables)`
46 - 常用 Operators:`debounce` / `removeDuplicates` / `combineLatest` / `flatMap`
47 - Subject:`PassthroughSubject`(无初始值)/ `CurrentValueSubject`(有初始值)
48
49 ### iOS 架构
50
51 MVVM(推荐):
52 - Model:`Codable` 数据结构
53 - Repository:`protocol` + `async throws` 方法
54 - ViewModel:`@MainActor class VM: ObservableObject` + `@Published` 属性
55 - View:`@StateObject private var viewModel = VM()`
56
57 VIPER(复杂场景):
58 - View ←→ Presenter ←→ Interactor → Entity
59 - Router 处理导航
60
61 ### 网络层
62
63 - APIClient:泛型 `func get<T: Decodable>(_ path:) async throws -> T`
64 - Token 管理:`request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")`
65 - 错误处理:`enum APIError: Error { case invalidURL, invalidResponse, httpError(Int) }`
66
67 ### 数据持久化
68
69 - UserDefaults:`@propertyWrapper struct UserDefault<T>` 简化访问
70 - Keychain:`SecItemAdd` / `SecItemCopyMatching` 存储敏感数据
71 - Core Data:`NSPersistentContainer` + `NSManagedObjectContext`
72 - SwiftData(iOS 17+):`@Model` 宏简化持久化
73
74 ### iOS Checklist
75
76 - [ ] SwiftUI 优先,UIKit 按需集成
77 - [ ] `@MainActor` 确保 UI 线程安全
78 - [ ] async/await 替代回调
79 - [ ] 依赖注入提升可测试性
80 - [ ] LazyVStack/LazyHStack 优化大列表
81 - [ ] 图片缓存(NSCache)减少内存压力
82 - [ ] Keychain 存储敏感数据(非 UserDefaults)
83 - [ ] 单元测试覆盖 ViewModel + Mock Repository
84
85 ---
86
87 ## Android 开发
88
89 ### Jetpack Compose 核心模式
90
91 - Composable:`@Composable fun MyScreen() { ... }`
92 - State 管理:
93 - `remember { mutableStateOf(value) }` — 本地状态
94 - `rememberSaveable` — 跨配置变更保存
95 - `derivedStateOf` — 派生状态避免重组
96 - LazyColumn:`items(list, key = { it.id })` 提供稳定 key
97 - Side Effects:
98 - `LaunchedEffect(key)` — 启动协程
99 - `DisposableEffect(key)` — 清理资源(onDispose)
100 - `SideEffect` — 同步状态到外部
101 - `snapshotFlow { state }` — 监听状态变化转 Flow
102 - Navigation:`NavHost` + `composable(route)` + `navController.navigate()`
103 - Custom Modifier:`fun Modifier.myModifier(): Modifier = composed { ... }`
104
105 ### ViewModel + StateFlow
106
107 - StateFlow(推荐替代 LiveData):
108 - `MutableStateFlow(UiState())` + `.asStateFlow()`
109 - `_uiState.update { it.copy(isLoading = true) }`
110 - Compose 中:`val uiState by viewModel.uiState.collectAsState()`
111 - UiState data class:封装 loading / error / data
112
113 ### Kotlin Coroutines & Flow
114
115 - 协程:`viewModelScope.launch { withContext(Dispatchers.IO) { ... } }`
116 - 并发:`coroutineScope { val a = async { ... }; val b = async { ... } }`
117 - Flow:`flow { emit(value) }` + `.flowOn(Dispatchers.IO)`
118 - StateFlow:`.stateIn(scope, SharingStarted.WhileSubscribed(5000), initial)`
119 - 搜索防抖:`searchQuery.debounce(300).filter { it.isNotEmpty() }.flatMapLatest { ... }`
120 - Channel:`Channel<Event>(BUFFERED)` + `.receiveAsFlow()` 一次性事件
121
122 ### 依赖注入 (Hilt)
123
124 - `@HiltAndroidApp` Application + `@AndroidEntryPoint` Activity
125 - `@Module @InstallIn(SingletonComponent::class)` 提供依赖
126 - `@Provides @Singleton` 提供实例 / `@Binds` 绑定接口
127 - ViewModel:`@HiltViewModel class VM @Inject constructor(repo)` + `hiltViewModel()`
128
129 ### Room 数据库
130
131 - Entity:`@Entity(tableName)` + `@PrimaryKey` + `@ColumnInfo`
132 - DAO:`@Query` / `@Insert(onConflict = REPLACE)` / `@Delete` + 返回 `Flow<List<T>>`
133 - Database:`@Database(entities, version)` + `Room.databaseBuilder`
134
135 ### 网络层 (Retrofit)
136
137 - ApiService:`@GET` / `@POST` / `@Path` / `@Query` / `@Body` / `@Multipart`
138 - Interceptor:AuthInterceptor 注入 Bearer Token
139 - OkHttpClient:`addInterceptor` + `connectTimeout`
140
141 ### Android Checklist
142
143 - [ ] Compose 优先,View 系统按需使用
144 - [ ] StateFlow 替代 LiveData
145 - [ ] Hilt 依赖注入
146 - [ ] Room 本地持久化
147 - [ ] `key` 参数优化 LazyColumn
148 - [ ] `remember` / `derivedStateOf` 避免过度重组
149 - [ ] Coil 图片加载 + 缓存策略
150 - [ ] 单元测试覆盖 ViewModel(runTest + advanceUntilIdle)
151
152 ---
153
154 ## 跨平台开发
155
156 ### React Native vs Flutter
157
158 | 维度 | React Native | Flutter |
159 |------|--------------|---------|
160 | 语言 | TypeScript | Dart |
161 | 渲染 | 原生组件(桥接) | 自绘引擎(Skia) |
162 | 性能 | 接近原生 | 接近原生 |
163 | 热重载 | Fast Refresh | Hot Reload |
164 | 生态 | npm(成熟) | pub.dev(快速增长) |
165 | UI 一致性 | 跟随系统 | 完全一致 |
166 | 包体积 | ~7MB | ~15MB |
167
168 ### React Native 核心模式
169
170 - 组件:函数组件 + Hooks(useState / useEffect / useCallback / useMemo)
171 - 列表:`FlatList` + `keyExtractor` + `initialNumToRender` + `windowSize`
172 - Navigation:`@react-navigation/native` + `createNativeStackNavigator`
173 - 状态管理:Redux Toolkit(`createSlice` + `createAsyncThunk`)/ Zustand
174 - 原生桥接:`NativeModules` 调用 iOS(Swift) / Android(Kotlin) 原生代码
175 - 性能:`React.memo` / Hermes 引擎 / 新架构 JSI(无桥接序列化)
176
177 ### Flutter 核心模式
178
179 - Widget:StatelessWidget / StatefulWidget + `setState`
180 - 状态管理:
181 - Provider:`ChangeNotifier` + `Consumer` / `context.watch`
182 - Riverpod(推荐):`FutureProvider` / `StateNotifierProvider` + `ref.watch`
183 - Navigation:go_router(`GoRoute` + `context.go/push/pop`)
184 - 原生桥接:`MethodChannel` + Platform Channels(iOS Swift / Android Kotlin)
185 - 性能:`const` 构造函数 / `ListView.builder` / `RepaintBoundary` / `ValueKey`
186
187 ### 选型建议
188
189 | 场景 | 推荐 | 理由 |
190 |------|------|------|
191 | 团队有 Web 背景 | React Native | 学习成本低 |
192 | 追求极致性能/动画 | Flutter | 自绘引擎 60fps |
193 | UI 高度定制 | Flutter | 完全控制渲染 |
194 | 大量原生交互 | React Native | 桥接生态成熟 |
195 | 需要原生极致体验 | 原生开发 | 无桥接开销 |
196
197 ### 跨平台 Checklist
198
199 - [ ] 选型匹配团队技术栈和业务需求
200 - [ ] 列表优化:FlatList(RN) / ListView.builder(Flutter) + key
201 - [ ] 状态管理:Redux Toolkit(RN) / Riverpod(Flutter)
202 - [ ] 原生模块桥接方案验证
203 - [ ] 包体积优化:ProGuard(Android) / tree-shake-icons(Flutter)
204 - [ ] 性能基线:冷启动 < 1.5s / 渲染 > 55fps
205
206 ---
207
208 ## 通用最佳实践
209
210 | 实践 | 说明 |
211 |------|------|
212 | MVVM 架构 | 分离 UI / 业务逻辑 / 数据层 |
213 | 依赖注入 | Hilt(Android) / Protocol(iOS) / Context(RN) |
214 | 响应式状态 | StateFlow / Combine / Hooks / Riverpod |
215 | 网络层封装 | 统一错误处理 + Token 管理 + 重试 |
216 | 本地持久化 | Room / Core Data / AsyncStorage / Hive |
217 | 列表优化 | 懒加载 + 稳定 key + 缓存 |
218 | 测试覆盖 | ViewModel 单元测试 + UI 测试关键流程 |
219
220 ## 触发词
221
222 iOS、SwiftUI、UIKit、Combine、Android、Jetpack Compose、Kotlin、React Native、Flutter、跨平台、移动开发、MVVM
gabrielmoreira/agent-skills-mirror/tree/main/mirrors/repos/fengshao1227@ccg-workflow/templates/skills/domains/mobile commit 65d8fe90e1
Frequently asked questions How do I install the Mobile skill? Run npx skillmds@latest add gabrielmoreira/mobile in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
What does the Mobile skill do? 移动开发。iOS、Android、SwiftUI、Jetpack Compose、React Native、Flutter、跨平台。当用户提到移动开发、iOS、Android、跨平台时路由到此。 It is listed under Web & Frontend on SkillMD.
Is Mobile safe to use? This skill has not completed SkillMD's automated safety review yet. Capability flags: reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
Which AI agents work with Mobile? This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Is Mobile free to use? Yes. Installing skills from SkillMD is free. This skill is licensed under MIT.
Who published Mobile? gabrielmoreira (@gabrielmoreira) published this skill. Their other Agent Skills are listed on their SkillMD profile.