#300
版本发布时间: 2024-08-05 10:00:29
SwiftOldDriver/iOS-Weekly最新发布版本:#305(2024-09-09 10:35:38)
老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
WWDC24 内参
🌟 WWDC24 10162 - 多次拍摄保持色彩一致
@bqlin:色彩一致性是人类视觉感知的一个特性,看苹果如何软硬件结合,在拍摄上重现该“生理”特性。
🌟 WWDC24 10149 - 在 SwiftUI 中设计窗口
@Rickey:Window(窗口) 是承载 App 内容的最重要的容器,尤其是在 macOS 和 VisionOS 平台上更是需要优雅地设计和使用窗口。本文将介绍 Windows 组件,并且基于一个 Demo(BOT-anist)从实战角度进行教学。
文章
🐎 Xcode-Kotlin 2.0 Release
@Crazy:本文是一篇公告,介绍了 Kotlin 的跨平台技术在 Xcode 上取得的巨大进展。Kotlin 的跨平台开发能力已经提供了很长一段时间了,这次,他们带着 xcode-kotlin 2.0 来再次挑战广大开发者的神经。下面是他在 2.0 版本中主要的优化项:
- 极大的提升了 Debugging 的性能(最快可达到之前的五倍)
- 扩展了每一帧变量的信息
- 在 Swift, Kotlin, Objective-C 下都可工作
- 默认支持 List 和 Map 并且后续还会持续更新(例如:StateFlow, Set)
Kotlin 还是延续了它一贯的特点,开源,免费,文章很短,大家可以快速浏览,对新技术有个简单的认知。
🐢 Async await in Swift: The Full Toolkit
@AidenRao:这篇博客介绍了 Swift 中异步 / 等待(async/await)的完整工具包,包括 async/await 基础语法、Task、Task group、Actors 等多种技术。通过实际示例和理论讲解,展示了这些工具在 Swift 并发编程中的用法和场景。
🐎 Building Swift Executables
@Kyle-Ye: 这篇文章介绍了如何在不同操作系统和架构上构建和分发 Swift 可执行文件。对于使用 Swift 构建 CLI 程序感兴趣的同学建议阅读学习。
🐕 Swift 6 适配的一些体会以及对现状的小吐槽
@含笑饮砒霜:这篇文章主要围绕 Swift 6 的迁移体验、并发编程的引入、以及作者对 Swift 语言发展的个人感想进行了详细阐述。
-
1.Swift 6 迁移体验
- 迁移挑战:作者提到 Swift 6 的迁移过程并不顺利,与 Swift 3 的迁移有相似之感,主要是因为并发编程和严格线程安全的引入
- 并发编程工具:Swift 6 通过 actor 隔离和 Sendable 标注等工具,试图在编译阶段就解决数据竞争和线程问题
- 迁移建议:尽管 Apple 提供了对旧版本的兼容选项,但迁移仍需要大量工作,作者建议新代码可以按 Swift 6 标准编写,老代码则观察后再决定
-
2.并发编程和严格线程安全
- 主要任务:迁移过程中的主要任务包括添加 @MainActor、标记 Sendable、以及将回调函数改写成 async 并考虑 Task 的使用
- @MainActor 的使用:UI 相关类型默认添加 @MainActor,非主线程调用时需使用 Task 或添加 @MainActor
- Sendable 和 @unchecked Sendable:对于非 Sendable 的 class,需要实现线程安全机制,如使用锁或 dispatch queue,但可能导致性能问题
-
3.迁移过程中的具体挑战
- 回调和闭包:async 普及前,遗留的 completion handler 代码需要转换为 @Sendable 闭包,但易导致“传染”问题
- deinit 问题:deinit 无法被 actor 隔离,导致在 Swift 6 中一些原本可行的代码变得无法书写,需要使用 Task 或 withoutActuallyEscaping 来绕过限制
-
4.Swift 语言的发展和个人感想
- 复杂度增加:Swift 从最初的简单到如今包含 Result Builder、Property Wrapper、宏、并发编程等多个复杂特性的编程语言,学习负担加重
- 开发者体验:编译速度退化、Xcode 的代码补全和 SwiftUI 预览等开发者体验问题尚未得到显著改善
- 未来展望:作者对 Swift 的未来发展持观望态度,认为其重点似乎并未完全放在帮助开发者更快完成 App 上,而是扩展到了 Server Side 和其他操作系统平台
-
5.作者的个人经历和对新人的建议
- 十年 Swift 开发者经历:作者回顾了自己从 Swift 发布第一天开始的十年历程,见证了 Swift 的多个重要节点
- 对新人的建议:初学者面临的学习负担较重,作者认为新人需要掌握基础语法、值类型和引用类型等基础知识,以及更复杂的宏和 Property Wrapper 等特性
🐢 结合实例深入理解 C++ 对象的内存布局
@老驴:这篇来自腾讯技术工程的文章通过实际案例深入探讨了 C++ 对象的内存布局,包括简单对象、带方法的对象、私有和静态成员、类继承以及虚函数的实现。
通过使用 GDB 调试工具,文章分析了 C++ 对象在内存中的分布情况,揭示了成员变量和方法在内存中的存储方式。其中,作者强调了编译器如何通过对象地址和偏移量来定位成员变量,并讨论了多态实现的底层机制。这篇文章算是一篇 C++ 进阶的文章,有兴趣的同学可以细读。
代码
🐎 swift-issue-reporting
@Damien: Point-Free 推出了一个名为 Issue Reporting 的新库,它允许开发者以 Xcode 运行时警告、断点、断言等方式报告应用程序和库代码中的问题,并支持测试。这个库提供了 reportIssue 函数来在代码中标记不应发生的问题,并可自定义问题报告方式,包括自定义报告器以发送问题到 OSLog 或外部服务器。此外,在测试环境中,所有报告的问题都会变成测试失败,有助于确保问题代码路径不被执行。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)