# 老司机 iOS 周报 #259 | 2023-09-04

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

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


## 文章

### 🐕 [一文入门最热的 LLM 应用开发框架 LangChain](https://mp.weixin.qq.com/s/bYzNNL3F0998Do2Jl0PQtw)

[@zoeGuo](https://github.com/zoeGuo)：LangChain 是一个用于开发由语言模型驱动的应用程序的框架。笔者认为 Langchain 解决了现在开发人工智能应用（以 GPT 模型为例）的一些切痛点：数据滞后、token 数量限制、不能进行联网、不能与其他数据源链接。文章逐一介绍了 LangChain 以下组件的使用：Models（模型）、Prompts（提示词）、Indexes（索引）、Chains（链）、Agents（代理）。简单示例了用 LangChain 加载 OpenAI 的模型，完成一次问答、通过谷歌搜索并返回答案、对超长文本进行总结、构建本地知识库问答机器人等几个 LangChain 实战。


### 🐕 [Adding teachable moments to your apps with TipKit](https://bendodson.com/weblog/2023/07/26/tipkit-tutorial/)

在今年的 WWDC 中，苹果推出了 Tipkit，开发者可以通过 Tipkit 快速向应用中添加例如新手引导、新功能介绍等功能，并且 Tipkit 可以通过 iCloud 跨设备显示。本文是 Tipkit 使用的一个实战教程，想要了解这个新功能的同学，可以跟着示例快速实践并掌握如何使用。


### 🐕 [Mastering Thread Safety in Swift With One Runtime Trick](https://betterprogramming.pub/mastering-thread-safety-in-swift-with-one-runtime-trick-260c358a7515)

[@莲叔](https://github.com/aaaron7)：作者首先简单的介绍了多线程开发中最典型会遇到的问题，然后介绍了在苹果平台中性能最好的锁：os_unfair_lock，同时介绍在了 Swift 中如何使用它。之后作者演示了如何通过 propertyWrapper 来更通用的实现原子化的变量，并搭配一个比较冷门的 _modify 方法来规避常见赋值可能因为 get+set 组合不原子化的坑。

### 🐕 [Improve the build times of your SPM Packages and your apps](https://mdb1.github.io/2023-08-18-improve-build-times-in-spm-packages-and-in-your-apps/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：本文主要涉及如何缩短 SPM（Swift Package Manager）包和应用程序的构建时间，以提高开发效率。以下是主要要点：
- 测量和改进构建时间：文章开始强调了测量构建时间的重要性，并建议在测试前 / 测试后使用相同的环境来进行测量。它区分了两种构建类型：
	- Clean Builds（干净构建）：完整重新编译整个代码库，无论是否有更改
	- Incremental Builds（增量构建）：仅编译自上次构建以来发生更改的代码

- 使用时序摘要和最近的构建时间线：文章介绍了 Xcode 提供的两个工具，用于测量编译时间和构建时间线，以帮助识别需要优化的区域
- 改进 Xcode 项目中的编译时间：文章提供了一些建议，包括启用警告以标识编译时间过长的代码、明确指定类型以减少编译时间等
- 改进 SPM 包中的编译时间：文章介绍了如何通过在 SPM 包中应用相同的优化来减少构建时间，以及如何使用自定义规则来规范代码以提高编译效率
- SwiftLint 规则：文章提到了一些 SwiftLint 规则，如 explicit_init 和 explicit_type_interface，可以帮助简化代码并可能减少构建时间

总的来说，这篇文章提供了关于如何提高 SPM 包和应用程序构建效率的详细指南，包括测量、警告启用、类型明确指定等技巧和建议。通过实施这些优化，开发团队可以更快地构建和测试他们的代码。

### 🐕 [为现有 App 及 API 架构实现 End-to-End Testing 的可能性验证](https://medium.com/zrealm-ios-dev/poc-app-end-to-end-testing-local-snapshot-api-mock-server-5a5c4b25a83d)

[@EyreFree](https://github.com/EyreFree)：本文记录了作者实验在现有的 App / API 架构之上使用 Proxy Server 录制 API Request & Response 并回放作为 Mock Server API 给 End-To-End Testing 测试时使用的做法试探，同时尝试了基于 Mitmproxy 套件自行撰写 API 录制和回放脚本，有在做相关工作的同学建议阅读。

### 🐕 [解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug](https://www.fatbobman.com/posts/serious-issues-caused-by-delayed-state-updates-in-SwiftUI/)

[@Damien](https://github.com/ZengyiMa)：SwiftUI 是一个响应式框架，当数据源发生变化时，框架会自动更新视图。本文解析了 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误：
* 通过手势取消 Sheet 后，快速右滑导航容器会导致应用锁死
* 当视图正在滚动时返回上一层视图会导致应用崩溃

同时作者也提供了对应的解决方案，如果读者有遇到类似的问题，不妨一读。

### 🐕 [腾讯 QQ 桌面版架构升级：内存优化探索与总结](https://mp.weixin.qq.com/s/REHP26sx-8HjDIvGM63kJw)

[@Leo](https://github.com/leomobiledeveloper)：桌面版应用相比 Web 端具有停留时间长的特点，如果没有控制好内存，会导致交互响应慢或者崩溃。在这篇文章中，QQ 相关团队和大家分享新版 QQ 在内存优化方面的探索和阶段性优化进展。虽然本文的讨论主要集中在 Windows 平台，但由于 Electron 的跨平台特性，大部分优化措施也同样适用于 macOS 和 Linux 平台。

### 🐎 [SwiftUI Tips：如何收起键盘](https://juejin.cn/post/7268592310040199223)

[@享耳先森](https://github.com/iblacksun)：文章列举了 `SwiftUI` 中多种收起键盘的方式，适合刚入 `SwiftUI` 的同学们。

### 🐎 [Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener](https://mp.weixin.qq.com/s/wrWTklYNwLlTMBZJHxaudA)

[@Crazy](https://github.com/jiyan135960)：本文主要介绍了 Flutter 在 3.13 版本中的新的生命周期类 AppLifecycleListener 的使用方法，新的 AppLifecycleListener 类不用再如之前一样选择 mixin 的处理方案，可以直接在类中进行初始化，使用起来更加方便并且有利于全局统一的处理。新的生命周期回调方法更多也更加直观。本文对 hidden 的由来也做了简单的讲解，有利于各位开发者更好的理解 hidden 与 show 方法。

## 工具

### [Arc on Windows projects: swift-build](https://github.com/thebrowsercompany/swift-build)

[@kemchenj](https://kemchenj.github.io/)：Arc 是一款在产品体验上做了很多革新的浏览器，除了产品之外，技术选型也非常激进，选择了 Swift 作为它们主要的编程语言，但 Arc 需要支持 macOS 之外的桌面系统，而 Apple 在 Windows/Linux 平台上的投入很少。

所以 Arc 团队找到了 LLVM 团队的工程师 Saleem Abdulrasool，出钱资助他去帮助搭建 Swift on Windows 的工具链，后来他甚至进入了 Swift 的核心团队专门负责这件事情，并且今年也正式加入了 Arc 团队的公司。

如果你也钟情于 Swift 并且需要在 Windows 上使用，可以关注这个项目了解 Swift on Windows 的最新进展。


## 内推

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

[杭州] 淘宝 - 终端平台 - iOS/Android/C++

[广州] 微信公众号 - iOS

[北京] 快手 - 本地生活 - iOS

[上海 / 北京] MiniMax - iOS

[广深] TikTok 直播 - 社交互动团队 - iOS/Android

[北京] 知乎 - 会员业务 - iOS

[上海] 扫描全能王 - iOS

[深圳] 手机 QQ - 终端架构 - iOS - T10/T11

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

## 关注我们

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

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

![](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）
