打包后 Bundle.module 直接崩:一个 SPM app 首启必崩的资源陷阱
这篇文章复盘我在 Owlet 上遇到的一个「用户第一次装、一打开就崩」的 bug。两台不同机器、不同用户、不同 macOS 版本,crash log 一模一样,崩溃点是 SwiftPM 合成的 Bundle.module 在触发 _assertionFailure。根因是纯 SPM 的 macOS app 手动组装成 .app 之后,Swift Package Manager 默认生成的 Bundle.module 资源定位逻辑找不到资源包,会直接 fatalError;而我在 8 处加载资源里,唯独一处漏用了自己写的兜底封装。文章从 crash log 反推根因,讲清楚 Bundle.module 为什么在开发时不崩、用户首装必崩,以及为什么这种「只有一处漏网」的 bug 最难在本地复现。
@unchecked Sendable 骗过了编译器:一次 Swift 并发字典崩溃复盘
这篇文章复盘我在 Owlet 里一天内连修的两次 Swift 崩溃。第一次是并发数据竞争:一个被 @unchecked Sendable 骗过编译器的普通 Dictionary,在两个并发 import 里被同时写坏内存,崩溃点还飘到毫不相干的第三个线程上。第二次是确定性的 Data 下标越界:removeFirst 之后 Data 的 startIndex 不归零,用字面量 0 当索引直接越界 SIGTRAP。文章从崩溃日志反推根因,讲清楚为什么细粒度锁不够、read-modify-write 为什么必须整段串行、Swift 6 里 async 上下文为什么不让你裸用 NSLock.lock(),以及切片类型的索引为什么不能信 0。
我在给自己建一个 LLM wiki
这篇文章想聊一个我最近才想明白的事:当我把"怎么做一件事"沉淀进 CLAUDE.md 规则、Claude Code skill、还有博客文章时,我其实是在为 AI 建一个知识库——一个 LLM wiki。它和传统给人看的 wiki 不一样:读者是 LLM,所以要可执行、有触发词、能被 ground truth 校验。文章结合我这半年从前端转 Agent 的实践,讲清这三种沉淀载体各自的定位,以及怎么写才能真正被复用。
我用 Claude Code + Codex vibe 了一个 macOS App:Owlet
这篇文章记录我用 Claude Code 和 Codex 以 vibe coding 方式做一个 macOS menu-bar 应用的全过程:从最初想“看看我每天烧了多少 token”,到做出 Owlet 这个能实时监控 Claude Code 和 Codex 使用量的小工具。过程中有 AI 双开协作的节奏、把家乡青山湖风景写进配色的执念,也有对 menu-bar app 电量的偏执。
一次 macOS 灵动卡崩溃排查:别把桌面小组件当普通窗口
这篇文章记录我在做 Argos 灵动卡时踩到的一次 macOS 桌面浮窗崩溃:同样是 Apple Silicon、同样是新版系统,有的机器稳定,有的机器一打开就崩。真正的问题不在业务逻辑,而在 AppKit window level、透明 panel、系统材质和启动持久化策略叠加后的边界行为。
粒子系统实践:从一版难看的彩纸特效说起
这篇文章复盘一次 macOS 工具里“段位晋级彩纸特效”的真实迭代:为什么一开始会像从上往下掉、为什么彩带会显得别扭、爆点和光晕为什么不一定高级,以及如何用 emitter、particle、glint、ambient sparkle、bloom、lifetime、distribution、motion field 这些概念,把一个庆祝动画调到可接受。
为什么选 Fumadocs:Node.js 项目接入开箱即用文档站
给 Midway.js 后端服务搭文档站的选型过程:为什么在 Vitepress / Docusaurus 里最终选了 Fumadocs,它开箱即用的颜值从何而来,fumadocs-openapi 如何自动从 OpenAPI spec 生成接口文档,以及怎么用 Next.js 静态导出 + egg-static 把它嵌进 Midway 项目、一个命令同时跑服务端和文档站。
Facebook广告预算反推:一天100元想拿2000成效现实吗
很多投流问题看起来像优化问题,本质却是数学约束。本文用「一天 100 元预算、目标 2000 个成效」这个例子,拆解目标单次成本、当前成本、受众规模和放量节奏之间的关系,给出一个判断框架:什么时候该优化素材,什么时候该扩受众,什么时候必须承认预算目标不现实。
macOS 长按 Backspace 删除太慢?改这两个设置
macOS 默认的键盘重复速度对重度键盘用户来说太慢了,长按 Backspace 删文字像在挤牙膏。本文介绍系统设置里的两个滑块怎么拖,以及如何用终端命令突破 GUI 限制,设置完注销一次即可永久生效,适合程序员和写作重度用户。
小说站 Facebook 广告版位选择指南
运营英语小说站近半年,Facebook 广告版位踩了不少坑。这篇文章整理我实际跑量的版位选择逻辑——哪些是核心版位、哪些是陷阱、哪些要看素材类型才能开——给同类内容站(小说、短文、UGC)的运营参考。










