肘子的 Swift 周报 #038 | 更好还是更便宜?

2024-07-08 12:44:03 浏览数 (2)

肘子的话

更好还是更便宜?

近日,苹果正式将 Apple Vision Pro (AVP) 推广到更多国家的市场。考虑到 AVP 的独特性,尤其需要为戴眼镜用户提供定制的镜片,消费者能够亲身体验这款产品无疑会增进对其的了解,有望带动销量。然而,若价格、佩戴舒适度和生态系统等核心问题未能得到显著改善,仅仅扩大销售范围恐难以带来令人振奋的市场表现。

最近,关于苹果可能暂停 Apple Vision Pro 二代开发的传言甚嚣尘上。据称,苹果或将精力转向开发一款更为亲民的低端头显产品。虽然降低价格可能会激发市场需求,但也不可避免地会导致硬件规格的妥协。这种策略是否真能推动 AVP 的长远发展,仍有待商榷。

值得关注的是,AVP 的初代用户中,许多人购买此设备并非将其作为日常计算设备使用,而是针对特定的应用场景。例如,有些用户将 AVP 用作高端影音设备,利用其卓越的视觉效果和沉浸式体验,与传统影音设备相比,AVP 显示出较高的性价比。此外,医疗领域的应用尤为引人注目,许多医生已开始在手术中使用 AVP,与传统医疗设备相比,AVP 显示出其独特的价值和实用性。对这部分用户而言,他们期待下一代产品在佩戴舒适度、性能和显示效果上的进一步提升。

尽管对大多数消费者而言,AVP 的价格偏高,但正是这个价格区间使其在特定领域提供了超越竞争对手的性能和体验。因此,在未必能显著提升销量的情况下,仅提供更低成本的版本而放弃高端市场,可能并非最佳选择。

目前,这些消息都还停留在传言阶段。消费者的诉求始终简单明了:以合理的价格获得满意的产品。苹果或许可以考虑双管齐下的策略:一方面推出性价比更高的入门款,提高头戴设备的普及率;另一方面持续优化 AVP 的性能,巩固其在行业中的领先地位。在条件允许的情况下,高端与亲民并行不悖,可能是平衡各方需求的理想方案。

未来,随着技术的进步和生产成本的降低,我们有理由期待更加完美的头戴设备。然而,让大多数人都认可并接受头显这种形态仍有很长的路要走。我们甚至不能排除这样一种可能性:在头显设备真正普及之前,一种全新的革命性技术可能会横空出世,彻底改变我们与数字世界交互的方式。无论如何,持续创新、倾听用户需求,并保持对未来技术趋势的敏锐洞察,都将是确保 AVP 及其后续产品线,乃至整个可穿戴设备行业蓬勃发展的关键。

前一期内容全部周报列表

原创

SwiftUI 滚动控制 API 的发展历程与 WWDC 2024 的新亮点[3]

Fatbobman( 东坡肘子 )[4]

在 WWDC 2024 中,苹果再次为 SwiftUI 的 ScrollView 组件带来了一系列令人瞩目的新 API。这些新功能不仅增强了开发者对滚动行为的控制能力,也反映了 SwiftUI 框架设计理念的持续演进。本文将探讨这些最新的滚动控制 API,并回顾从 SwiftUI 诞生至今与滚动控制相关的所有重要 API 的发展历程。通过这个微观视角,我们将揭示 SwiftUI 在过去几年中设计风格的变迁,以及背后蕴含的宏观设计趋势。

近期推荐

Reverse Engineering Photos' New Search UI ( 逆向工程:探索 iOS 18 Photos 应用的新搜索界面 )[5]

Seb Vidal[6]

在最新的 iOS 18 更新中,苹果公司对其照片应用进行了全面的重新设计,其中就包含了对搜索框位置和显示效果的调整。在这篇深入的技术文章中,Seb Vidal 分析了如何利用公开的 API 以及一些未公开的 API 来模拟这一新颖的设计。文章详细探讨了 UIKBVisualEffectViewUIKBBackdropView 等关键类的应用,并通过 Objective-C 运行时及其他工具访问和利用这些私有 API,以达到与系统键盘背景一致的视觉效果。

When all you have is a Core Data, everything looks like… ( 当你只有 Core Data,一切看起来都像… )[7]

Wade Tregaskis[8]

本文中,Wade Tregaskis 回顾了他在苹果公司的经历,特别是当时 Core Data 团队急切希望推广新生的 Core Data 技术给 Shark 团队。Core Data 当时与现在的 SwiftData 类似,功能尚显不足且存在诸多问题。文章通过分享一个实际的案例,揭示了当面对 Shark 项目中的庞大且复杂的数据时,Core Data 的明显局限性。这一经历不仅有趣,同时也提供了对技术选型和性能评估重要性的深刻洞见,强调了在选择数据管理方案时需要权衡的各种因素。

Create Custom SF Symbols in Sketch ( 在 Sketch 中创建自定义 SF Symbols )[9]

Danijela Vrzan[10]

SF Symbols 是 Apple 专为苹果生态系统开发的一套内置矢量图形图标系统。这套图标系统与系统默认字体 San Francisco 完美集成,确保了跨平台界面设计的一致性和灵活性。虽然 Apple 提供了数千个可自定义和易于使用的高质量图标,但在某些情况下,开发者可能仍需特定的图标未能在现有集合中找到。在这篇文章中,Danijela Vrzan 介绍了如何在 Sketch 应用程序中创建自定义 SF Symbols 图标。文章通过一个将叉子和刀子图标分离的具体例子,详细展示了整个过程,为开发者提供了一个实用的指南。

WebSocket tutorial using Swift and Hummingbird ( 使用 Swift 和 Hummingbird 框架实现 WebSocket 教程 )[11]

Tibor Bödecs[12]

Hummingbird[13] 是一个由 Swift 编写的高性能、灵活的 Web 框架,专门为开发现代服务器端应用而设计。在本教程中,Tibor Bödecs 详细介绍了如何利用 Swift 和 Hummingbird,通过 WebSocket 协议创建实时通信应用。本文不仅比较了 WebSocket 与其他实时通信技术(如 HTTP 长轮询、HTTP 流、Comet 和 SSE)的差异,还强调了这些方法在协议层面的局限性。通过本文,读者将能够深入理解如何在 Swift 环境中实施 WebSocket 通信,并掌握其技术优势及适用场景。

Migrating Widget Configurations with Parent Parameters to use AppIntent ( 使用 AppIntent 迁移具有父参数的小部件配置 )[14]

Quentin Zervaas[15]

从 iOS 17 版本开始,苹果引入了“App Intents”系统,以此替代之前的“INIntents”系统,目的是为了使小部件的配置更加灵活。虽然在多数情况下,从旧系统迁移到新系统都相对顺利,但在处理需要动态显示和隐藏配置选项的父参数时,迁移过程面临一些挑战。在本文中,Quentin Zervaas 分享了他针对这一问题的解决方案。通过采用新方法,大幅降低了配置的复杂性,并显著提升了小部件配置界面的简洁性。

SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors ( SwiftUI 应用生命周期管理:ScenePhase 的问题与使用 AppDelegate 适配器 )[16]

Jesse Squires[17]

自 WWDC 2020 起,SwiftUI 引入了 ScenePhase API,用以表示应用的生命周期状态。然而,与基于 AppDelegate 的传统方法相比,ScenePhase 在处理如应用启动和终止等关键事件时显得力不从心。Jesse Squires 建议开发一个更全面的 AppPhase API,以便于窗口场景事件分离,独立管理应用级的生命周期事件。作者指出,当前的 ScenePhase API 过度依赖窗口管理,未能全面覆盖应用状态的变化,特别是在 macOS 上表现不佳,而在 iOS 上虽表现更佳,但仍有改进空间。

提示:处理 AppDelegate 逻辑的类可以实现 ObservableObject 协议,并且也可以与 Observation 框架相配合。因此,在构建自己的生命周期通知机制时,开发者可以充分利用这些特性,详情参见 探索 SwiftUI 属性包装器[18]

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞赞赏,并将其 转发 给更多的朋友。

参考资料

[1]

weekly.fatbobman.com: https://weekly.fatbobman.com

[2]

肘子的 Swift 记事本: https://fatbobman.com

[3]

SwiftUI 滚动控制 API 的发展历程与 WWDC 2024 的新亮点: https://t.ly/Gn0yv

[4]

Fatbobman( 东坡肘子 ): https://x.com/fatbobman

[5]

Reverse Engineering Photos' New Search UI ( 逆向工程:探索 iOS 18 Photos 应用的新搜索界面 ): https://t.ly/aFmzj

[6]

Seb Vidal: https://x.com/SebJVidal

[7]

When all you have is a Core Data, everything looks like… ( 当你只有 Core Data,一切看起来都像… ): https://t.ly/KlvfO

[8]

Wade Tregaskis: https://wadetregaskis.com

[9]

Create Custom SF Symbols in Sketch ( 在 Sketch 中创建自定义 SF Symbols ): https://t.ly/a0EXV

[10]

Danijela Vrzan: https://x.com/dvrzan

[11]

WebSocket tutorial using Swift and Hummingbird ( 使用 Swift 和 Hummingbird 框架实现 WebSocket 教程 ): https://t.ly/a41_9

[12]

Tibor Bödecs: https://x.com/tiborbodecs

[13]

Hummingbird: https://github.com/hummingbird-project/hummingbird

[14]

Migrating Widget Configurations with Parent Parameters to use AppIntent ( 使用 AppIntent 迁移具有父参数的小部件配置 ): https://t.ly/tHtwQ

[15]

Quentin Zervaas: https://x.com/qzervaas

[16]

SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors ( SwiftUI 应用生命周期管理:ScenePhase 的问题与使用 AppDelegate 适配器 ): https://t.ly/xo8vw

[17]

Jesse Squires: https://x.com/jesse_squires

[18]

探索 SwiftUI 属性包装器: https://t.ly/0Ogim

0 人点赞