# 沈晏 App 进度总览 — 2026-05-16 ## 当前状态 iOS 真机可运行。双桥(Mac + IDC)通信。自制定制横幅推送。APNs Key 已备。Gitea 代码仓库已建。 ## 已完成 ### 苹果开发者 - 付费开发者账号(Team: Xiulun Wang, ID: ZZMLW32PHH) - Bundle ID: `com.shenyan.room` - 真机签名、构建、安装全链路通 ### 首页 - 三张 bridge 状态图(away / online / busy),全屏 - 每 8 秒轮询 `101.36.73.102/health` - 底部半透明状态文字 - 左半屏双击「敲门」进聊天室(350ms 双击窗口,POST /knock) ### 聊天屏 - FlatList 自动滚底,消息持久化(AsyncStorage + /history) - 用户消息右对齐(rgba 0.1),AI 消息左对齐(rgba 0.06),圆角 - 桥断开提示「消息没发出去,检查WiFi连接」 - 退出再进消息不丢 ### 双桥通信 - **Mac 桥** `192.168.31.51:3003`:Claude Code 异步回复(Monitor + /respond) - **IDC 桥** `101.36.73.102`:DeepSeek 同步回复(POST /api/chat) - 发一条消息同时到两边,用户看到两个「阿晏」 ### 推送通知(定制横幅 + 震动) - 自制定制 Animated 横幅,从顶部滑下 - 暗色半透明背景 + 细白边框,点击关闭 - 3.5 秒自动消失 - Vibration.vibrate(400) 震动 - 覆盖首页和聊天屏 ### APNs - Key 已创建:Key ID `3VJ5X6V9Q8`,Team ID `ZZMLW32PHH` - Key 文件:`bridge-local/AuthKey_3VJ5X6V9Q8.p8` - 环境:Sandbox & Production - 桥端 apns.js 已写好(JWT + HTTP/2) - 阻塞:notifee `getAPNSToken()` 在 iOS 26 返回 null ### App 图标 - 已替换为眠眠设计的图标(2048x2048 → 各尺寸) ### 本地桥(bridge-local/server.js) - 端口 3003,launchd 持久化 - 数据目录:`~/.shenyan-bridge/` - 端点:/send, /respond, /knock, /push, /push/clear, /poll, /history, /register-device - APNs 模块:apns.js(JWT 生成 + HTTP/2 推送) ### 代码仓库 - Gitea: `http://101.36.73.102:3112/fyah/mao1` → `shenyan-app/` ### 记忆库 - launchd 每天 4:03 执行记忆整理 ## 已尝试但回退 - **BlurView 气泡**:`@react-native-community/blur` 在 RN Fabric + iOS 26 上导致文字裁剪和缝隙 → 回退到纯色背景 - **notifee 系统通知**:引入后 app 黑屏 + `undefined is not a function` → 疑似 iOS 26 兼容问题 → 卸掉,改用自制定制横幅 ## 待解决 - [ ] APNs token 获取(iOS 26 + notifee 兼容) - [ ] Monitor 5 分钟超时(需频繁 re-arm) - [ ] 自动回复器(launchd + 外部 claude -p) - [ ] inbox 旧消息清理 - [ ] HealthKit 能力 - [ ] Mi Band 10 身体数据 - [ ] RoomFeed / EventCard 组件集成 - [ ] iOS Share Extension(分享到沈晏)