Moon

 · 20 days ago

Office Hours Recap/办公时间回顾 - 12月

从睡眠追踪硬件到 SwiftUI 重写,以下是 12 月份会议讨论的内容。

上周,我特意为我们在澳大利亚的朋友们举办了一场 Hotwire Native Office Hours 线上答疑会,结果这场答疑会成为了我们今年举办过的最有趣、内容最丰富的答疑会之一。我们深入探讨了从蓝牙睡眠追踪器到标签页刷新策略,再到“完全原生”开发是否真的值得等各种话题。

以下是重点回顾和您可以应用到自己应用程序中的经验教训。

Hotwire Native 的实际蓝牙集成

Adam Pallozzi 首先深入探讨了 SleepHQ 的一项功能 :一款脉搏血氧仪戒指,可在夜间通过手机传输数据。这是我见过的最复杂的 Hotwire Native 集成之一,它结合了原生蓝牙服务和 Rails 用户界面。

但亚当目前还没有解决一个问题:iOS 在长时间后台运行期间会不断终止该进程,从而导致蓝牙连接中断。

我们讨论了一些可能的方法:

  • 启用“充当蓝牙低功耗配件”后台模式
  • 使用后台处理或静默推送通知来保持应用运行
  • 正在播放音频以防止网页视图进入休眠状态

最后一个很有意思。你有没有过这样的经历:锁屏后发现屏幕上显示着音频播放?即使你实际上并没有在听什么?

原来,这是一种让网页视图保持运行的技巧 !如果操作正确,并启用所有合适的后台模式,持续播放音频有时可以让网页视图无限期地保持运行。当然,这种方法没有官方文档,也绝对不推荐,但对于这种情况来说,这确实是一个有趣的思路。

这再次提醒我们,Hotwire Native 并不能神奇地消除所有原生应用的挑战。但它确实赋予了开发者灵活性,可以将原生服务与主要基于 Rails 的 UI 混合使用。蓝牙连接过程的全部五个步骤都是用 HTML 渲染的!

身份验证后标签页刷新问题

Shawn 提出了一个经典的 #Hotwire Native 问题:用户登录或注册后,刷新标签页的最佳方法是什么?

目前我们有以下几种选择:

  1. 再次调用 HotwireTabBarController HotwireTabBarController load() 方法。
  2. 理想情况下,应该遍历每个 Navigator 并手动重新加载它们。
    1. 遗憾的是, HotwireTabBarController (目前?)还没有公开这一点。
  3. 添加一个“过期”标记,以便标签页下次出现时刷新。

Adam 分享了 Sleep HQ 的解决方法:当用户在“患者”和“临床医生”模式之间切换时,重新加载整个路径配置。这种方法虽然有效,但略显笨拙。在安卓系统上,还有一个额外的限制:标签页的数量是有限制的。

对于 Jumpstart Pro ,我们完全放弃了标签页的路径配置。取而代之的是,我们将动态 JSON 结构发送到桥接组件,这与我在身份验证深度解析中概述的方法相同 。这样,您无需重建整个导航堆栈即可进行控制。


“你们有新应用的入门工具包吗?”

Jesse 询问是否有 #Rails + #iOS + #Android 模板可供人们用作起点。

我试过很多次了……至少六次。模板一开始很好用,但过不了多久就过时了!一旦 Rails、Hotwire 或 Xcode 更新换代,模板就立刻失效了。

我一直觉得以下方法行之有效:

  • 维护一个包含多个分支的代码仓库,每个分支代表不同的“起点”。
  • 编写创建新的 Rails 应用后运行的生成器。

这使我获得了模板 90% 的价值,而无需受限于某些脆弱的东西。

选择“完全原生”还是继续使用 Hotwire Native

我还分享了我一直在做的一个小实验:我用纯 #SwiftUI 重写了我书中的徒步旅行应用程序 。目的是进行直接对比体验。


我学到了以下几点:

  • 从视觉上看,两者的区别非常小,很多情况下你根本分辨不出哪个是哪个。
  • 原生版本需要更多的代码。
  • 错误状态和加载过渡效果更容易进行原生自定义,但除非你真的需要,否则不值得为此付出努力。
  • 在必要时混合使用原生屏幕(例如蓝牙、摄像头、生物识别)仍然是最佳方案。

换句话说: 如果你正在构建一个 UI 无论如何都来自 Rails 的应用程序, 即使你很了解 SwiftUI,Hotwire Native 仍然是最快的途径。

我们还讨论了自定义加载和骨架屏。你可以通过提前加载 JavaScript 驱动的视图来实现这一点,或者将整个应用程序放在一个 Turbo Frame 远程容器中,并在加载完成后替换为实际内容。Adam 分享了一个巧妙的技巧:在显示骨架屏之前检查页面是否已被缓存,从而避免在返回页面时出现“闪烁”现象。

为这一年画上圆满的句号

这次答疑环节包含了所有我喜欢的元素:真实的问题、真实的应用程序,以及大家坦诚分享的成功经验(和失败教训)。非常感谢 Adam 的蓝牙演示,感谢 Shawn 和 Jesse 的精彩提问,也感谢所有远道而来、跨越时区的朋友们。

下次会议定于2026年1月8日举行。希望届时能见到你!

Author Joe Masilotti

Source https://newsletter.masilotti.com/p/office-hours-recap-december

Download Pickful App

Better experience on mobile

iOS QR

iOS

Android QR

Android

APK QR

APK