baodan/.agents/skills/impeccable/reference/ios.md
wsb1224 e3479f0546 上线阻断问题全部修复
#	问题	修复	文件
1	前端构建失败(引号错误)	size="small type=" → size="small" type="	PosterHistoryPage.vue
2	migrate_014 ORM vs 缺失列	全部改为原始 SQL,不再引用 ORM 模型	migrate_014.py
3	cleanup 字段名错误	output_path → ppt_path	cleanup.py
4	文案生成 case 越权	添加 case.user_id != user_id 校验	poster/service.py
5	存储路径未接通持久化卷	全部改用 get_storage_root()(默认 /app/api/storage/insurance)	config.py, ppt/routes.py, poster/service.py, poster/tasks.py
高风险问题修复
#	问题	修复	文件
6	migrate_019 rollback 撤销成功字段	每个 ALTER 后立即 commit,失败只回滚当前语句	migrate_019.py
7	迁移锁 Windows 不兼容 + 句柄未持久化	全局变量保存锁句柄,支持 Windows msvcrt	api/insurance/db/__init__.py
8	PDF 校验异常时放行	异常返回 False(文件损坏)	security.py
9	健康检查始终返回成功	缺少关键资源时返回 503 + missing 列表	poster/routes.py
10	短密钥掩码泄露原值	≤4 字符返回 ****	ppt_admin_service.py
11	设置无键名白名单	添加 _ALLOWED_SETTING_KEYS 白名单	ppt_admin_service.py
12	容器重启任务永久 stuck	添加 recover_stale_tasks() 启动恢复函数	poster/tasks.py, ppt/parse_worker.py
2026-07-27 13:52:09 +08:00

2.9 KiB
Raw Permalink Blame History

iOS platform

For native iOS / iPadOS apps: SwiftUI, UIKit, React Native, Expo, Flutter shipping to Apple hardware.

On native, the visitor mode narrows what expression may override. HIG conformance governs structure, navigation, and interaction in every mode; brand expresses through the layer the platform leaves open (tint, type, motion, content).

The iOS slop test

Would a fluent iPhone user trust this app, or pause at off-spec controls? The tell is "ported from a website": reinvented navigation bars, custom back gestures, web-shaped buttons, hover-dependent affordances. Default to the platform's components; depart only for a reason the user would thank you for.

Layout & structure

  • Safe area. Lay out inside the safe-area insets. No controls under the notch, Dynamic Island, home indicator, or rounded corners.
  • System navigation. Tab bar for 25 top-level sections (sections, never actions), navigation stack for hierarchy, sheet for self-contained tasks. No custom global nav, no mixed metaphors.
  • Edge-swipe back stays alive. The left-edge back gesture is muscle memory; never disable or overlay it.
  • Large titles on top-level screens, collapsing to inline on scroll. Deep detail screens stay inline.

Touch targets

  • 44×44 pt minimum for every tappable control, with breathing room between adjacent targets.

Typography

  • Dynamic Type. Use the system text styles (Large Title through Caption) so text follows the user's reading size. No hard-coded point sizes.
  • San Francisco carries the UI. Body, labels, and controls stay on SF Pro / SF Compact; a brand face may appear in display moments.
  • 11 pt floor; Body is 17 pt.

Color & materials

  • Semantic system colors (label, secondaryLabel, systemBackground, separator, tint). They adapt to Dark Mode and increased contrast automatically; raw hex breaks there.
  • Dark Mode is a first-class appearance. Design and test both.
  • One tint color drives interactive elements; decoration is not its job.
  • System materials for blur and translucency behind bars and sheets; no hand-rolled glassmorphism.

Components & controls

  • Platform controls. Switch, segmented control, stepper, system pickers, action sheets, alerts, context menus, swipe actions. Reinventing these for flavor is the most common native slop.
  • SF Symbols for iconography: baseline-aligned, Dynamic Type-aware, weight and scale variants. Don't mix in a web icon set.
  • Deliberate modality. Sheet for a focused dismissible sub-task, full-screen cover for immersion. Clear Cancel/Done; honor swipe-to-dismiss unless data loss requires a guard.
  • Grouped/inset lists for settings-shaped content; no bespoke card stacks.

Motion

  • System transitions. Push slides, sheets rise, dismiss reverses the entrance. Custom transitions that fight the navigation model disorient.
  • Honor Reduce Motion. Crossfade instead of parallax and large slides.