# 老司机 iOS 周报 #300 | 2024-08-05

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/300.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## WWDC24 内参

### 🌟 [WWDC24 10162 - 多次拍摄保持色彩一致](https://xiaozhuanlan.com/topic/5093124687)

[@bqlin](https://github.com/bqlin)：色彩一致性是人类视觉感知的一个特性，看苹果如何软硬件结合，在拍摄上重现该“生理”特性。

### 🌟 [WWDC24 10149 - 在 SwiftUI 中设计窗口](https://xiaozhuanlan.com/topic/9328564107)

[@Rickey](https://github.com/RickeyBoy)：Window（窗口） 是承载 App 内容的最重要的容器，尤其是在 macOS 和 VisionOS 平台上更是需要优雅地设计和使用窗口。本文将介绍 Windows 组件，并且基于一个 Demo（BOT-anist）从实战角度进行教学。

## 文章

### 🐎 [Xcode-Kotlin 2.0 Release](https://touchlab.co/xcode-kotlin-2-0)

[@Crazy](https://github.com/jiyan135960)：本文是一篇公告，介绍了 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](https://www.emergetools.com/blog/posts/swift-async-await-the-full-toolkit)

[@AidenRao](https://weibo.com/AidenRao)：这篇博客介绍了 Swift 中异步 / 等待（async/await）的完整工具包，包括 async/await 基础语法、Task、Task group、Actors 等多种技术。通过实际示例和理论讲解，展示了这些工具在 Swift 并发编程中的用法和场景。

### 🐎 [Building Swift Executables](https://swifttoolkit.dev/posts/building-swift-executables)

[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何在不同操作系统和架构上构建和分发 Swift 可执行文件。对于使用 Swift 构建 CLI 程序感兴趣的同学建议阅读学习。

### 🐕 [Swift 6 适配的一些体会以及对现状的小吐槽](https://onevcat.com/2024/07/swift-6/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这篇文章主要围绕 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++ 对象的内存布局](https://mp.weixin.qq.com/s/pzvI1AEUoz6uWdjlBI2xSQ)

[@老驴](https://weibo.com/u/6090610445)：这篇来自腾讯技术工程的文章通过实际案例深入探讨了 C++ 对象的内存布局，包括简单对象、带方法的对象、私有和静态成员、类继承以及虚函数的实现。

通过使用 GDB 调试工具，文章分析了 C++ 对象在内存中的分布情况，揭示了成员变量和方法在内存中的存储方式。其中，作者强调了编译器如何通过对象地址和偏移量来定位成员变量，并讨论了多态实现的底层机制。这篇文章算是一篇 C++ 进阶的文章，有兴趣的同学可以细读。

## 代码

### 🐎 [swift-issue-reporting](https://github.com/pointfreeco/swift-issue-reporting/tree/main)

[@Damien](https://github.com/ZengyiMa): Point-Free 推出了一个名为 Issue Reporting 的新库，它允许开发者以 Xcode 运行时警告、断点、断言等方式报告应用程序和库代码中的问题，并支持测试。这个库提供了 reportIssue 函数来在代码中标记不应发生的问题，并可自定义问题报告方式，包括自定义报告器以发送问题到 OSLog 或外部服务器。此外，在测试环境中，所有报告的问题都会变成测试失败，有助于确保问题代码路径不被执行。

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2024」，领取 2024 及往年内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
