# 老司机 iOS 周报 #211 | 2022-08-01

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

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

## 新闻

### [TestFlight 更新：支持上传使用 Xcode 14 beta 4 打包的 App](https://developer.apple.com/news/releases/?id=07282022b)

2022 年 7 月 29 日，TestFlight 可以上传 Xcode 14 beta 4 打包的 APP 以供开发者进行分发测试，已支持的新特性有 WeatherKit、CloudKit、PushToTalk 等，但目前 Background Assets 还未获得支持。

### [Live Activities 文档放出](https://developer.apple.com/documentation/activitykit/displaying-live-data-on-the-lock-screen-with-live-activities)

今年 WWDC22 上苹果有放出 Live Activities 相关信息，Slack 上也有众多开发者咨询，但当时苹果表示还没有更多可以放出的消息。目前已放出了示例代码与 API。需要注意的是，目前苹果已确认在 iOS 16 的第一个正式版中不会包含相关功能，真正使用上还需时日。

## 文章

### 🐢 [深入浅出依赖注入及其在抖音直播中的应用](https://mp.weixin.qq.com/s/Zp-OqCVVr9CbDv1Y1zWN-w)

[@AidenRao](https://weibo.com/AidenRao)：在软件工程中，依赖注入（dependency injection）的意思为：给予调用方它所需要的事物。本文试图从原理入手，讲清楚什么是依赖，什么是反转，依赖反转与控制反转的关系又是什么？一个依赖注入框架应该具备哪些能力？抖音直播又是如何通过依赖注入优雅的实现模块间的解耦？通过对依赖注入架构优缺点的分析，能对其能有更全面的了解，为后续的架构设计工作带来更多的灵感。

### 🐕 [Swift 中的 JSON 反序列化](https://mp.weixin.qq.com/s/lvX4uY1dGo7k3OGmEayJpg)

[@Smallfly](https://github.com/iostalks)：JSON 反序列化是非常基础的需求，本文对比了业界的几种方案，分析了它们的不足之处。同样，Swift 4.0 之后官方 Codable 也无法满足云音乐团队灵活定制的需求，最终推出了基于 Codable 扩展的自研方案，满足如下的场景需求：

1. 支持默认值
2. 类型互相兼容，如 JSON 中的 int 类型可以被正确的解析为 Model 中的 String 类型
3. 解码失败允许返回 nil ，而不是直接判定解码过程失败
4. 支持 key 映射
5. 支持自定义解码逻辑


### 🌟 🐢 [从零开始理解 JSC 中的 GC](https://webkit.org/blog/12967/understanding-gc-in-jsc-from-scratch/)

[@Damien](https://github.com/ZengyiMa)：在 JavaScript 语言中是依靠垃圾回收 (GC) 来回收内存的，你是否会对其中的 GC 的是如何实现的感兴趣？本篇文章来自斯坦福大学博士生，作者深入的探索了在 WebKit 中是如何实现 GC 内存回收的，本文会涉及较多的底层实现和原理，给你一个独特的视角从零开始了解 WebKit 中 GC 的实现细节，对相关话题感兴趣的同学请不要错过。

### 🐢 LLVM New Pass Manager

[@kemchenj](https://kemchenj.github.io/)：LLVM 13 修改了默认的 PassManager，新的 PassManager 最大的改变是将 Pass 和 Analysis 拆分开。

更加合理的架构除了让逻辑变得更加清晰，也让性能得到了提升，Rust 编译器在迁移到新的 API 之后观测到了 5-20% 的性能提升，Swift 近日也开始[迁移到新的 API](https://github.com/apple/swift/pull/60077)。

如果你好奇什么样的修改可以让性能有如此大的提升，那就一定不要错过，这一系列文章详细讲解了新 API 的设计和使用方式，以及与之前 API 的对比。

- [LLVM Pass 其零：新的 Pass 机制](https://homura.live/2022/06/19/llvm-pass-0/)
- [LLVM Pass 其一：PassManager](https://homura.live/2022/06/26/llvm-pass-1/)
- [LLVM Pass 其二：Analysis 与 AnalysisManager](https://homura.live/2022/07/03/llvm-pass-2/)
- [LLVM Pass 其三：PassBuilder](https://homura.live/2022/07/10/llvm-pass-3/)
- [LLVM Pass 其四：PassManager 的改进与迁移现状](https://homura.live/2022/07/17/llvm-pass-4/)

### 🐎 [AssociatedObject 源码分析：如何实现线程安全？](https://juejin.cn/post/7124943924308738061)

[@JonyFang](https://github.com/JonyFang): 本文通过 AssociatedObject 与 Property 的对比，探究他们是如何设计线程安全的。AssociatedObject 也是老八股了，推荐想对线程安全实现了解的同学阅读。

### 🐕 [幸福里 C 端 iOS 编译优化实践 - 优化 40% 耗时](https://mp.weixin.qq.com/s/EQ9FXuDbtMa3RtxIAaXtig)

[@红纸](https://github.com/nianran)：本文是一篇 iOS 编译优化实践，作者从以下几个方面对工程进行优化

1. dolphin 分布式编译缓存：字节 app infra 团队通过 hook LLVM Clang，将编译文件和依赖哈希成唯一 key，编译结果 .o 则根据 key 存储在本地或者云端
2. 资源优化：移动主工程的图片资源文件至 POD 仓库内，降低主工程资源的编译耗时。在 POD 仓库内则可采用 **resource_bundles** 的形式引入，来降低资源的编译耗时
3. 链接优化：使用基于 ld64 优化的 [zld](https://github.com/michaeleisel/zld) 来编译优化项目，zld 在 ld64 的基础上增加了并发数、并且使用效率更高的数据结构

### 🐕 [iOS 不必现崩溃的点对点解析以及治理](https://mp.weixin.qq.com/s/tGvE-2flzhm4skkrfbUIBA)

[@J_Knight_](https://github.com/knightsj)：本文介绍了用多种工具排查崩溃的时候，如 Bugly，崩溃日志解析等遇到的各种问题以及解决方案，并将该方案以开源工具的方式分享出来，感兴趣的读者可以找到文章末尾的 github 链接查看详情。

## 工具

### [开源一款苹果 macOS 工具 - AppleParty（苹果派）](https://juejin.cn/post/7081069026515877919)

[@红纸](https://github.com/nianran)：AppleParty 是 37 手游 iOS 团队研发，实现快速操作 App Store Connect 后台的自动化 macOS 工具。当前实现了以下几个功能：

1. 内购项目管理（批量创建和更新）
2. 批量商店图和预览视频上传和更新
3. 数据报表批量下载
4. 邮件发送工具
5. 二维码扫描和生成工具

### [腾讯柠檬清理](https://github.com/Tencent/lemon-cleaner)

[@EyreFree](https://github.com/EyreFree)：腾讯柠檬清理是针对 macOS 系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能，对上百款软件提供定制化的清理方案，提供专业的清理建议，帮助用户轻松完成一键式清理。此仓库为官方开源的 macOS 代码，对本软件内部实现感兴趣的朋友可以自行研究。

## 摸鱼周报

[@摸鱼周报 #62](https://mp.weixin.qq.com/s/HySX4Yaf3Zxy8Wn-LyUO0A)：第 62 期摸鱼周报来了，一起来看下本期概要：

* 开发资讯：Live Activity 上线 iOS 16 Beta 4； App Store 专家会面交流； Google 发布 Carbon 语言
* 本周学习：iOS 使用 Pod 在现有项目上集成 React Native
* 内容推荐：性能优化文件以及 WWDC22 优秀内容推荐
* 摸一下鱼：Flowful 用程序生成氛围音乐；柠檬清理开源；网页版便携小空调带给你夏季清凉

## 关注我们

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

**关注有礼，关注【老司机技术周报】，回复「2021」，领取 2017/2018/2019/2020 内参**

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