跳到主要内容
Jason Xun · UIKit Lifecycle Lab observable UIKit · code-first experiment
Building Jason Xun product system

UIKit · Guided Learning · Observable Runtime

把 UIKit 的隐式调用,变成一条可以观察的证据链

这不是提醒事项业务 App,而是一台 UIKit 显微镜:学习者先预测,再操作真实界面,通过结构化日志与 Call Stack 分清生命周期、delegate、target-action 和 closure。

A code-first UIKit learning lab that makes framework-driven behavior observable through guided experiments, structured logs, call stacks, and UI tests.

SAVE TRACE / REAL UI + SOURCE PATH PROGRESSIVE LAB
iPhone 17 Pro Simulator 中用于 Save 实验的提醒列表
REAL SIMULATOR / iPhone 17 Pro

一次编辑与 Save,穿过四种调用机制。

  1. 01 · delegatedidSelectItemAt列表把选择回调给业务控制器
  2. 02 · lifecycleviewDidLoadUIKit 请求编辑页完成首次加载
  3. 03 · target-actionsaveReminderSave 按钮触发注册的 action
  4. 04 · closureonSave → snapshot业务 closure 回传并刷新列表
静态顺序已完整展示。
2 / 2 UI TEST PASS 2026-07-11 · local iPhone 17 Pro Simulator 9.456s edit/save · 27.483s Logs/Guide · source ↗

Problem / 问题

UIKit 最难的部分,往往不是写代码,而是看不见“谁调用了谁”

只读方法名,很容易把框架生命周期、delegate 回调、按钮 action 和业务 closure 混在一起。这个系统把一次学习拆成 Predict → Run → Observe → Verify → Recap,并把证据留在 App 内 Logs、Xcode Console、Call Stack 和 UI Test 中。

The design problem is observability: learners need to distinguish framework callbacks from application-controlled data flow using evidence they can reproduce.

9个源码定义的引导步骤
14类结构化日志
2条 XCTest UI 流程
Role / Jason
定义学习目标、选择观察机制、编排验证路线并验收真实运行结果
AI collaboration
Codex / AI 辅助搭建 Demo、实现日志与文档、迭代自动化测试
Stack
Swift · UIKit · UICollectionView · XCTest · Xcode
Constraint
纯代码、无 SwiftUI、无第三方业务库、无网络与持久化

System / 系统

01 · Predict

先问“接下来会发生什么”

GuidedStep 把操作、观察位置、预测问题、预期日志和胜利条件放在同一张训练卡里。

02 · Observe

让同一条事件同时可读、可筛选

DemoLogStore 保存结构化事件并继续输出 Console;Log Panel 支持分类、搜索、关键事件与暂停滚动。

03 · Verify

用 Call Stack 与 UI Test 交叉验证

断点回答“谁触发”,UI Test 验证编辑回传与 Guide / Logs 入口,避免把文档里的预期当成运行事实。

Interface / 观察面

iPhone 17 Pro 模拟器中的 UIKitLifecycleDemo 提醒列表首页
真实 Simulator 构建截图,不是网页 mockup。业务外壳保持简单,把注意力留给 Learn、Logs 与调用链。

ONE FLOW · FOUR MECHANISMS

  1. UIKit lifecycleviewDidLoad → viewWillAppear框架根据页面状态触发
  2. DelegatedidSelectItemAtcollection view 把点击回调给业务代码
  3. Target-actionsaveReminder按钮事件调用 action
  4. ClosureonSave → snapshot业务代码主动回传编辑结果

Evidence / 证据

展示页只陈述能够从当前仓库或本地构建直接复核的事实。

LAST VERIFIED · 2026-07-11 2 / 2 UI Test passed

本地 iPhone 17 Pro Simulator:testEditFirstReminderTitle 9.456s;testOpenLogsAndGuide 27.483s。来源是当前 XCTest 文件与本次本地运行,不代表完整回归覆盖。

Run / 复现

用真实 Xcode 与 Simulator 观察

网页负责解释系统,运行证据仍来自 UIKit App。仓库默认使用 iPhone 17 Pro Simulator,也可通过 Make 参数切换设备。

git clone https://github.com/estelledc/UIKitLifecycleDemo.git
cd UIKitLifecycleDemo
make build
make run
make test-ui

Limitations / 边界

这是一套学习实验室,不是生产级提醒事项 App。它不包含网络、持久化、EventKit 或真实业务状态;Guide 描述预期观察,不会伪造日志;两条 UI Test 只覆盖核心编辑流程和 Guide / Logs 入口,尚未覆盖所有高级实验。项目也不声称仅凭阅读或运行 Demo 就能掌握 UIKit。