别让设置每次重置:用 AI + AppStorage 给 iOS 偏好做本地保存

别让设置每次重置:用 AI + AppStorage 给 iOS 偏好做本地保存

这一技教你把深色模式开关、列表排序、首次启动提示这类轻量偏好交给 SwiftUI AppStorage 保存,并用偏好表、AI 缺陷单和 6 步清单验收重启后是否还记得用户选择。

用户把列表切成「按截止日期排序」,下次打开 App 又变回默认;他关掉新手提示,重启后提示又跳出来;他选择了深色外观,杀掉 App 后全丢。这个问题看起来很小,但会让用户觉得 App 不记事。设置页尤其明显:用户改过一次的偏好,不应该每次都让他重新选。
这招可以交给 AI 补:用 SwiftUI 的 AppStorage 保存轻量偏好。Apple 文档把 AppStorage 定义为一个属性包装器,它会从 UserDefaults 反映一个值,并在这个默认值变化时让视图失效重绘。1 Apple 对 UserDefaults 的定义更直接:它是访问用户默认值数据库的接口,用来存系统级和 App 自己的设置。2
翻成产品语言:别把用户的每个小偏好都做成后端需求。开关、排序、单位、是否看过某个提示,这类只影响本机体验的小东西,可以先让 App 自己记住。

先判断:哪些偏好值得保存

AppStorage 适合保存「轻、小、可丢了再选一次」的偏好,不适合保存账号、订单、草稿正文和隐私数据。Create with Swift 的教程提醒,UserDefaults 适合少量用户偏好或设置,不适合大量数据;它还特别提醒不要把敏感信息放进去,因为它不是加密存储。3 Hacking with Swift 也明确说,@AppStorage 写入的是 UserDefaults,不是安全存储,所以不应保存个人敏感数据。4
你可以先让 AI 帮你做一张偏好保存表:
页面场景适合保存什么不该保存什么验收重点
设置页深色模式开关、通知提示开关手机号、token、付款信息杀掉 App 再打开,开关还在
列表页排序方式、筛选条件、视图密度列表里的业务数据本身返回首页再进来,列表规则不乱跳
新手引导是否看过某个提示用户填写的正式资料看过一次后,不要每次都弹
表单辅助上次选过的单位、默认地区未提交的长草稿改设置后,相关页面能立刻更新
这里的关键不是「能不能存」,而是「丢了会不会造成严重后果」。丢了只是麻烦,可以考虑 AppStorage;丢了会出事故,就别放这里。

原理:把一个小值绑到系统默认值里

@AppStorage 最像一个会自动保存的 @State。普通 @State 只管当前页面活着时的状态,页面或 App 重新开始后就可能回到默认值;@AppStorage 背后连着 UserDefaults,值变了会写进去,页面也会跟着刷新。
Hacking with Swift 的解释很适合给 AI 当校验句:@AppStorage 会读取 UserDefaults 里的值,值变化时自动重新调用视图的 body;修改这个值也会立刻写入 UserDefaults 并更新界面。4 Create with Swift 的示例也说明,@AppStorage 可以像 SwiftUI 状态变量一样触发视图变化。3
代码层面通常就是这种小改动:
@AppStorage("hasSeenOnboarding") var hasSeenOnboarding = false
PM 不需要先学属性包装器。你只要能说清楚三件事:这个偏好叫什么、默认值是什么、用户改动后哪些页面要跟着变。

直接给 AI 的缺陷单

把下面这段交给 Cursor、Claude Code 或 Xcode 里的 AI 助手:
请给这个 SwiftUI 页面增加轻量偏好保存,只做最小改动,不重写页面结构。
  1. @AppStorage 保存用户偏好,不要为这个小设置新建后端接口。
  2. 请先列出你要新增的 key、默认值、取值类型和对应页面。
  3. 只保存轻量偏好,例如开关、排序方式、是否看过提示;不要保存 token、个人隐私、付款信息或大段正文。
  4. key 名要稳定、可读,避免在多个文件里手写出不同拼写。
  5. 用户修改开关或排序后,相关 UI 要立即更新;杀掉 App 再打开后,选择仍然保留。
  6. 如果这个 App 要上架,请检查是否需要在隐私清单里说明 UserDefaults 的使用原因。
  7. 请给我一份真机验收清单,覆盖首次安装、修改、重启、升级默认值和清空数据。
第 4 条很重要。SwiftLee 写过一个真实痛点:@AppStorage 接收字符串 key,跨项目维护时容易拼错,也不容易发现所有可用偏好 key。5 如果你的偏好超过三四个,别让 AI 到处散写字符串;让它集中放一份 key 清单,后面改名才不会漏。

两个容易被 AI 写错的地方

第一,AI 可能把 AppStorage 当成万能数据库。它不是。用户的收藏列表、购物车、离线文章、长草稿、订单状态,都不应该因为「能存」就塞进去。Create with Swift 说得很清楚,UserDefaults 适合少量数据;大量数据会在 App 启动时加载,不是它的设计目标。3
第二,AI 可能到处复制同一个 key。比如设置页写 sortMode,列表页写 sortingMode,结果用户明明改过排序,另一个页面却读不到。这个问题不一定会报错,只会变成「怎么有时记得、有时不记得」。让 AI 输出 key 清单,就是为了提前抓这种错。
还有一个上架前的小检查:Create with Swift 在隐私更新段落里提到,从 2024 年 5 月 1 日开始,依赖 UserDefaults API 时需要在隐私清单里说明原因。3 Apple 的 Required Reason API 文档也要求相关 API 的使用要符合政策。6 这不是让 PM 自己写合规文件,而是提醒你在发给 AI 的任务里加一句:改完后顺手检查隐私清单。

真机验收:6 个动作就够

改完后别只看预览。按这 6 步验收:
  1. 首次安装:删除 App 后重新安装,打开页面应使用你定义的默认值。
  2. 修改偏好:切换一个开关、排序或筛选,页面要立刻变化,不要等重启才生效。
  3. 杀掉重开:从后台划掉 App 再打开,刚才的选择还在。
  4. 跨页面读取:如果两个页面都用同一个偏好,A 页面改完,B 页面读到的应该是同一个值。
  5. 升级默认值:如果你后来改了默认值,老用户已经选过的偏好不能被强行覆盖。
  6. 清空数据:退出账号或重置设置时,哪些本地偏好要保留、哪些要清掉,要按产品规则执行。
第 5 步最容易漏。默认值只应该影响第一次没有保存过的用户;老用户已经做过选择,就不要因为版本升级被改回默认。

今天最小可行动作

先别全 App 搜一遍。选一个最容易看出效果的偏好,比如「是否显示新手提示」或「列表排序方式」,写下四行:
  • key 名叫什么?
  • 默认值是什么?
  • 用户在哪里改它?
  • 重启 App 后应该看到什么?
把这四行和上面的缺陷单交给 AI。今天的目标不是做一个设置系统,而是让一个已经存在的小选择,在用户下次打开 App 时还记得。

Contenido relacionado

  • Inicia sesión para comentar.
More from this channel