Weekly Comment
Weekly Newsletter Progress and Blog Updates
On the evening of the latest weekly newsletter's release, the email subscription count surpassed 3,000. Combined with other distribution channels, each weekly newsletter now reaches at least 6,000 readers in the week following its publication. While this may not be an extraordinary achievement, it has far exceeded my initial expectations when I started this journey.
The key reason the weekly newsletter has gained such a following is the constant flow of high-quality content from the community. Over the past year, although some excellent authors have reduced their contributions for various reasons, new authors consistently bring fresh, outstanding articles every month. In most issues, I even find myself struggling to choose among so many great pieces—a "happy dilemma" that leaves me deeply gratified.
Of course, reader support is another crucial factor in the newsletter's continued growth. Receiving positive feedback from readers and seeing some articles gain more visibility thanks to recommendations in the newsletter constantly remind me of the value of this work.
Last week, I made a significant adjustment to the blog's architecture, migrating it from the traditional cloud hosting + CDN model to a Serverless setup. This change has greatly simplified the deployment process and reduced deployment time, giving me an opportunity to optimize part of the blog’s code. During this transition, some readers may have experienced issues accessing the blog due to DNS propagation delays. Here are a few potential solutions to resolve this:
Clear your browser cache, especially for data related to the blog.
Configure your device to use a more well-known DNS provider for faster propagation.
Visit the backup site at fatbobman.github.io.
Additionally, I have introduced a new "Quick Tips" section on the blog. This section is dedicated to concise, focused articles that address specific problems. These articles avoid in-depth discussions or theoretical explanations, allowing readers to quickly find practical solutions.
Thank you to every reader for your support and feedback. I look forward to continuing this journey together and witnessing the creation of even more amazing content in the future!
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
Recent Selections
Advanced Navigation Destinations in SwiftUI
Since the introduction of NavigationStack
, SwiftUI has significantly enhanced navigation flexibility. However, the native implementations of NavigationPath
and navigationDestination
still face limitations, particularly the need to define a separate handler for each navigation destination, which often leads to redundant code and maintenance challenges. To address these issues, Michael Long developed an open-source library, Navigator, which provides a more powerful navigation layer for SwiftUI, seamlessly supporting both declarative and imperative navigation. In this article, Long delves into the shortcomings of native navigation approaches and explains how Navigator improves the developer experience with features like enumerated navigation destinations, coordination patterns, and navigation checkpoints, offering an elegant solution for complex navigation needs.
Getting Git Revision Info Within Your iOS App
In the fast-paced development cycle of modern projects, it’s often difficult for developers to pinpoint the exact branch or version when receiving feedback from testers or users. Rich Infante shares a simple yet effective method to address this challenge: by using a build script, you can embed the current Git commit hash and branch name into your app. This enables developers to quickly trace the state of the source code during debugging and version releases, providing a robust tool for version management.
Uncovering and Solving a SwiftUI Text Animation Bug
SwiftUI is widely appreciated for its simplicity in creating animations, but sometimes, even with careful adjustments, views may not behave as expected. In this article, Omar Elsayed shares a problem encountered in a project where the offset
animation for a Text
view failed to work. By referring to a solution proposed by developer kurtlee93, the issue was resolved using GeometryEffect
and AnimatableData
.
When animations fail, developers often turn to
AnimatableData
to explicitly provide interpolation for views, which usually yields the desired result. However, we still hope Apple resolves these long-standing bugs soon.
How a New Xcode 16 Feature Helped My Work Project Eliminate 66,000 Lines of Code
Xcode 16 introduced the buildable folders feature, allowing direct file management through the file system and eliminating the need for complex references in pbxproj
files. In this article, Makwan Barzan shares how his team’s detailed and effective efforts reduced 66,000 lines of redundant references in their old project’s pbxproj
file. By adopting folder-based organization, they not only minimized merge conflicts but also significantly improved project management efficiency.
Building a Weather API Backend with Swift Vapor: A Deep Dive
Many Swift developers have considered trying Vapor for building backend services. Arrinal used SwiftUI and Vapor to create an open-source weather service project. Through two articles, he systematically explains how to apply Clean Architecture principles to build a maintainable and extensible SwiftUI app and provides a backend service to support it. In the frontend section, he demonstrates how dependency injection (Swinject) and Combine enable reactive data flow while maintaining a clear architecture. On the backend, he leverages Vapor’s modern features, such as async/await and middleware, to create a high-performance and standardized API service seamlessly integrated with the SwiftUI app.
SwiftUI Lists: Present Rows of Data Explained with Code Examples
List
is a core component in SwiftUI, offering efficient data row presentation and multiple built-in styles to meet various UI needs. However, many developers may not fully understand the differences and use cases for each style. Antoine van der Lee provides a comprehensive guide through intuitive code examples, showcasing the basic functionalities of SwiftUI List
, its different styles, and advanced features like grouping, selection, and customized backgrounds. This article serves as a practical and clear resource for developers to master the use of List
.
肘子的话
周报进展与博客调整
在上期周报发布的当晚,邮件订阅量突破了 3000。结合其他发布渠道,每期周报在发布当周至少覆盖 6000 名以上的读者。虽然这一成绩谈不上多么卓越,但已远远超出了我创办之初的预期。
周报能够获得如此多读者的喜爱,最重要的原因在于社区中不断涌现的优质内容。过去一年中,虽然一些优秀的作者因种种原因减少了分享,但每个月都会有新的作者带来高质量的文章。在大多数情况下,我甚至会因为精彩文章过多而纠结于取舍,这种“幸福的烦恼”让我倍感欣慰。
当然,读者的支持也是周报持续发展的重要动力。无论是收到读者的正向反馈,还是看到一些作者的文章因周报推荐而获得更多阅读量,都让我感受到这份工作的意义和价值。
上周,我对博客架构进行了重要调整,将其从传统的云主机 + CDN 模式迁移到 Serverless。此举极大地简化了博客的部署流程和耗时,因此我也趁机优化了一部分代码。在此期间,由于 DNS 刷新的延迟问题,部分读者可能遇到页面无法访问的情况。以下是几种可能的解决办法:
清空浏览器的缓存,特别是与博客相关的部分;
将设备的 DNS 设置为更知名的解析服务商,以加快 DNS 刷新;
访问博客的备份站点:fatbobman.github.io。
此外,我在博客中新增了一个“小贴士”板块,用于分享内容简短、主题明确的文章。这类文章聚焦于快速解决实际问题,不涉及原理和讨论,方便读者以最快的方式找到答案。
感谢每一位读者的支持和反馈,期待未来能和大家一同见证更多精彩内容的诞生!
如果您发现这份周报或我的博客对您有所帮助,可以考虑通过 爱发电,Buy Me a Coffee 支持我的创作。
原创
近期推荐
🪜 SwiftUI 高级导航 (Advanced Navigation Destinations in SwiftUI)
SwiftUI 自引入 NavigationStack
后,显著提升了导航的灵活性。然而,NavigationPath
和 navigationDestination
的原生实现在实际使用中仍显局限,尤其是每个导航目标都需单独定义处理器,容易导致代码重复和维护困难。为了解决这些问题,Michael Long 开发了开源库 Navigator,为 SwiftUI 提供了一套功能更加强大的导航层,支持声明式与命令式导航的无缝切换。在这篇文章中,Long 深入探讨了原生导航方式的不足,以及 Navigator 如何通过枚举导航目标、协调模式和导航检查点等特性改进开发体验,为复杂的应用导航需求提供了优雅的解决方案。
在 iOS 应用中获取 Git 修订信息 (Getting Git Revision info within your iOS App)
在项目快速迭代的过程中,当开发者收到测试员或用户的反馈时,往往难以及时定位问题所在的分支或版本。Rich Infante 分享了一个简单且高效的方法:通过构建脚本,将当前代码库的 Git 提交哈希值、分支名称等信息嵌入到应用中,帮助开发者在调试和发布版本时快速追溯源代码的状态。
🪜 SwiftUI 文本动画 Bug 的发现与解决 (Uncovering and Solving a SwiftUI Text Animation Bug)
SwiftUI 因其简洁易用的动画功能而广受开发者喜爱,但有时,即使我们精心调整,视图也未必能按预期实现动画效果。在这篇文章中,Omar Elsayed 分享了他在项目中遇到的一个问题:Text
视图的 offset
动画无法正常工作。通过参考开发者 kurtlee93 提出的解决方案,作者利用 GeometryEffect
和 AnimatableData
成功解决了这一问题。
遇到动画失效的问题时,开发者常用
AnimatableData
为视图显式提供动画插值,经常能达到预期效果。不过,我们仍然期待苹果尽快修复这些长期存在的 bug。
Xcode 16 的新特性如何帮助我的项目减少 66,000 行代码 (How a New Xcode 16 Feature Helped My Work Project Eliminate 66,000 Lines of Code)
Xcode 16 引入了可构建文件夹(buildable folders)特性,通过文件系统直接管理文件,取代了对 pbxproj
文件中复杂引用的依赖。在这篇文章中,Makwan Barzan 分享了他们团队如何通过细致而卓有成效的努力,成功减少了旧项目 pbxproj
文件中的 66,000 行冗余引用。采用文件夹组织结构不仅降低了合并冲突风险,也显著提升了项目管理效率。
🪜 使用 Swift Vapor 构建天气 API 后端 (Building a Weather API Backend with Swift Vapor: A Deep Dive)
我想很多 Swift 开发者在构建后端服务时或多或少都会想过尝试一下 Vapor。Arrinal 使用 SwiftUI 和 Vapor 构建了一个开源的天气服务项目。通过两篇文章,他系统地介绍了如何运用 Clean Architecture 的思想构建一个可维护、易扩展的 SwiftUI 应用,并用 Vapor 提供支持其功能的后端服务。在前端部分,他展示了如何通过依赖注入(Swinject)和 Combine 实现响应式数据流,同时保持架构清晰分层;在后端部分,他采用 Vapor 的现代特性(如 async/await 和中间件)构建了一个高性能、标准化的 API 服务,与 SwiftUI 应用无缝集成。
SwiftUI List:使用代码示例详解数据行展示 (SwiftUI Lists: Present Rows of Data Explained with Code Examples)
List
是 SwiftUI 中一个核心组件,不仅能够高效展示数据行,还提供了多种预置的样式以适应不同的 UI 需求。然而,对于每种风格的特点和适用场景,许多开发者可能并不熟悉。Antoine van der Lee 在这篇文章中,通过一系列直观的代码示例,系统地介绍了 SwiftUI List
的基本功能、不同风格的应用,以及如何实现分组、选择、多样式背景等功能。这篇文章为开发者全面掌握 List
的使用提供了一份清晰且实用的指南。
活动
LET'S VISION 2025 创作者大会火热开票,席位有限,速来抢购!
LET'S VISION 是中国最大、最具国际化的 Apple 生态盛会,被誉为 Apple 生态中的“超级盛典”,犹如 Apple 世界的 TGS、E3 或 ChinaJoy!本届大会将带领你走在 Apple 生态的最前沿,展示最创新、最尖端的产品与技术。无论你是开发者、创业者,还是行业精英,这将是你不可错过的年度盛会!
📅 大会日期:2025年3月1日-3月2日 📍 举办地点:上海鲜花港 🎯 本届主题:人工智能 + 空间计算 = 无限♾️
在一个专为本次大会定制的 10000 平方米户外场地上,我们将为你呈现震撼的活动体验。大会现场不仅有能容纳超过 1000 人的主会场,还有 100+ 展位展示最前沿的技术和创新产品。今年,我们还特别设计了“极客相亲角”环节,为创业者提供与 VC 投资人、合作伙伴、行业领袖面对面交流的机会,帮助你拓展资源、结识合适的合作伙伴和人才。
🚀 特别嘉宾阵容: 今年我们邀请了全球顶尖行业专家和苹果官方团队亮相—— Apple 官方设计布道师 Sara, Hacking With Swift 创始人 Paul, Apple Design Award 2024 获奖者、Blackbox 创始人 Ryan, App Store Award 2024 获奖者、THRASHER 创始人 Mike, 以及更多重量级嘉宾。
🎤 丰富的活动内容:
30场演讲,洞察未来科技发展趋势
7个工作坊,与专家零距离互动,深度学习
100个应用展示,探索最前沿的创新作品
这不仅是一个技术交流的平台,也是全球 Apple 生态中的创新者、领袖、投资者齐聚的舞台!你将亲身体验到最前沿的人工智能与空间计算技术,并与行业领袖们共同探讨未来科技的无限可能。
⏳ 仅开放 1000个名额,一旦售完将不再补充!快来抢票,和我们一起见证未来科技的巅峰时刻!