Weekly Comment
Better or Cheaper?
Recently, Apple officially expanded the Apple Vision Pro (AVP) to markets in more countries. Given the uniqueness of AVP, especially the need for custom lenses for eyeglass wearers, allowing consumers to experience the product firsthand will undoubtedly improve their understanding and potentially drive sales. However, without significant improvements in price, wearing comfort, and ecosystem, merely expanding the sales territory may not lead to exciting market performance.
Lately, rumors have been swirling about Apple possibly halting the development of the second-generation Apple Vision Pro. It's said that Apple might focus on developing a more affordable, lower-end headset. While lowering the price could stimulate market demand, it would inevitably lead to compromises in hardware specifications. Whether this strategy can truly promote AVP's long-term development remains debatable.
Notably, among the first-generation AVP users, many didn't purchase the device as a daily computing device but for specific use cases. For instance, some users employ AVP as a high-end audio-visual device, leveraging its superior visual effects and immersive experience. Compared to traditional audio-visual equipment, AVP demonstrates a higher value for money. Moreover, applications in the medical field are particularly noteworthy, with many doctors already using AVP in surgeries, showcasing its unique value and practicality compared to traditional medical equipment. For these users, expectations for the next generation product include further improvements in wearing comfort, performance, and display quality.
Although AVP's price is high for most consumers, it's this price range that allows it to offer performance and experiences surpassing competitors in specific fields. Therefore, offering only a lower-cost version while abandoning the high-end market might not be the best choice, especially if it doesn't significantly boost sales.
Currently, these reports remain rumors. Consumers' demands are always straightforward: to obtain satisfactory products at reasonable prices. Apple might consider a two-pronged strategy: on one hand, introducing a more cost-effective entry-level model to increase the popularity of headset devices; on the other hand, continuously optimizing AVP's performance to maintain its industry-leading position. If conditions allow, the coexistence of high-end and affordable options might be an ideal solution to balance various needs.
In the future, with technological advancements and reduced production costs, we have reason to expect more perfect headset devices. However, it's still a long way to go before most people recognize and accept the headset form factor. We can't even rule out the possibility that before headset devices truly become widespread, a brand-new revolutionary technology might emerge, fundamentally changing how we interact with the digital world. Regardless, continuous innovation, listening to user needs, and maintaining keen insights into future technology trends will be key to ensuring the thriving development of AVP and its subsequent product lines, as well as the entire wearable device industry.
Previous Issue|Newsletter Archive
If you appreciate my work and want to promote your product to the Swift and iOS developer community, sponsoring my platform could be an excellent opportunity for you.
Your support through Patreon, or Buy Me a Coffee helps keep this newsletter and blog running. Thank you for finding this content helpful!
Originals
The Evolution of SwiftUI Scroll Control APIs and Highlights from WWDC 2024
At WWDC 2024, Apple once again introduced a series of remarkable new APIs for SwiftUI’s ScrollView
component. These new features not only enhanced developers’ ability to control scrolling behaviors but also reflected the ongoing evolution of the SwiftUI framework’s design philosophy. This article will explore these latest scroll control APIs and review the development of all significant APIs related to scroll control since the inception of SwiftUI. Through this micro view, we will reveal the changes in SwiftUI’s design style over the past few years and the underlying macro design trends.
Recent Selections
Reverse Engineering Photos' New Search UI
In the latest iOS 18 update, Apple has completely redesigned its Photos app, including adjustments to the location and display of the search box. In this in-depth technical article, Seb Vidal analyzes how to simulate this innovative design using both public APIs and some undisclosed ones. The article thoroughly explores the application of key classes such as UIKBVisualEffectView
and UIKBBackdropView
, and leverages the Objective-C runtime and other tools to access and utilize these private APIs to achieve a visual effect consistent with the system keyboard background.
When all you have is a Core Data, everything looks like…
In this article, Wade Tregaskis revisits his experiences at Apple, especially when the Core Data team was eager to promote the newly developed Core Data technology to the Shark team. At that time, Core Data was similar to today's SwiftData, lacking in functionality and fraught with issues. Through sharing a practical example, the article reveals the apparent limitations of Core Data when faced with the vast and complex data of the Shark project. This experience is not only intriguing but also provides profound insights into the importance of technology selection and performance evaluation, emphasizing the various factors that need to be considered when choosing a data management solution.
Create Custom SF Symbols in Sketch
SF Symbols is a set of built-in vector graphic icons developed by Apple for the Apple ecosystem. This icon system is perfectly integrated with the system's default San Francisco font, ensuring consistency and flexibility in cross-platform interface design. Although Apple provides thousands of customizable, easy-to-use high-quality icons, developers may still need specific icons that are not found in the existing collection. In this article, Danijela Vrzan introduces how to create custom SF Symbols in Sketch. Through a specific example of separating fork and knife icons, the article provides a detailed demonstration of the entire process, offering a practical guide for developers.
WebSocket tutorial using Swift and Hummingbird
Hummingbird is a high-performance, flexible web framework written in Swift, designed specifically for developing modern server-side applications. In this tutorial, Tibor Bödecs provides a detailed guide on how to use Swift and Hummingbird to create real-time communication applications using the WebSocket protocol. The article not only compares WebSockets with other real-time communication technologies such as HTTP long polling, HTTP streaming, Comet, and SSE but also highlights the limitations of these methods at the protocol level. Through this article, readers will gain a deep understanding of how to implement WebSocket communication in Swift and master its technical advantages and application scenarios.
Migrating Widget Configurations with Parent Parameters to use AppIntent
Starting with iOS 17, Apple introduced the "App Intents" system, replacing the previous "INIntents" system, to make widget configuration more flexible. Although the transition from the old system to the new one has been relatively smooth in most cases, challenges arise when dealing with parent parameters that need to dynamically show and hide configuration options. In this article, Quentin Zervaas shares his solution to this problem. By adopting a new method, the complexity of configuration has been greatly reduced, and the widget configuration interface has been significantly streamlined.
SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors
Since WWDC 2020, SwiftUI has introduced the ScenePhase API to represent the application's lifecycle states. However, compared to traditional methods based on the AppDelegate, ScenePhase falls short in handling crucial events such as application launch and termination. Jesse Squires advocates for the development of a more comprehensive AppPhase API to separate window scene events and independently manage application-level lifecycle events. The author points out that the current ScenePhase API is overly reliant on window management and fails to cover the full spectrum of application state changes, performing poorly on macOS while being somewhat better on iOS.
Tip: Classes handling AppDelegate logic can implement the
ObservableObject
protocol and can also be combined with the Observation framework. Therefore, developers can fully utilize these features when constructing their own lifecycle notification mechanisms, for more details see Exploring SwiftUI Property Wrappers.
肘子的话
更好还是更便宜?
近日,苹果正式将 Apple Vision Pro (AVP) 推广到更多国家的市场。考虑到 AVP 的独特性,尤其需要为戴眼镜用户提供定制的镜片,消费者能够亲身体验这款产品无疑会增进对其的了解,有望带动销量。然而,若价格、佩戴舒适度和生态系统等核心问题未能得到显著改善,仅仅扩大销售范围恐难以带来令人振奋的市场表现。
最近,关于苹果可能暂停 Apple Vision Pro 二代开发的传言甚嚣尘上。据称,苹果或将精力转向开发一款更为亲民的低端头显产品。虽然降低价格可能会激发市场需求,但也不可避免地会导致硬件规格的妥协。这种策略是否真能推动 AVP 的长远发展,仍有待商榷。
值得关注的是,AVP 的初代用户中,许多人购买此设备并非将其作为日常计算设备使用,而是针对特定的应用场景。例如,有些用户将 AVP 用作高端影音设备,利用其卓越的视觉效果和沉浸式体验,与传统影音设备相比,AVP 显示出较高的性价比。此外,医疗领域的应用尤为引人注目,许多医生已开始在手术中使用 AVP,与传统医疗设备相比,AVP 显示出其独特的价值和实用性。对这部分用户而言,他们期待下一代产品在佩戴舒适度、性能和显示效果上的进一步提升。
尽管对大多数消费者而言,AVP 的价格偏高,但正是这个价格区间使其在特定领域提供了超越竞争对手的性能和体验。因此,在未必能显著提升销量的情况下,仅提供更低成本的版本而放弃高端市场,可能并非最佳选择。
目前,这些消息都还停留在传言阶段。消费者的诉求始终简单明了:以合理的价格获得满意的产品。苹果或许可以考虑双管齐下的策略:一方面推出性价比更高的入门款,提高头戴设备的普及率;另一方面持续优化 AVP 的性能,巩固其在行业中的领先地位。在条件允许的情况下,高端与亲民并行不悖,可能是平衡各方需求的理想方案。
未来,随着技术的进步和生产成本的降低,我们有理由期待更加完美的头戴设备。然而,让大多数人都认可并接受头显这种形态仍有很长的路要走。我们甚至不能排除这样一种可能性:在头显设备真正普及之前,一种全新的革命性技术可能会横空出世,彻底改变我们与数字世界交互的方式。无论如何,持续创新、倾听用户需求,并保持对未来技术趋势的敏锐洞察,都将是确保 AVP 及其后续产品线,乃至整个可穿戴设备行业蓬勃发展的关键。
如果您发现这份周报或我的博客对您有所帮助,可以考虑通过 爱发电,Buy Me a Coffee 支持我的创作。
原创
SwiftUI 滚动控制 API 的发展历程与 WWDC 2024 的新亮点
在 WWDC 2024 中,苹果再次为 SwiftUI 的 ScrollView
组件带来了一系列令人瞩目的新 API。这些新功能不仅增强了开发者对滚动行为的控制能力,也反映了 SwiftUI 框架设计理念的持续演进。本文将探讨这些最新的滚动控制 API,并回顾从 SwiftUI 诞生至今与滚动控制相关的所有重要 API 的发展历程。通过这个微观视角,我们将揭示 SwiftUI 在过去几年中设计风格的变迁,以及背后蕴含的宏观设计趋势。
近期推荐
Reverse Engineering Photos' New Search UI ( 逆向工程:探索 iOS 18 Photos 应用的新搜索界面 )
在最新的 iOS 18 更新中,苹果公司对其照片应用进行了全面的重新设计,其中就包含了对搜索框位置和显示效果的调整。在这篇深入的技术文章中,Seb Vidal 分析了如何利用公开的 API 以及一些未公开的 API 来模拟这一新颖的设计。文章详细探讨了 UIKBVisualEffectView
和 UIKBBackdropView
等关键类的应用,并通过 Objective-C 运行时及其他工具访问和利用这些私有 API,以达到与系统键盘背景一致的视觉效果。
When all you have is a Core Data, everything looks like… ( 当你只有 Core Data,一切看起来都像… )
本文中,Wade Tregaskis 回顾了他在苹果公司的经历,特别是当时 Core Data 团队急切希望推广新生的 Core Data 技术给 Shark 团队。Core Data 当时与现在的 SwiftData 类似,功能尚显不足且存在诸多问题。文章通过分享一个实际的案例,揭示了当面对 Shark 项目中的庞大且复杂的数据时,Core Data 的明显局限性。这一经历不仅有趣,同时也提供了对技术选型和性能评估重要性的深刻洞见,强调了在选择数据管理方案时需要权衡的各种因素。
Create Custom SF Symbols in Sketch ( 在 Sketch 中创建自定义 SF Symbols )
SF Symbols 是 Apple 专为苹果生态系统开发的一套内置矢量图形图标系统。这套图标系统与系统默认字体 San Francisco 完美集成,确保了跨平台界面设计的一致性和灵活性。虽然 Apple 提供了数千个可自定义和易于使用的高质量图标,但在某些情况下,开发者可能仍需特定的图标未能在现有集合中找到。在这篇文章中,Danijela Vrzan 介绍了如何在 Sketch 应用程序中创建自定义 SF Symbols 图标。文章通过一个将叉子和刀子图标分离的具体例子,详细展示了整个过程,为开发者提供了一个实用的指南。
WebSocket tutorial using Swift and Hummingbird ( 使用 Swift 和 Hummingbird 框架实现 WebSocket 教程 )
Hummingbird 是一个由 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 迁移具有父参数的小部件配置 )
从 iOS 17 版本开始,苹果引入了“App Intents”系统,以此替代之前的“INIntents”系统,目的是为了使小部件的配置更加灵活。虽然在多数情况下,从旧系统迁移到新系统都相对顺利,但在处理需要动态显示和隐藏配置选项的父参数时,迁移过程面临一些挑战。在本文中,Quentin Zervaas 分享了他针对这一问题的解决方案。通过采用新方法,大幅降低了配置的复杂性,并显著提升了小部件配置界面的简洁性。
SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors ( SwiftUI 应用生命周期管理:ScenePhase 的问题与使用 AppDelegate 适配器 )
自 WWDC 2020 起,SwiftUI 引入了 ScenePhase API,用以表示应用的生命周期状态。然而,与基于 AppDelegate 的传统方法相比,ScenePhase 在处理如应用启动和终止等关键事件时显得力不从心。Jesse Squires 建议开发一个更全面的 AppPhase API,以便于窗口场景事件分离,独立管理应用级的生命周期事件。作者指出,当前的 ScenePhase API 过度依赖窗口管理,未能全面覆盖应用状态的变化,特别是在 macOS 上表现不佳,而在 iOS 上虽表现更佳,但仍有改进空间。
提示:处理 AppDelegate 逻辑的类可以实现
ObservableObject
协议,并且也可以与 Observation 框架相配合。因此,在构建自己的生命周期通知机制时,开发者可以充分利用这些特性,详情参见 探索 SwiftUI 属性包装器。