Dev

技术相关

SwiftUI 页面导航最佳实践

Dev

SwiftUI 页面导航最佳实践

通过全局 Router 1. 定义一个全局 Router 对象,维护页面跳转类型和参数。 @Observable final class Router { public enum Destination: Codable, Hashable { case pageA(models: [Model]) case pageB } var navPath = NavigationPath() func navigate(to destination: Destination) { navPath.append(destination) } func navigateBack() { navPath.removeLast() } func navigateToRoot() { navPath.removeLast(navPath.count) } } 枚举 Destination 可以指

By Gray
Swift Server Push Notification 配置

Dev

Swift Server Push Notification 配置

获取证书 在 Apple Developer 开发者账号 Certificates, Identifiers & Profiles 里选择 Keys。新增一个 key, configure 里选择 Sandbox & Production。下载该 p8 证书,并且保存好(只能下载一次)。 终端 cd 到证书所在路径,输入下面指令。 openssl pkcs8 -nocrypt -in AuthKey_XXXXXXXXX.p8 -out ~/Downloads/key.pem cat key.pem 得到 PRIVATE KEY 字符串,复制好。 服务端配置 服务端有多种技术栈方案,包括 Java、

By Gray
SwiftUI|监测视图更新及更新原因

Dev

SwiftUI|监测视图更新及更新原因

SwiftUI 的优势之一就是可以自动让 UI 和数据状态保持同步。频繁的视图更新也会带来一定的性能问题,尽管 Apple 已经让 SwiftUI 在更新时尽量只渲染视图树中必须重绘的部分,但我们还是需要知道某种可以监测视图更新以及触发其更新的原因的手段。这样我们才能在业务层面做一些针对性的性能优化。 我们可以通过在 View 的 body 视图构造器中插入一条 print 语句来监测到哪些视图的 body 正在被执行。这条语句还必须是一个赋值语句,不能是仅一个 print。因为 print 返回的是一个 Void ,而不是一个 View ,视图构造器会报错。 struct ContentView: View { var body: some View { let _ = print("ContentView Changed!") VStack { Image(systemName: "globe"

By Gray

GitLab 集成 Telegram

GitLab 官方支持集成 Telegram,在项目的 Settings → Integrations 里就能找到。除了 Telegram 外,GitLab 还支持对 Slack、Discord 等软件的集成。 之前我做过通过 GitLab 的 webhook,在飞书群里发送 GitLab 通知的项目。那个项目需要先让 GitLab 把 webhook 数据发到自己服务器上,然后再格式化为飞书机器人支持的消息卡片数据,最后通过飞书机器人的 webhook 把消息发到指定的群里。 不过 GitLab 对 Telegram 的集成不需要咱们先把数据发到自己服务器上,它是可以直接发送对应软件支持的消息数据的。咱们只需要提供一下相关的配置信息即可。 根据我的尝试,目前可以在 GitLab 中配置发送通知的对象为 Telegram 的 Group、Channel 或者单个用户(比如自己)。 Telegram 的

By Gray