欢迎访问 fatbobman.substack.com[1] 订阅本周报的中英文电子邮件版本。
肘子的话
近日,苹果公司在一次内部会议上宣布了终止其雄心勃勃的造车项目“泰坦”,标志着这个长达十年、耗资巨大的秘密项目的正式结束。随着项目的终止,部分员工将被转移到 AI 研发岗位,以加速苹果在该领域的发展。有消息称,苹果计划在 Siri、Spotlight 和 Xcode 等产品中加入更多 AI 功能,希望这次人员调整能够帮助苹果缩小与其他 AI 行业领导者间的差距。
作为长期使用苹果产品的用户,我对于苹果进军汽车行业的举动始终持有保留态度。我曾自问:苹果能否成功制造汽车?它们制造的汽车能否具有足够的独特性来吸引消费者?尽管电动汽车的兴起降低了进入汽车行业的门槛,但这也导致了市场上产品的同质化问题。因此,电动汽车制造商投入巨资于智能技术,以赋予汽车全新的特性。考虑到顶尖电动汽车制造商已在此领域深耕多年,苹果要创造出类似于 Apple Vision Pro 远超竞品的汽车产品面临重大挑战。
此外,虽然苹果在供应链管理方面经验丰富,但全球几乎没有能同时满足苹果对质量、产量和成本要求的汽车代工厂。最近几年,原本闲置的产能已逐步释放,许多公司通过合并或收购进入电动汽车市场,推出自有品牌汽车。显然,即使苹果能设计出具有吸引力的汽车,生产这样一款车也是一大挑战,尤其是在目前电动汽车行业普遍降价的市场环境下,生产一款低毛利率的产品并不符合苹果一贯的商业模式。
综上所述,苹果放弃汽车项目并转向加强 AI 研发,或许是一种策略上的自我解脱。正如中国古语“塞翁失马,焉知非福”所示,虽然苹果在 AI 领域面临挑战,但全力以赴就有可能弥补这一差距,不被 AI 时代所淘汰。那些从汽车项目中得到的灵感、经验和专利,未来可能在苹果的其他产品或服务中发挥意想不到的作用。
前一期内容|全部周报列表
原创
Swift Predicate: 用法、构成及注意事项[2]
Fatbobman( 东坡肘子 )[3]
NSPredicate 是 Apple 提供的一个强大工具,允许开发者通过定义复杂的逻辑条件以自然且高效的方式对数据集合进行筛选和评估。随着时间的推移,Swift 语言的不断成熟和发展,2023 年 Swift 社区着手使用纯 Swift 语言重构 Foundation 框架。在这一重大更新中,引入了基于 Swift 编码的新 Predicate 功能,标志着在数据处理和评估方面迈入了新的阶段。本文旨在探讨 Swift Predicate 的使用方法、构成以及在实际开发中应注意的关键事项。
近期推荐
Dependency Injection for Modern Swift Applications[4]
Lucas van Dongen[5]
在本文,Lucas van Dongen 深入探讨了依赖注入(DI)在现代 Swift 应用开发中的核心作用及其实施策略,强调了准确实现 DI 的重要性。文章介绍了多种 DI 方法,通过示意图清晰展示了每种策略的工作原理及其面临的挑战,特别是如何在应用的生命周期中恰当地构建和利用依赖项。此外,文中对 Singleton 模式、基于树的结构、容器化方法以及其他技术进行了细致比较,评述了它们各自的优缺点。特别值得称赞的是,作者不仅总结了不同 DI 框架的特点,还针对不同规模和阶段的项目,提供了选择合适 DI 策略的宝贵建议。
How the Swift compiler knows that DispatchQueue.main implies @MainActor[6]
Ole Begemann[7]
可能一些开发者已经察觉到,在 Swift 代码中,若某个函数被明确标记为 @MainActor
,则其在 DispatchQueue.main.async
闭包内的调用会被编译器自动识别为在主执行者上执行。Ole Begemann 在本文中探讨了这一行为的内在机理。这一识别过程是在 Swift 编译器的语义分析阶段实施的,通过一种基于精确源代码拼写的检查机制来完成。虽然这项特性为开发者带来便利,但其隐蔽性增加了学习 Swift 并发的难度。作者建议 Apple 应在 Xcode 中增强对推断执行上下文的显示,明确标示代码是运行在主执行者、其他执行者还是全局协作池上,以此来降低 Swift 并发编程的复杂性,提升代码逻辑的透明度和易理解性。
Super-Resolution iPhone Panoramas for Vision Pro[8]
David Smith[9]
虽然 iOS 相机应用内置的全景模式拍摄便捷,但其产生的全景照片在 Apple Vision Pro 上的表现通常缺乏真正的沉浸感。David Smith 在本文中探讨了如何通过 iPhone 拍摄超高分辨率的全景照片来强化在 Vision Pro 上的沉浸体验。他采用标准相机模式捕捉一连串 48MP 的照片,并后期在 Photoshop 中将它们拼接成一幅超高清全景图。这样处理后的图片,以其惊人的细节和清晰度,在 Vision Pro 上展现出了无与伦比的沉浸感。David 对 Apple 未来可能在 iOS 或 iPhone 中整合类似的高分辨率全景拍摄功能充满期待,他推测这种技术最终可能会获得官方支持,从而在 visionOS 中提升全景照片的观赏体验。
Sharing state in the Composable Architecture[10]
Point-Free[11]
在先前的 Composable Architecture(TCA)版本中,实现不同 Reducer 间的状态共享往往充满挑战,开发者需要采用多种策略来实现这一目标。本文介绍了 Point-Free 发布的 TCA 的最新测试版,该版本提供了全新的工具:@Shared
属性包装器。它支持在应用程序全域内共享状态,并进一步提供了将状态持久化到用户默认设置和文件系统的功能。这一功能极大地丰富了状态管理和持久化的灵活性,让基于 TCA 的应用开发变得更加高效便捷。
How to use VariadicView, SwiftUI's Private View API[12]
Noah Martin[13] at Emerge Tools[14]
VariadicView 为开发者提供了定义容器视图的灵活途径,使得处理不确定数量的子视图成为可能,并允许根据需求对子视图进行布局和修饰,这一点对于打造复杂而可复用的 UI 组件极为关键。该功能初次由 Moving Parts[15] 揭示。这一私有 API 虽然未公开文档,但已被众多知名应用验证其安全性,并在生产环境中得到广泛应用。Noah Martin 在本文中展示了如何利用此 API 开发 SnapshotPreviews[16] 框架,该框架能够将 Xcode 预览转化为图像快照,进而支持将自动化快照测试集成进拉取请求,为应用开发提供了高效的测试解决方案。
Type-Driven Design with Swift[17]
Alex Ozun[18]
Type-Driven Design 是一种精炼的软件开发策略,它在设计软件时重点强调类型系统的运用,尤其适用于函数式编程环境。此方法通过充分利用静态类型,不仅确保了代码的准确性,还显著提升了代码的可读性和可维护性,并有效降低了运行时发生错误的可能性。在 Type-Driven Design 的哲学中,类型不简单地作为代码的组成部分,而是构建和实现软件系统的关键枢纽。Alex Ozun 正通过一系列精彩文章(计划九篇,已发布三篇)深入探索这一方法,目的是引领开发者转变他们的 Swift 编程思维。
THANK YOU
如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞、赞赏,并将其 转发 给更多的朋友。
参考资料
[1]
fatbobman.substack.com: https://fatbobman.substack.com
[2]
Swift Predicate: 用法、构成及注意事项: https://fatbobman.com/zh/posts/swift-predicate-usage-composition-and-considerations/
[3]
Fatbobman( 东坡肘子 ): https://twitter.com/fatbobman
[4]
Dependency Injection for Modern Swift Applications: https://t.ly/WMAVy
[5]
Lucas van Dongen: https://twitter.com/lucasvandongen
[6]
How the Swift compiler knows that DispatchQueue.main implies @MainActor: https://t.ly/63gh4
[7]
Ole Begemann: https://twitter.com/olebegemann
[8]
Super-Resolution iPhone Panoramas for Vision Pro: https://t.ly/iQRqb
[9]
David Smith: https://mastodon.social/@_Davidsmith
[10]
Sharing state in the Composable Architecture: https://t.ly/l2pCf
[11]
Point-Free: https://twitter.com/pointfreeco
[12]
How to use VariadicView, SwiftUI's Private View API: https://t.ly/Zzr6J
[13]
Noah Martin: https://twitter.com/sond813
[14]
Emerge Tools: https://twitter.com/emergetools
[15]
Moving Parts: https://t.ly/qE7_-
[16]
SnapshotPreviews: https://github.com/EmergeTools/SnapshotPreviews-iOS
[17]
Type-Driven Design with Swift: https://t.ly/EP34r
[18]
Alex Ozun: https://twitter.com/AlexOzun