Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >别让 Vibe Coding 阻碍了你的技术成长 | 肘子的 Swift 周报 #082

别让 Vibe Coding 阻碍了你的技术成长 | 肘子的 Swift 周报 #082

作者头像
东坡肘子
发布于 2025-05-13 02:54:03
发布于 2025-05-13 02:54:03
570
举报

weekly.fatbobman.com[1]订阅本周报的电子邮件版本。访问我的博客 肘子的 Swift 记事本[2]查看更多的文章。加入 Discord[3]社区,与 2000+ 中文开发者深入交流 Swift、SwiftUI 开发体验。

别让 Vibe Coding 阻碍了你的技术成长

几天前,一位之前高度赞扬并全身投入 Vibe Coding 的好友发表了一篇推文,表达了他近期基于 AI 编程的挫败感:

"最近的 Vibe Coding 并没有给我写代码带来任何愉悦感,正相反的是 AI 无法一击必中带来的挫败感。开始重新阅读官方文档和优质视频,自下而上,那种对项目的掌控感又回来了。"

我想这种情绪也会出现在不少开发者身上。当今的大语言模型往往能在我们不太熟悉的领域展现惊人能力,给我们留下深刻的第一印象,从而产生过高期待。然而深入使用后,我们才逐渐发现 AI 的局限性远比想象中更为明显。

一直以来,我在编程中都将 AI 的参与限制在特定范围内:生成并完善文档、以函数为单位对代码进行优化、帮助我理解和学习陌生的框架与技术细节等。即便如此,AI 带来的效率提升依然令人惊叹。更可贵的是,在 AI 的辅助下,我能感受到自己技能的不断提升,这种成长给了我掌控技术的信心。

回想 ChatGPT 刚出现时引发的社会恐慌(人力将被取代,导致大量失业),这些预言并未成真。相反,随着人们对 AI 能力边界的认识逐渐清晰,讨论焦点已转向如何借助 AI 辅助人工,而非完全替代人工。AI 作为一种工具,与人类历史长河中所有工具一样,本质上是人类能力的延伸。如果你觉得在使用过程中遇到了困境,或许应该反思自己看待和使用它的方式是否恰当。

“享受氛围,但不要沉沦其中”。Vibe Coding 作为新兴的编程范式确实让编程更高效也更有趣,但它不应成为我们放弃深入学习和理解技术的借口。理性看待 AI 的能力边界,在提高效率的同时,不忘技术精进的初心。或许未来 AI 能代替我们“敲“代码,但我们必须掌握思考和创造的主动权。

前一期内容全部周报列表

欢迎 点赞转发

原创

从 180 cm 到 5′ 11″:Swift Measurement 全解析[4]

在日常生活里,人们经常需要在各种度量衡单位之间转换。对开发者而言,实现这类功能看似简单:写几行公式、做几次 switch,似乎就能完成任务。但当你希望同时支持数十种单位、无缝国际化,并且还要考虑格式化、精度、舍入等细节时,工作量立刻飙升,且枯燥到足以让人怀疑人生。好消息是——从 iOS 10 起,苹果在 Foundation 中加入了完善的 Measurement API,帮我们把这一切“苦力活”都完成了。本文将带你系统地了解它的用法与实践。

【Tip】将访问权限控制在 Swift Package 内[5]

近期推荐

十年后,我为游戏加上了无障碍支持 (Ten Years Older, Voice Takes Over)[6]

每年五月的第三个星期四是全球无障碍宣传日 (GAAD)。尽管苹果为无障碍开发提供了完善的 API 体系,许多开发者依然因为“看起来太麻烦”而忽略了这块用户体验的基础工程。在这篇文章中,作者 Edvinas Byla[7]回顾了自己为十年前的游戏 Decrypto补上 VoiceOver 支持的全过程——通过 SwiftUI 的无障碍 API,他完成了从“完全忽略”到“主动设计”的认知转变。Byla 指出,大多数 SwiftUI 控件本身已经具备良好默认行为,而常见的几个修饰符就能覆盖 90% 以上的无障碍需求。这篇文章不仅是一个 VoiceOver 实践案例,也是一份关于“为所有人设计”的真诚倡议。

给二进制 Swift 包加上依赖的变通法 (Adding Dependencies to Binary Swift Packages)[8]

虽然 SwiftPM 的 .binaryTarget是闭源 SDK 分发的常见手段,但其无法声明依赖一直是个公认的痛点。Daniel Saidi[9]在实践中探索出了一种可行的绕过方式 —— 通过在包中添加多个 binaryTarget,并将它们同时列入产品的 targets,实现间接的依赖注入。尽管这种方式尚未验证是否适用于普通源码包,但对于闭源组件的 Swift 包依赖管理来说,这无疑是一个值得关注的重要突破。

SwiftUI 中的 ViewModel 生命周期管理 (SwiftUI View Model Ownership)[10]

在 SwiftUI 中,如果一个视图既需要拥有 ViewModel 的生命周期,又希望根据传入参数初始化它,就可能触发一系列状态管理的陷阱和隐性 bug。Chris Eidhof[11]在本文中分析了这些问题,并展示了从错误实现到渐进式修复的全过程。他总结出一条重要的实践经验:“如果你无法在声明时初始化 @State,或无法将其设为 private,那你很可能在设计上出了问题。”

为什么我们总是不想写 iOS 测试?(Why We Keep Avoiding Tests in iOS)[12]

如果你不爱写测试,本文也许能为你“辩护”:不是你懒,而是工具不给力。Karin Prater[13]系统梳理了苹果开发生态中各类测试工具的优劣,指出 SwiftUI 虽革新了 UI 构建方式,却在可测试性方面严重缺位。Prater 提出构建良好 SwiftUI 测试体验所需的六个关键维度:速度、稳定性、反馈、交互、精确断言与可维护性。在后续文章中,作者还将分享一个可实际落地的 SwiftUI 测试模式,值得关注。

Cocoa 入门手册 (Cocoa Basics)[14]

尽管 SwiftUI 越发成熟,仍有不少开发者渴望用纯 AppKit 代码(不依赖 Xcode GUI 工具)构建原生 macOS 应用。这正是 Luna Razzaghipour[15]在《Cocoa Basics》系列[16]中要做的事:不用模板、不靠 IDE,全程只写代码。教程从构建最小可运行的 Cocoa 应用入手,手动搭建 .appbundle 结构,并使用命令行工具完成编译与运行。

用 LogUI 多窗口搜索提高日志分析效率 (Reducing Noise by Searching LogUI’s Views)[17]

macOS 应用在启动的短短几秒内就可能生成数万条日志,分析起来既费力又低效。Howard Oakley[18]在本文中展示了如何借助他开发的工具 LogUI[19]通过多窗口并行搜索同一日志视图中的不同关键词,分阶段拆解和追踪 app 启动过程中的关键事件,大大提升了日志分析的可读性与效率。

工具

xtool[20]

xtool是一个跨平台的 Xcode 替代方案,支持在 LinuxWindows 和 macOS 上使用 SwiftPM 构建和部署 iOS 应用。它不仅打破了 macOS/Xcode 的平台限制,还集成了与 Apple Developer Services 和真实设备交互的能力,非常适合用来探索 Swift 跨平台开发、自动化打包和远程部署的可能性。项目还提供了清晰易懂的 入门教程[21],可以快速上手。

Xogot[22]

Godot 是一款广受欢迎的开源游戏引擎,最近还获得了 Apple 对其在 visionOS 上运行的官方支持。而 Xogot 则进一步拓展了它的使用场景 —— 这是一个将 Godot 4.4 完整移植到 iPad 的原生应用,现已登陆 App Store[23]。Xogot 支持在 iPad 上直接运行和调试 Godot 项目,内置 2D/3D 场景编辑器、代码编辑器、调试器等全套工具,并针对触控操作、Apple Pencil 和多窗口使用场景进行了优化。整个 UI 基于 SwiftUI 重写,体验上更贴近 iPadOS 的原生范式。

戴铭的小册子[24]

最初作为一款聚焦 Apple 生态内容汇总与技术资料管理的开源项目 SwiftPamphletApp[25],如今在作者 戴铭[26]的推动下迎来 6.6.7 版的重大更新:正式更名为《小册子》,并完成从“开发工具箱”到“知识宇宙”的转型。新版小册子融合了代码技巧、人文思考、历史纵览与播客拓展阅读,是一个集“技术资料 + 知识花园 + 灵感收纳”为一体的现代数字笔记应用,满足碎片学习、深度阅读与兴趣探索的多重场景。

应用代码依然保持开源,并可从 App Store[27]下载体验。

参考资料

[1]

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

[2]

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

[3]

Discord: https://t.ly/gzxeh

[4]

从 180 cm 到 5′ 11″:Swift Measurement 全解析: https://fatbobman.com/zh/posts/a-complete-guide-to-swift-measurement/?utm_source=fatbobman%20weekly%20issue%2083&utm_medium=web

[5]

【Tip】将访问权限控制在 Swift Package 内: https://fatbobman.com/zh/snippet/controlling-access-within-a-swift-package/?utm_source=fatbobman%20weekly%20issue%2083&utm_medium=web

[6]

十年后,我为游戏加上了无障碍支持 (Ten Years Older, Voice Takes Over): https://l.fatbobman.com/w083-01

[7]

Edvinas Byla: https://www.linkedin.com/in/byla/

[8]

给二进制 Swift 包加上依赖的变通法 (Adding Dependencies to Binary Swift Packages): https://l.fatbobman.com/w083-02

[9]

Daniel Saidi: https://x.com/danielsaidi

[10]

SwiftUI 中的 ViewModel 生命周期管理 (SwiftUI View Model Ownership): https://l.fatbobman.com/w083-03

[11]

Chris Eidhof: https://m.objc.io/@chris

[12]

为什么我们总是不想写 iOS 测试?(Why We Keep Avoiding Tests in iOS): https://l.fatbobman.com/w083-04

[13]

Karin Prater: https://x.com/swiftyplace

[14]

Cocoa 入门手册 (Cocoa Basics): https://l.fatbobman.com/w083-05

[15]

Luna Razzaghipour: https://github.com/lunacookies

[16]

系列: https://blog.xoria.org

[17]

用 LogUI 多窗口搜索提高日志分析效率 (Reducing Noise by Searching LogUI’s Views): https://l.fatbobman.com/w083-06

[18]

Howard Oakley: https://x.com/howardnoakley

[19]

LogUI: https://eclecticlight.co/2025/03/14/browse-your-macs-log-with-logui/

[20]

xtool: https://l.fatbobman.com/w083-07

[21]

入门教程: https://swiftpackageindex.com/xtool-org/xtool/1.10.1/tutorials/xtool/first-app

[22]

Xogot: https://l.fatbobman.com/w083-08

[23]

App Store: https://apps.apple.com/us/app/xogot-make-games-anywhere/id6469385251

[24]

戴铭的小册子: https://l.fatbobman.com/w083-09

[25]

SwiftPamphletApp: https://github.com/ming1016/SwiftPamphletApp

[26]

戴铭: https://x.com/daiming_cn

[27]

App Store: https://apps.apple.com/cn/app/戴铭的小册子/id1609702529

[28]

查看职位详情: https://www.zhipin.com/job_detail/0e1d7bd9ab6584f403V63ti8E1NT.html?utm_source=fatbobman%20weekly%20issue%2083&utm_medium=web

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 肘子的Swift记事本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档