بنقرة واحدة
mobile-design
面向 iOS 与 Android 的移动优先设计思维与决策方法。触控交互、性能模式与平台规范。强调原则,不给固定模板。适用于 React Native、Flutter 或原生移动应用开发。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
面向 iOS 与 Android 的移动优先设计思维与决策方法。触控交互、性能模式与平台规范。强调原则,不给固定模板。适用于 React Native、Flutter 或原生移动应用开发。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
务实的编码标准—— 简洁、直接、不做过度设计、不写无用注释(Pragmatic coding standards)
性能分析原则。测量、分析与优化技术。
API design principles and decision-making(API 设计原则与决策逻辑)。REST vs GraphQL vs tRPC selection(选择)、response formats(响应格式)、versioning(版本控制)、pagination(分页)。
App Builder(应用构建编排器)主编排器。根据自然语言请求创建全栈应用,确定项目类型、选择技术栈并协调智能体。
Project scaffolding templates(项目脚手架模板)。用于从零创建新项目。包含 12 个技术栈模板。
Architectural decision-making framework(架构决策框架)。Requirements analysis(需求分析)、trade-off evaluation(权衡评估)、ADR documentation(架构决策记录)。Use when making architecture decisions or analyzing system design(用于架构决策与系统设计分析)。
| name | mobile-design |
| description | 面向 iOS 与 Android 的移动优先设计思维与决策方法。触控交互、性能模式与平台规范。强调原则,不给固定模板。适用于 React Native、Flutter 或原生移动应用开发。 |
| allowed-tools | Read, Glob, Grep, Bash |
理念: 触控优先。关注电量。尊重平台。支持离线。
核心原则: 移动端不是缩小版桌面端。按移动约束思考,先确认平台选择。
执行以下脚本进行验证(不要阅读脚本内容,直接运行):
| 脚本 | 用途 | 用法 |
|---|---|---|
scripts/mobile_audit.py | 移动端 UX 与触控审计 | python scripts/mobile_audit.py <project_path> |
** 在读完相关文件前,不要开始开发。**
| 文件 | 内容 | 状态 |
|---|---|---|
| mobile-design-thinking.md | [WARN] 反记忆化:强制思考,避免 AI 默认套路 | ⬜ CRITICAL FIRST |
| touch-psychology.md | Fitts' Law(费茨定律)、手势、触觉反馈、拇指区 | ⬜ CRITICAL |
| mobile-performance.md | RN/Flutter 性能、60fps、内存 | ⬜ CRITICAL |
| mobile-backend.md | 推送通知、离线同步、移动端 API | ⬜ CRITICAL |
| mobile-testing.md | 测试金字塔、E2E、平台差异 | ⬜ CRITICAL |
| mobile-debugging.md | 原生 vs JS 调试、Flipper、Logcat | ⬜ CRITICAL |
| mobile-navigation.md | Tab/Stack/Drawer、深链路 | ⬜ Read |
| mobile-typography.md | 系统字体、Dynamic Type、a11y | ⬜ Read |
| mobile-color-system.md | OLED、深色模式、电量意识 | ⬜ Read |
| decision-trees.md | 框架/状态/存储选型 | ⬜ Read |
mobile-design-thinking.md 是最高优先级。 该文件保证 AI 基于上下文思考,而不是套记忆模板。
| 平台 | 文件 | 内容 | 阅读时机 |
|---|---|---|---|
| iOS | platform-ios.md | Human Interface Guidelines、SF Pro、SwiftUI 模式 | iPhone/iPad 项目 |
| Android | platform-android.md | Material Design 3、Roboto、Compose 模式 | Android 项目 |
| 跨平台 | 上述两份 | 平台差异点 | React Native / Flutter |
[CRITICAL] 做 iOS -> 先读 platform-ios.md
[CRITICAL] 做 Android -> 先读 platform-android.md
[CRITICAL] 做跨平台 -> 两份都读,并应用条件化平台逻辑
停止!如果用户需求是开放式的,不要默认你常用的方案。
| 维度 | 提问 | 原因 |
|---|---|---|
| 平台(Platform) | “iOS、Android,还是双端?” | 影响所有设计决策 |
| 框架(Framework) | “React Native、Flutter,还是原生?” | 决定实现模式与工具链 |
| 导航(Navigation) | “Tab、Drawer,还是 Stack 导航?” | 核心 UX 架构决策 |
| 状态(State) | “状态管理用什么?(Zustand/Redux/Riverpod/BLoC)” | 架构基础 |
| 离线(Offline) | “是否需要离线可用?” | 决定数据策略 |
| 目标设备(Target devices) | “仅手机,还是也要支持平板?” | 影响布局复杂度 |
以下是 AI 常见默认错误,必须避免。
| [FAIL] 禁止 | 错误原因 | [OK] 必做 |
|---|---|---|
| 长列表用 ScrollView | 一次渲染所有项,内存暴涨 | 用 FlatList / FlashList / ListView.builder |
| renderItem 内联函数 | 每次渲染创建新函数,列表全量重渲染 | useCallback + React.memo |
| 缺少 keyExtractor | 用索引做 key,重排时易错 | 使用稳定唯一 ID |
| 不写 getItemLayout | 异步测量导致滚动抖动 | 固定高度项必须提供 |
| 到处 setState() | 引发不必要重建 | 精准状态管理 + const 构造 |
| Native driver: false | 动画受 JS 线程阻塞 | 一律 useNativeDriver: true |
| 生产环境保留 console.log | 严重阻塞 JS 线程 | 发布前清理日志 |
| 不做 React.memo/const | 任意变化触发全量重渲染 | 列表项默认做 memo |
| [FAIL] 禁止 | 错误原因 | [OK] 必做 |
|---|---|---|
| 点击区 < 44px | 难以准确点击,挫败感高 | 最小 44pt(iOS)/48dp(Android) |
| 目标间距 < 8px | 易误触相邻元素 | 保持 8-12px 间距 |
| 仅提供手势交互 | 运动能力受限用户无法操作 | 始终提供按钮备选 |
| 无加载态 | 用户误以为应用卡死 | 必须给出加载反馈 |
| 无错误态 | 用户无恢复路径 | 显示错误并提供重试 |
| 无离线处理 | 断网即崩溃/卡死 | 优雅降级 + 本地缓存 |
| 忽视平台习惯 | 用户肌肉记忆被破坏 | iOS 像 iOS,Android 像 Android |
| [FAIL] 禁止 | 错误原因 | [OK] 必做 |
|---|---|---|
| Token 放 AsyncStorage | root 后易被窃取 | SecureStore / Keychain / EncryptedSharedPreferences |
| 硬编码 API Key | APK/IPA 可逆向提取 | 环境变量 + 安全存储 |
| 跳过 SSL pinning | 易受 MITM 攻击 | 生产环境启用证书绑定 |
| 日志输出敏感数据 | 日志可被导出分析 | 禁止记录 token/password/PII |
| [FAIL] 禁止 | 错误原因 | [OK] 必做 |
|---|---|---|
| 业务逻辑写在 UI 层 | 难测试、难维护 | 分离 service 层 |
| 所有状态都放全局 | 重渲染增多、复杂度暴涨 | 默认局部状态,必要时再提升 |
| 把 deep linking 当补丁 | 通知分享场景会断裂 | 从第一天规划 deep links |
| 不做 dispose/cleanup | 内存泄漏、僵尸监听 | 清理订阅与计时器 |
统一(两端一致) 分化(平台特有)
----------------- -----------------
业务逻辑 [OK] 始终统一 -
数据层 [OK] 始终统一 -
核心功能 [OK] 始终统一 -
导航 - [OK] iOS:边缘滑返,Android:返回键
手势 - [OK] 平台原生手感
图标 - [OK] SF Symbols vs Material Icons
日期选择 - [OK] 原生选择器更贴合
弹窗/底部面板 - [OK] iOS:底部面板 vs Android:对话框
字体 - [OK] SF Pro vs Roboto(或自定义)
错误弹窗 - [OK] 遵循平台提示规范
| 元素 | iOS | Android |
|---|---|---|
| 主字体(Primary Font) | SF Pro / SF Compact | Roboto |
| 最小触控目标(Min Touch Target) | 44pt × 44pt | 48dp × 48dp |
| 返回导航(Back Navigation) | 左缘滑返 | 系统返回手势/按键 |
| 底部 Tab 图标(Bottom Tab Icons) | SF Symbols | Material Symbols |
| 操作表(Action Sheet) | UIActionSheet(自底部) | Bottom Sheet / Dialog |
| 进度表现(Progress) | Spinner | 线性进度(Material) |
| 下拉刷新(Pull to Refresh) | 原生 UIRefreshControl | SwipeRefreshLayout |
桌面端:鼠标准确(1px)
移动端:手指不精确(约 7mm 接触面)
-> 触控目标最小 44-48px
-> 重要操作放在拇指区(屏幕下部)
-> 破坏性操作远离易触区域
+-----------------------------+
| 难以触达 | <- 导航、菜单、返回
| (伸展) |
+-----------------------------+
| 可触达 | <- 次要操作
| (自然) |
+-----------------------------+
| 易触达 | <- 主要 CTA、底部 Tab
| (拇指自然弧线) | <- 主内容交互
+-----------------------------+
[ HOME ]
| 桌面端 | 移动端差异 |
|---|---|
| 多窗口并行 | 通常一次只处理一个任务 |
| 键盘快捷键 | 触控与手势 |
| 悬停(Hover)状态 | 无悬停(点即触发) |
| 大视口 | 空间受限、以纵向滚动为主 |
| 注意力稳定 | 高频被打断 |
深入阅读: touch-psychology.md
// [OK] 正确:Memoized renderItem + React.memo 包裹
const ListItem = React.memo(({ item }: { item: Item }) => (
<View style={styles.item}>
<Text>{item.title}</Text>
</View>
));
const renderItem = useCallback(
({ item }: { item: Item }) => <ListItem item={item} />,
[]
);
// [OK] 正确:FlatList + 全量优化
<FlatList
data={items}
renderItem={renderItem}
keyExtractor={(item) => item.id} // 稳定 ID,不要用索引
getItemLayout={(data, index) => ({
length: ITEM_HEIGHT,
offset: ITEM_HEIGHT * index,
index,
})}
removeClippedSubviews={true}
maxToRenderPerBatch={10}
windowSize={5}
/>;
// [OK] 正确:const 构造防止重建
class MyWidget extends StatelessWidget {
const MyWidget({super.key}); // CONST!
@override
Widget build(BuildContext context) {
return const Column( // CONST!
children: [
Text('Static content'),
MyConstantWidget(),
],
);
}
}
// [OK] 正确:ValueListenableBuilder 精准更新
ValueListenableBuilder<int>(
valueListenable: counter,
builder: (context, value, child) => Text('$value'),
child: const ExpensiveWidget(), // 不会重建
)
GPU 加速(快): CPU 受限(慢):
+-- transform +-- width, height
+-- opacity +-- top, left, right, bottom
+--(只用这些) +-- margin, padding
+--(避免动画这些)
完整指南: mobile-performance.md
在写任何移动端代码之前,必须完成此检查点:
CHECKPOINT:
Platform: [ iOS / Android / Both ]
Framework: [ React Native / Flutter / SwiftUI / Kotlin ]
Files Read: [ List the skill files you've read ]
3 Principles I Will Apply:
1. _______________
2. _______________
3. _______________
Anti-Patterns I Will Avoid:
1. _______________
2. _______________
示例:
CHECKPOINT:
Platform: iOS + Android (Cross-platform)
Framework: React Native + Expo
Files Read: touch-psychology.md, mobile-performance.md, platform-ios.md, platform-android.md
3 Principles I Will Apply:
1. FlatList with React.memo + useCallback for all lists
2. 48px touch targets, thumb zone for primary CTAs
3. Platform-specific navigation (edge swipe iOS, back button Android)
Anti-Patterns I Will Avoid:
1. ScrollView for lists -> FlatList
2. Inline renderItem -> Memoized
3. AsyncStorage for tokens -> SecureStore
[CRITICAL] 填不出检查点?-> 回去读技能文件。
WHAT ARE YOU BUILDING?
|
+-- Need OTA updates + rapid iteration + web team
| +-- [OK] React Native + Expo
|
+-- Need pixel-perfect custom UI + performance critical
| +-- [OK] Flutter
|
+-- Deep native features + single platform focus
| +-- iOS only -> SwiftUI
| +-- Android only -> Kotlin + Jetpack Compose
|
+-- Existing RN codebase + new features
| +-- [OK] React Native (bare workflow)
|
+-- Enterprise + existing Flutter codebase
+-- [OK] Flutter
完整决策树: decision-trees.md
需要更深入的指导时:
| 文件 | 使用时机 |
|---|---|
| mobile-design-thinking.md | FIRST!反记忆化,强制上下文思考 |
| touch-psychology.md | 触控交互、Fitts' Law、手势设计 |
| mobile-performance.md | RN/Flutter 优化、60fps、内存/电量 |
| platform-ios.md | iOS 特定设计、HIG 规范 |
| platform-android.md | Android 特定设计、Material Design 3 |
| mobile-navigation.md | 导航模式、深链 |
| mobile-typography.md | 字体尺度、系统字体、可访问性 |
| mobile-color-system.md | OLED 优化、深色模式、电量 |
| decision-trees.md | 框架、状态、存储决策 |
记住: 移动端用户更急、更易被打断、手指更不精确。按最糟糕条件设计:弱网、单手、强光、低电量。在那里可用,就能在任何地方可用。