廖林

廖林

ActivityKit|为灵动岛添加操作按钮

在灵动岛中,支持通过 Button(:intent) 的方式添加可交互的按钮。按钮只能通过 LiveActivityIntent 来执行功能。 常见问题 灵动岛按钮无法执行 AppIntent 在取件喵 App 中,在 Live Activity 视图里点击“我已取餐”按钮无任何反应,Xcode 也没有输出,灵动岛状态不会更新。 原因是 Live Activity 的按钮需要绑定 LiveActivityIntent 才能被系统执行。原实现使用的是 `AppIntent`,导致按钮点击后不会触发执行逻辑。
廖林

微信小程序|在 Supabase 中集成微信登录

在微信小程序中使用 Supabase 作为后端时,无法直接使用 Supabase 内置的 OAuth 登录流程。我们可以通过 Supabase Edge Functions 实现微信原生登录,让用户可以在小程序中无缝注册和登录。 在 Supabase 完成完整登录流程,无需引入格外的后端 API(例如 Vercel)。 架构与原理概述 ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 微信小程序 │ ───▶ │ Edge Function │ ───▶ │ Supabase │ │ wx.login() │ │ wechat-login │ │ Auth + DB │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │
廖林

Supabase|集成 Google 登录认证

iOS 应用的 Google 登录流程: iOS App → Google OAuth (获取 ID Token) → Supabase Auth (验证 Token) → 返回 Session 在 Google Cloud Console 创建 OAuth 客户端(iOS 以及 Web) iOS 客户端出于安全考虑不提供 Client Secret(移动端无法安全存储密钥),但 Supabase 作为服务器端需要 Client Secret 来与 Google OAuth 服务通信。 因此,我们需要创建两个 OAuth 2.0 Client IDs,一起添加到 Supabase
廖林

NotificationCenter|在组件之间发送和接收消息

NotificationCenter ≠ 系统通知 很多初学者会混淆这两个概念: * 发送 iOS 系统通知,使用 UserNotifications 框架 * NotificationCenter 属于 Foundation 框架,无需格外导入 一句话总结:NotificationCenter 是 App 内部的广播系统,让不同组件之间可以发送和接收消息,而无需直接引用对方。 两种跨组件通信方式 方式 1:NotificationCenter(iOS 2+) 优点:简单、一对多广播、松耦合 缺点:字符串标识易出错、需手动管理生命周期 方式 2:withObservationTracking(iOS 17+) 优点:类型安全、自动追踪、现代化 缺点:需 iOS 17+、需手动重建追踪 withObservationTracking 只生效一次
廖林

macOS 配置 Claude Code Option+P 快捷键指南

在 macOS 上使用 Claude Code 时,Option+P 快捷键可能会被系统拦截,输出 π 字符。本文介绍如何解决这个问题。 问题原因 macOS 默认将 Option 键用于输入特殊字符(如 Option+P = π)。这与终端中 Option 作为 Meta 键的用法冲突。 Cursor 配置方法 1. 打开 Cursor 2. 按 Cmd + Shift + P 打开命令面板 3. 输入 Preferences: Open User Settings (JSON) 4. 添加以下配置: { "terminal.integrated.
廖林

SwiftData|在 AppIntent 中使用 ModelContainer

使用 @Dependency @Dependency 是 App Intents 框架专用的属性包装器,用于依赖注入。 常用的实际场景 使用 @Dependency 注入 ModelContainer 使用方法 直接使用 DataModel 单例(推荐) 是否能访问完整 ModelContainer 数据? 经过测试,直接使用 DataModel 单例,可以正常查询到主 App 中的完整数据: 使用 @Dependency 的方式,如果注入的也是 DataModel.shared.modelContainer 实例,那么也可以正常获取到所有数据: