@mison/ag-kit-cn 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/.agent/ARCHITECTURE.md +285 -0
- package/.agent/agents/backend-specialist.md +268 -0
- package/.agent/agents/code-archaeologist.md +106 -0
- package/.agent/agents/database-architect.md +225 -0
- package/.agent/agents/debugger.md +225 -0
- package/.agent/agents/devops-engineer.md +242 -0
- package/.agent/agents/documentation-writer.md +104 -0
- package/.agent/agents/explorer-agent.md +73 -0
- package/.agent/agents/frontend-specialist.md +618 -0
- package/.agent/agents/game-developer.md +162 -0
- package/.agent/agents/mobile-developer.md +382 -0
- package/.agent/agents/orchestrator.md +438 -0
- package/.agent/agents/penetration-tester.md +188 -0
- package/.agent/agents/performance-optimizer.md +187 -0
- package/.agent/agents/product-manager.md +112 -0
- package/.agent/agents/product-owner.md +95 -0
- package/.agent/agents/project-planner.md +405 -0
- package/.agent/agents/qa-automation-engineer.md +103 -0
- package/.agent/agents/security-auditor.md +170 -0
- package/.agent/agents/seo-specialist.md +111 -0
- package/.agent/agents/test-engineer.md +158 -0
- package/.agent/mcp_config.json +12 -0
- package/.agent/rules/GEMINI.md +273 -0
- package/.agent/scripts/auto_preview.py +148 -0
- package/.agent/scripts/checklist.py +217 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/verify_all.py +327 -0
- package/.agent/skills/api-patterns/SKILL.md +84 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +74 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/architecture/SKILL.md +57 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/bash-linux/SKILL.md +201 -0
- package/.agent/skills/behavioral-modes/SKILL.md +264 -0
- package/.agent/skills/brainstorming/SKILL.md +164 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
- package/.agent/skills/clean-code/SKILL.md +200 -0
- package/.agent/skills/code-review-checklist/SKILL.md +125 -0
- package/.agent/skills/database-design/SKILL.md +54 -0
- package/.agent/skills/database-design/database-selection.md +43 -0
- package/.agent/skills/database-design/indexing.md +39 -0
- package/.agent/skills/database-design/migrations.md +50 -0
- package/.agent/skills/database-design/optimization.md +36 -0
- package/.agent/skills/database-design/orm-selection.md +30 -0
- package/.agent/skills/database-design/schema-design.md +56 -0
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +418 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +307 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/.agent/skills/lint-and-validate/SKILL.md +44 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/mobile-design/SKILL.md +394 -0
- package/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/.agent/skills/mobile-design/mobile-typography.md +432 -0
- package/.agent/skills/mobile-design/platform-android.md +666 -0
- package/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +194 -0
- package/.agent/skills/performance-profiling/SKILL.md +149 -0
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/.agent/skills/plan-writing/SKILL.md +152 -0
- package/.agent/skills/powershell-windows/SKILL.md +166 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/red-team-tactics/SKILL.md +203 -0
- package/.agent/skills/rust-pro/SKILL.md +190 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +114 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/.agent/workflows/brainstorm.md +113 -0
- package/.agent/workflows/create.md +59 -0
- package/.agent/workflows/debug.md +103 -0
- package/.agent/workflows/deploy.md +176 -0
- package/.agent/workflows/enhance.md +63 -0
- package/.agent/workflows/orchestrate.md +242 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +80 -0
- package/.agent/workflows/restore-localize-compat.md +525 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +295 -0
- package/AGENT_FLOW.md +609 -0
- package/CHANGELOG.md +68 -0
- package/LICENSE +21 -0
- package/README.md +260 -0
- package/bin/adapters/base.js +63 -0
- package/bin/adapters/codex.js +391 -0
- package/bin/adapters/gemini.js +137 -0
- package/bin/ag-kit.js +1336 -0
- package/bin/core/builder.js +80 -0
- package/bin/core/generator.js +59 -0
- package/bin/core/resource-loader.js +64 -0
- package/bin/core/transformer.js +208 -0
- package/bin/interactive.js +65 -0
- package/bin/utils/atomic-writer.js +97 -0
- package/bin/utils/git-helper.js +68 -0
- package/bin/utils/managed-block.js +65 -0
- package/bin/utils/manifest.js +241 -0
- package/bin/utils.js +82 -0
- package/docs/codex-rules-template.md +36 -0
- package/docs/mapping-spec.md +68 -0
- package/docs/multi-target-adapter.md +80 -0
- package/docs/official/README.md +53 -0
- package/docs/official/antigravity/agent-modes-settings.md +64 -0
- package/docs/official/antigravity/rules-workflows.md +96 -0
- package/docs/official/antigravity/skills.md +147 -0
- package/docs/official/codex/agents-md.md +119 -0
- package/docs/official/codex/config-advanced.md +358 -0
- package/docs/official/codex/config-basic.md +141 -0
- package/docs/official/codex/config-reference.md +223 -0
- package/docs/official/codex/config-sample.md +216 -0
- package/docs/official/codex/mcp.md +107 -0
- package/docs/official/codex/rules.md +79 -0
- package/docs/official/codex/skills.md +114 -0
- package/docs/official/sources-index.md +32 -0
- package/docs/operations.md +145 -0
- package/docs/terminology-style-guide.md +69 -0
- package/package.json +51 -0
- package/scripts/postinstall-check.js +112 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mobile-design
|
|
3
|
+
description: 面向 iOS 与 Android 的移动优先设计思维与决策方法。触控交互、性能模式与平台规范。强调原则,不给固定模板。适用于 React Native、Flutter 或原生移动应用开发。
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 移动端设计系统
|
|
8
|
+
|
|
9
|
+
> **理念:** 触控优先。关注电量。尊重平台。支持离线。
|
|
10
|
+
> **核心原则:** 移动端不是缩小版桌面端。按移动约束思考,先确认平台选择。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🔧 运行时脚本
|
|
15
|
+
|
|
16
|
+
**执行以下脚本进行验证(不要阅读脚本内容,直接运行):**
|
|
17
|
+
|
|
18
|
+
| 脚本 | 用途 | 用法 |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| `scripts/mobile_audit.py` | 移动端 UX 与触控审计 | `python scripts/mobile_audit.py <project_path>` |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🔴 强制:开始工作前先阅读参考文件
|
|
25
|
+
|
|
26
|
+
**⛔ 在读完相关文件前,不要开始开发。**
|
|
27
|
+
|
|
28
|
+
### 通用文件(始终必读)
|
|
29
|
+
|
|
30
|
+
| 文件 | 内容 | 状态 |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| **[mobile-design-thinking.md](mobile-design-thinking.md)** | **⚠️ 反记忆化:强制思考,避免 AI 默认套路** | **⬜ CRITICAL FIRST** |
|
|
33
|
+
| **[touch-psychology.md](touch-psychology.md)** | **Fitts' Law(费茨定律)、手势、触觉反馈、拇指区** | **⬜ CRITICAL** |
|
|
34
|
+
| **[mobile-performance.md](mobile-performance.md)** | **RN/Flutter 性能、60fps、内存** | **⬜ CRITICAL** |
|
|
35
|
+
| **[mobile-backend.md](mobile-backend.md)** | **推送通知、离线同步、移动端 API** | **⬜ CRITICAL** |
|
|
36
|
+
| **[mobile-testing.md](mobile-testing.md)** | **测试金字塔、E2E、平台差异** | **⬜ CRITICAL** |
|
|
37
|
+
| **[mobile-debugging.md](mobile-debugging.md)** | **原生 vs JS 调试、Flipper、Logcat** | **⬜ CRITICAL** |
|
|
38
|
+
| [mobile-navigation.md](mobile-navigation.md) | Tab/Stack/Drawer、深链路 | ⬜ Read |
|
|
39
|
+
| [mobile-typography.md](mobile-typography.md) | 系统字体、Dynamic Type、a11y | ⬜ Read |
|
|
40
|
+
| [mobile-color-system.md](mobile-color-system.md) | OLED、深色模式、电量意识 | ⬜ Read |
|
|
41
|
+
| [decision-trees.md](decision-trees.md) | 框架/状态/存储选型 | ⬜ Read |
|
|
42
|
+
|
|
43
|
+
> 🧠 **mobile-design-thinking.md 是最高优先级。** 该文件保证 AI 基于上下文思考,而不是套记忆模板。
|
|
44
|
+
|
|
45
|
+
### 平台专项文件(按目标平台阅读)
|
|
46
|
+
|
|
47
|
+
| 平台 | 文件 | 内容 | 阅读时机 |
|
|
48
|
+
| --- | --- | --- | --- |
|
|
49
|
+
| **iOS** | [platform-ios.md](platform-ios.md) | Human Interface Guidelines、SF Pro、SwiftUI 模式 | iPhone/iPad 项目 |
|
|
50
|
+
| **Android** | [platform-android.md](platform-android.md) | Material Design 3、Roboto、Compose 模式 | Android 项目 |
|
|
51
|
+
| **跨平台** | 上述两份 | 平台差异点 | React Native / Flutter |
|
|
52
|
+
|
|
53
|
+
> 🔴 **做 iOS → 先读 platform-ios.md**
|
|
54
|
+
> 🔴 **做 Android → 先读 platform-android.md**
|
|
55
|
+
> 🔴 **做跨平台 → 两份都读,并应用条件化平台逻辑**
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## ⚠️ 强制:先问再假设(必选)
|
|
60
|
+
|
|
61
|
+
> **停止!如果用户需求是开放式的,不要默认你常用的方案。**
|
|
62
|
+
|
|
63
|
+
### 未明确时必须询问:
|
|
64
|
+
|
|
65
|
+
| 维度 | 提问 | 原因 |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| **平台(Platform)** | “iOS、Android,还是双端?” | 影响所有设计决策 |
|
|
68
|
+
| **框架(Framework)** | “React Native、Flutter,还是原生?” | 决定实现模式与工具链 |
|
|
69
|
+
| **导航(Navigation)** | “Tab、Drawer,还是 Stack 导航?” | 核心 UX 架构决策 |
|
|
70
|
+
| **状态(State)** | “状态管理用什么?(Zustand/Redux/Riverpod/BLoC)” | 架构基础 |
|
|
71
|
+
| **离线(Offline)** | “是否需要离线可用?” | 决定数据策略 |
|
|
72
|
+
| **目标设备(Target devices)** | “仅手机,还是也要支持平板?” | 影响布局复杂度 |
|
|
73
|
+
|
|
74
|
+
### ⛔ AI 移动端反模式(YASAK LİSTESİ)
|
|
75
|
+
|
|
76
|
+
> 🚫 **以下是 AI 常见默认错误,必须避免。**
|
|
77
|
+
|
|
78
|
+
#### 性能类禁忌
|
|
79
|
+
|
|
80
|
+
| ❌ 禁止 | 错误原因 | ✅ 必做 |
|
|
81
|
+
| --- | --- | --- |
|
|
82
|
+
| **长列表用 ScrollView** | 一次渲染所有项,内存暴涨 | 用 `FlatList` / `FlashList` / `ListView.builder` |
|
|
83
|
+
| **renderItem 内联函数** | 每次渲染创建新函数,列表全量重渲染 | `useCallback` + `React.memo` |
|
|
84
|
+
| **缺少 keyExtractor** | 用索引做 key,重排时易错 | 使用稳定唯一 ID |
|
|
85
|
+
| **不写 getItemLayout** | 异步测量导致滚动抖动 | 固定高度项必须提供 |
|
|
86
|
+
| **到处 setState()** | 引发不必要重建 | 精准状态管理 + `const` 构造 |
|
|
87
|
+
| **Native driver: false** | 动画受 JS 线程阻塞 | 一律 `useNativeDriver: true` |
|
|
88
|
+
| **生产环境保留 console.log** | 严重阻塞 JS 线程 | 发布前清理日志 |
|
|
89
|
+
| **不做 React.memo/const** | 任意变化触发全量重渲染 | 列表项默认做 memo |
|
|
90
|
+
|
|
91
|
+
#### 触控/UX 禁忌
|
|
92
|
+
|
|
93
|
+
| ❌ 禁止 | 错误原因 | ✅ 必做 |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| **点击区 < 44px** | 难以准确点击,挫败感高 | 最小 44pt(iOS)/48dp(Android) |
|
|
96
|
+
| **目标间距 < 8px** | 易误触相邻元素 | 保持 8-12px 间距 |
|
|
97
|
+
| **仅提供手势交互** | 运动能力受限用户无法操作 | 始终提供按钮备选 |
|
|
98
|
+
| **无加载态** | 用户误以为应用卡死 | 必须给出加载反馈 |
|
|
99
|
+
| **无错误态** | 用户无恢复路径 | 显示错误并提供重试 |
|
|
100
|
+
| **无离线处理** | 断网即崩溃/卡死 | 优雅降级 + 本地缓存 |
|
|
101
|
+
| **忽视平台习惯** | 用户肌肉记忆被破坏 | iOS 像 iOS,Android 像 Android |
|
|
102
|
+
|
|
103
|
+
#### 安全类禁忌
|
|
104
|
+
|
|
105
|
+
| ❌ 禁止 | 错误原因 | ✅ 必做 |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
| **Token 放 AsyncStorage** | root 后易被窃取 | `SecureStore` / `Keychain` / `EncryptedSharedPreferences` |
|
|
108
|
+
| **硬编码 API Key** | APK/IPA 可逆向提取 | 环境变量 + 安全存储 |
|
|
109
|
+
| **跳过 SSL pinning** | 易受 MITM 攻击 | 生产环境启用证书绑定 |
|
|
110
|
+
| **日志输出敏感数据** | 日志可被导出分析 | 禁止记录 token/password/PII |
|
|
111
|
+
|
|
112
|
+
#### 架构类禁忌
|
|
113
|
+
|
|
114
|
+
| ❌ 禁止 | 错误原因 | ✅ 必做 |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| **业务逻辑写在 UI 层** | 难测试、难维护 | 分离 service 层 |
|
|
117
|
+
| **所有状态都放全局** | 重渲染增多、复杂度暴涨 | 默认局部状态,必要时再提升 |
|
|
118
|
+
| **把 deep linking 当补丁** | 通知分享场景会断裂 | 从第一天规划 deep links |
|
|
119
|
+
| **不做 dispose/cleanup** | 内存泄漏、僵尸监听 | 清理订阅与计时器 |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 📱 平台决策矩阵
|
|
124
|
+
|
|
125
|
+
### 何时统一,何时分化
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
统一(两端一致) 分化(平台特有)
|
|
129
|
+
───────────────── ─────────────────
|
|
130
|
+
业务逻辑 ✅ 始终统一 -
|
|
131
|
+
数据层 ✅ 始终统一 -
|
|
132
|
+
核心功能 ✅ 始终统一 -
|
|
133
|
+
|
|
134
|
+
导航 - ✅ iOS:边缘滑返,Android:返回键
|
|
135
|
+
手势 - ✅ 平台原生手感
|
|
136
|
+
图标 - ✅ SF Symbols vs Material Icons
|
|
137
|
+
日期选择 - ✅ 原生选择器更贴合
|
|
138
|
+
弹窗/底部面板 - ✅ iOS:底部面板 vs Android:对话框
|
|
139
|
+
字体 - ✅ SF Pro vs Roboto(或自定义)
|
|
140
|
+
错误弹窗 - ✅ 遵循平台提示规范
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 快速参考:平台默认值
|
|
144
|
+
|
|
145
|
+
| 元素 | iOS | Android |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| **主字体(Primary Font)** | SF Pro / SF Compact | Roboto |
|
|
148
|
+
| **最小触控目标(Min Touch Target)** | 44pt × 44pt | 48dp × 48dp |
|
|
149
|
+
| **返回导航(Back Navigation)** | 左缘滑返 | 系统返回手势/按键 |
|
|
150
|
+
| **底部 Tab 图标(Bottom Tab Icons)** | SF Symbols | Material Symbols |
|
|
151
|
+
| **操作表(Action Sheet)** | UIActionSheet(自底部) | Bottom Sheet / Dialog |
|
|
152
|
+
| **进度表现(Progress)** | Spinner | 线性进度(Material) |
|
|
153
|
+
| **下拉刷新(Pull to Refresh)** | 原生 UIRefreshControl | SwipeRefreshLayout |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 🧠 移动端 UX 心理学(速查)
|
|
158
|
+
|
|
159
|
+
### 触控版 Fitts' Law(费茨定律)
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
桌面端:鼠标准确(1px)
|
|
163
|
+
移动端:手指不精确(约 7mm 接触面)
|
|
164
|
+
|
|
165
|
+
→ 触控目标最小 44-48px
|
|
166
|
+
→ 重要操作放在拇指区(屏幕下部)
|
|
167
|
+
→ 破坏性操作远离易触区域
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 拇指舒适区(单手使用)
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
┌─────────────────────────────┐
|
|
174
|
+
│ 难以触达 │ ← 导航、菜单、返回
|
|
175
|
+
│ (伸展) │
|
|
176
|
+
├─────────────────────────────┤
|
|
177
|
+
│ 可触达 │ ← 次要操作
|
|
178
|
+
│ (自然) │
|
|
179
|
+
├─────────────────────────────┤
|
|
180
|
+
│ 易触达 │ ← 主要 CTA、底部 Tab
|
|
181
|
+
│ (拇指自然弧线) │ ← 主内容交互
|
|
182
|
+
└─────────────────────────────┘
|
|
183
|
+
[ HOME ]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 移动端认知负荷差异
|
|
187
|
+
|
|
188
|
+
| 桌面端 | 移动端差异 |
|
|
189
|
+
| --- | --- |
|
|
190
|
+
| 多窗口并行 | 通常一次只处理一个任务 |
|
|
191
|
+
| 键盘快捷键 | 触控与手势 |
|
|
192
|
+
| 悬停(Hover)状态 | 无悬停(点即触发) |
|
|
193
|
+
| 大视口 | 空间受限、以纵向滚动为主 |
|
|
194
|
+
| 注意力稳定 | 高频被打断 |
|
|
195
|
+
|
|
196
|
+
深入阅读: [touch-psychology.md](touch-psychology.md)
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## ⚡ 性能原则(速查)
|
|
201
|
+
|
|
202
|
+
### React Native 关键规则
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
// ✅ 正确:Memoized renderItem + React.memo 包裹
|
|
206
|
+
const ListItem = React.memo(({ item }: { item: Item }) => (
|
|
207
|
+
<View style={styles.item}>
|
|
208
|
+
<Text>{item.title}</Text>
|
|
209
|
+
</View>
|
|
210
|
+
));
|
|
211
|
+
|
|
212
|
+
const renderItem = useCallback(
|
|
213
|
+
({ item }: { item: Item }) => <ListItem item={item} />,
|
|
214
|
+
[]
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
// ✅ 正确:FlatList + 全量优化
|
|
218
|
+
<FlatList
|
|
219
|
+
data={items}
|
|
220
|
+
renderItem={renderItem}
|
|
221
|
+
keyExtractor={(item) => item.id} // 稳定 ID,不要用索引
|
|
222
|
+
getItemLayout={(data, index) => ({
|
|
223
|
+
length: ITEM_HEIGHT,
|
|
224
|
+
offset: ITEM_HEIGHT * index,
|
|
225
|
+
index,
|
|
226
|
+
})}
|
|
227
|
+
removeClippedSubviews={true}
|
|
228
|
+
maxToRenderPerBatch={10}
|
|
229
|
+
windowSize={5}
|
|
230
|
+
/>;
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Flutter 关键规则
|
|
234
|
+
|
|
235
|
+
```dart
|
|
236
|
+
// ✅ 正确:const 构造防止重建
|
|
237
|
+
class MyWidget extends StatelessWidget {
|
|
238
|
+
const MyWidget({super.key}); // CONST!
|
|
239
|
+
|
|
240
|
+
@override
|
|
241
|
+
Widget build(BuildContext context) {
|
|
242
|
+
return const Column( // CONST!
|
|
243
|
+
children: [
|
|
244
|
+
Text('Static content'),
|
|
245
|
+
MyConstantWidget(),
|
|
246
|
+
],
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// ✅ 正确:ValueListenableBuilder 精准更新
|
|
252
|
+
ValueListenableBuilder<int>(
|
|
253
|
+
valueListenable: counter,
|
|
254
|
+
builder: (context, value, child) => Text('$value'),
|
|
255
|
+
child: const ExpensiveWidget(), // 不会重建
|
|
256
|
+
)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 动画性能
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
GPU 加速(快): CPU 受限(慢):
|
|
263
|
+
├── transform ├── width, height
|
|
264
|
+
├── opacity ├── top, left, right, bottom
|
|
265
|
+
└──(只用这些) ├── margin, padding
|
|
266
|
+
└──(避免动画这些)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
完整指南: [mobile-performance.md](mobile-performance.md)
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 📝 检查点(移动开发前强制)
|
|
274
|
+
|
|
275
|
+
> **在写任何移动端代码之前,必须完成此检查点:**
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
🧠 CHECKPOINT:
|
|
279
|
+
|
|
280
|
+
Platform: [ iOS / Android / Both ]
|
|
281
|
+
Framework: [ React Native / Flutter / SwiftUI / Kotlin ]
|
|
282
|
+
Files Read: [ List the skill files you've read ]
|
|
283
|
+
|
|
284
|
+
3 Principles I Will Apply:
|
|
285
|
+
1. _______________
|
|
286
|
+
2. _______________
|
|
287
|
+
3. _______________
|
|
288
|
+
|
|
289
|
+
Anti-Patterns I Will Avoid:
|
|
290
|
+
1. _______________
|
|
291
|
+
2. _______________
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**示例:**
|
|
295
|
+
```
|
|
296
|
+
🧠 CHECKPOINT:
|
|
297
|
+
|
|
298
|
+
Platform: iOS + Android (Cross-platform)
|
|
299
|
+
Framework: React Native + Expo
|
|
300
|
+
Files Read: touch-psychology.md, mobile-performance.md, platform-ios.md, platform-android.md
|
|
301
|
+
|
|
302
|
+
3 Principles I Will Apply:
|
|
303
|
+
1. FlatList with React.memo + useCallback for all lists
|
|
304
|
+
2. 48px touch targets, thumb zone for primary CTAs
|
|
305
|
+
3. Platform-specific navigation (edge swipe iOS, back button Android)
|
|
306
|
+
|
|
307
|
+
Anti-Patterns I Will Avoid:
|
|
308
|
+
1. ScrollView for lists → FlatList
|
|
309
|
+
2. Inline renderItem → Memoized
|
|
310
|
+
3. AsyncStorage for tokens → SecureStore
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
> 🔴 **填不出检查点?→ 回去读技能文件。**
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 🔧 框架决策树
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
WHAT ARE YOU BUILDING?
|
|
321
|
+
│
|
|
322
|
+
├── Need OTA updates + rapid iteration + web team
|
|
323
|
+
│ └── ✅ React Native + Expo
|
|
324
|
+
│
|
|
325
|
+
├── Need pixel-perfect custom UI + performance critical
|
|
326
|
+
│ └── ✅ Flutter
|
|
327
|
+
│
|
|
328
|
+
├── Deep native features + single platform focus
|
|
329
|
+
│ ├── iOS only → SwiftUI
|
|
330
|
+
│ └── Android only → Kotlin + Jetpack Compose
|
|
331
|
+
│
|
|
332
|
+
├── Existing RN codebase + new features
|
|
333
|
+
│ └── ✅ React Native (bare workflow)
|
|
334
|
+
│
|
|
335
|
+
└── Enterprise + existing Flutter codebase
|
|
336
|
+
└── ✅ Flutter
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
完整决策树: [decision-trees.md](decision-trees.md)
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 📋 预开发检查清单
|
|
344
|
+
|
|
345
|
+
### 开始任何移动项目之前
|
|
346
|
+
|
|
347
|
+
- [ ] **平台已确认?**(iOS / Android / Both)
|
|
348
|
+
- [ ] **框架已选择?**(RN / Flutter / Native)
|
|
349
|
+
- [ ] **导航模式已确定?**(Tabs / Stack / Drawer)
|
|
350
|
+
- [ ] **状态管理已选择?**(Zustand / Redux / Riverpod / BLoC)
|
|
351
|
+
- [ ] **离线需求已明确?**
|
|
352
|
+
- [ ] **深链已从第一天规划?**
|
|
353
|
+
- [ ] **目标设备已定义?**(Phone / Tablet / Both)
|
|
354
|
+
|
|
355
|
+
### 每个页面前
|
|
356
|
+
|
|
357
|
+
- [ ] **触控目标 ≥ 44-48px?**
|
|
358
|
+
- [ ] **主 CTA 在拇指区?**
|
|
359
|
+
- [ ] **有加载态?**
|
|
360
|
+
- [ ] **有错误态并支持重试?**
|
|
361
|
+
- [ ] **考虑离线?**
|
|
362
|
+
- [ ] **遵循平台规范?**
|
|
363
|
+
|
|
364
|
+
### 发布前
|
|
365
|
+
|
|
366
|
+
- [ ] **已移除 console.log?**
|
|
367
|
+
- [ ] **敏感数据使用 SecureStore?**
|
|
368
|
+
- [ ] **SSL pinning 已启用?**
|
|
369
|
+
- [ ] **列表已优化(memo、keyExtractor)?**
|
|
370
|
+
- [ ] **卸载时完成内存清理?**
|
|
371
|
+
- [ ] **低端设备上已测试?**
|
|
372
|
+
- [ ] **所有交互元素均有无障碍标签?**
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## 📚 参考文件
|
|
377
|
+
|
|
378
|
+
需要更深入的指导时:
|
|
379
|
+
|
|
380
|
+
| 文件 | 使用时机 |
|
|
381
|
+
| --- | --- |
|
|
382
|
+
| [mobile-design-thinking.md](mobile-design-thinking.md) | **FIRST!反记忆化,强制上下文思考** |
|
|
383
|
+
| [touch-psychology.md](touch-psychology.md) | 触控交互、Fitts' Law、手势设计 |
|
|
384
|
+
| [mobile-performance.md](mobile-performance.md) | RN/Flutter 优化、60fps、内存/电量 |
|
|
385
|
+
| [platform-ios.md](platform-ios.md) | iOS 特定设计、HIG 规范 |
|
|
386
|
+
| [platform-android.md](platform-android.md) | Android 特定设计、Material Design 3 |
|
|
387
|
+
| [mobile-navigation.md](mobile-navigation.md) | 导航模式、深链 |
|
|
388
|
+
| [mobile-typography.md](mobile-typography.md) | 字体尺度、系统字体、可访问性 |
|
|
389
|
+
| [mobile-color-system.md](mobile-color-system.md) | OLED 优化、深色模式、电量 |
|
|
390
|
+
| [decision-trees.md](decision-trees.md) | 框架、状态、存储决策 |
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
> **记住:** 移动端用户更急、更易被打断、手指更不精确。按最糟糕条件设计:弱网、单手、强光、低电量。在那里可用,就能在任何地方可用。
|