# 老司机 iOS 周报 #166 | 2021-07-12

![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) 提出。

**周报编辑阵容继续升级，本周我们迎来了 [@Barney](https://github.com/BarnyZhao) 加入团队，Barney 目前就职于 Bilibili，熟悉移动架构治理，启动优化，复杂列表流畅度优化，稳定性等方向。**

## WWDC 21

### 🌟 线下沙龙：上海场和深圳场也成功举办~

[@Parisfal](https://github.com/ParsifalC)：WWDC 系列活动 - WWDC.T 沙龙上海场和深圳场已经在这个周末圆满结束了，感谢上海场的联合主办方字节音乐以及深圳场的联合主办货拉拉技术团队！至此，今年我们与 SwiftGG 一起举办的四场沙龙活动均已拉上帷幕，每场活动都有 4 个不同的讲师分享自己对于移动技术开发的干货见解，在社区内外都引发了很大的反响。针对大家比较关注的几个问题，我们这边做下统一回复：

> 活动的录像和 PPT 等内容是否会放出？

活动刚结束，我们所有的收尾工作都在有序进行中，计划在本月下旬会陆续将沙龙的相关资料在**老司机技术周报**公众号上发布，大家敬请期待~

> 以后还会不会有类似的活动？

线下沙龙是今年尝试的一种方式，目前得到很多正反馈，我们也从几个城市的举办中汲取了很多经验，未来如果可行的话我们还是会继续尝试的。这次得到 SwiftGG、快手、淘系技术、字节音乐和货拉拉技术等团队的支持，我们也为到场的每一位朋友都准备了精美的礼品和茶歇，同时每个讲师嘉宾的无偿倾力相助也让我们非常感激。但毕竟我们是纯公益的活动，每场沙龙都是免费门票，沙龙投入的人力物力仍然是比较大的。短期内暂时没有在计划中的沙龙活动了，我们需要好好总结，也需要休息一下。当然，一旦有了新的计划，我们也会第一时间告诉大家，感谢大家一直以来的支持。

> 我所在的技术团队也想合作举办一场这样的沙龙活动？

首先感谢你的关注与认可，不过正如上个问题所述的那样，我们短期是没有计划了。如果你确实感兴趣的话，可以添加我们的周报微信 **iTDriverr** 做个简单沟通，后续我们有计划了可以再详谈。

### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21)

[@Parisfal](https://github.com/ParsifalC)：线下活动圆满结束，我们内参的更新也已经进入高潮。已经订阅的读者有福啦，本周我们一次性更新了 32 篇 session 的解读，总的更新文章数已达 69 篇！每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。如果你喜欢的话，记得给作者点个赞~

- [【WWDC21 10183/10184】初探 Group Activities ](https://xiaozhuanlan.com/topic/0593748621)
- [【WWDC21 10225】使用 Group Activity 共享媒体](https://xiaozhuanlan.com/topic/2560189374)
- [【WWDC21 10187】使用 Group Activity 共享定制化内容](https://xiaozhuanlan.com/topic/6205739184)
- [【WWDC21 10189】使用 Group Activity 在 Safari 中共享媒体](https://xiaozhuanlan.com/topic/7165042893)

@Darwin-lv & @刘思源：刚刚结束的 WWDC 2021，苹果给 Facetime 带来了新功能 SharePlay。使用苹果设备的用户，无论是 iOS、iPadOS 还是 MacOS，都可以通过 FaceTime 开启 SharePlay，和其他苹果用户，无论他使用什么类型的苹果设备，都可以实时的共享内容。

- [【WWDC21 10132/10133/10134】认识 Swift 中的异步与并发](https://xiaozhuanlan.com/topic/8627905413)

@nuomi1：Swift 5.5 带来了万众期待的异步与并发的原生语言级支持，async/await 简化了异步编程，结构化并发为异步任务提供并发性，而 actor 则解决了共享可变状态带来的数据一致性问题。

- [【WWDC21 10258】理解和消除 App 中的卡死](https://xiaozhuanlan.com/topic/9027453618)
- [【WWDC21 10211】iOS 符号化：基础与进阶](https://xiaozhuanlan.com/topic/8652104379)
- [【WWC21 10216】Swift 中的 ARC 机制: 从基础到进阶](https://xiaozhuanlan.com/topic/1569740283)
- [【WWDC21 10180】检测和诊断 App 内存问题](https://xiaozhuanlan.com/topic/2079653148)

@Rickey 王小吉 & @米广 & @刘夏 & @薛云强：WWDC 2021 继续在 App 性能上带来了很多 session，这几篇文章能够帮你深度理解性能问题的源头。

受限于周报篇幅，其他文章也同样精彩，但不便详述，欢迎大家自行订阅阅读~

- @saitjr：【WWDC21 10232/10283】Shortcuts 的新功能
- @lmh：【WWDC21 10239】为你的 App 减少网络延迟
- @牟爽：【WWDC21 10146】AVFoundation 的新变化 & 【WWDC21 10290】AVKit 的新变化
- @展菲：【WWDC21 10092】了解并使用 Wallet 和 Apple Pay
- @师大小海腾：【WWDC21 10052】Mac Catalyst 的新功能
- @Jimbaby：【WWDC21 10079】使用 PHASE 探索几何感知的音频
- @大灰灰：【WWDC21 10048】构建优雅小组件的准则
- @Kam：【WWDC21 10252】打造拥有流畅体验的列表和集合视图
- @DylanYang：【WWDC21 10291/10294/10295】MusicKit 概述
- @Hummer：【WWDC21 10033】基于隐私保护的广告归因
- @East：【WWDC21 10041】使用 Vision 提取文档里的数据
- @郑一一：【WWDC21 10102】遇见 Location Button
- @刘杰：【WWDC21 10123】初见 Screen Time API
- @kukushi：【WWDC21 10045】用 ShazamKit 创造自定义音频体验
- @Chars：【WWDC21 10003】再谈 Apple Watch 的数据传输
- @素燕(Lefex)：【WWDC21 10104】在 iOS 中给 Safari 开发插件
- @Chafferer：【WWDC21 10205】在 Xcode 中 Review Code 以及多人合作
- @夏天：【WWDC21 10068/10069/10282】从 0 开始构建用户健康的研究和护理 APP
- @Nemo：【WWDC21 10160】ProRAW 的拍摄与处理
- @wiilen：【WWDC21 10181】APP 性能优化终极求生指南
- @SeaHub：【WWDC21 10175】IAP 用户退款与客诉处理优化 & 【WWDC21 10174】 IAP 后台通信优化与实践

## 文章

### 🌟 🐕 [Klee：用 C++ 实现数据驱动开发](https://mp.weixin.qq.com/s/y2700SOPIvETJ-x2BC5q5w)

[@Barney](https://github.com/BarnyZhao)：本文主要介绍了企业微信客户端团队对 C++ 实现数据驱动开发的探索，为读者介绍了暂时内部开源的 Klee 框架,，通过几个简单易懂的小例子，一步步讲述了 Klee 的强大特性， 并且未来有开源的打算，十分令人期待。

文中的关键点总结如下：
1. 数据驱动的核心思想，程序的状态由数据确定，通过接口操作数据来控制程序逻辑。
2. 通过企业微信消息泡的例子，表达了 响应式数据的优雅。
3. `Klee` 的声明式开发能力，组件化开发，混合开发。
4. `Klee` 三大组件生态, 布局组件、视图组件、逻辑组件，并且可组合嵌套为复合组件。
5. `Klee` 与 `RxSwift` 的对比，从数据源、流程可控性、多输入源、生命周期管理四个维度阐述了 Klee 的优势。
6. 对未来的展望，代码开源、跨平台能力、可视化界面搭建。

### 🐕 [听说你想写个 Lisp 解释器（下篇）](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486230&idx=1&sn=b11b86685064968edd023851c47a981a&chksm=cf5584def8220dc83ff16b3c2216f555d481735b51c2687c433243953b1515b4cf1a7ab1c806&token=232571047&lang=zh_CN#rd)

[@折腾范儿_唯敬](https://weibo.com/agvicking)：在之前的周报中，我们介绍了“听说你想写个 Lisp 解释器（上篇）”，作者[silan-liu](https://github.com/silan-liu) 带着我们从0深入到了一个语言编译解析的过程，学习了从分词到解析，再到生成 AST 的过程。这次给大家带来了下篇，本文作者继续从 AST 入手，分析运算符，分析表达式，分析方法调用，最终给我们讲解了一个语法树最终执行出结果的全部过程。自此一个语言的完整编译过程，简单明了的呈现在了读者面前。

### 🐎 [淘系工程师亲述经历：如何避免成为“技术工具人”？](https://mp.weixin.qq.com/s/qBgEjtcTTVuZsAK6j0SEMw)

[@Smallfly](https://github.com/iostalks)：本文从不同角度讲述了作者加入阿里一年收获的成长。

- **关于思考：** 按照主管分配机制做事，只会让自己成为工具人，要思考如何「让事情因为自己而与众不同」。
- **技术与业务两条腿走路：** 身为技术同学，很容易陷入技术自嗨，却没有多大贡献。建议用技术去赋能业务，让技术和业务相互成就彼此，共同成长。
- **稳定发挥：** 稳定发挥、线性成长的选手比波峰波谷选手更受青睐。
- **求同尊异：** 在团队引入一种新的机制，不被认可，应该如何思考与推进。
- **身为 PM 如何做事：** 项目安全永远是第一位，有风险要及时同步；遇到线上问题立即向上反馈，并注意反馈的方式；让合适的人做合适的事情；如果不确定一件事情能否按时完成，就给悲观的答复；技术判断是核心竞争力。

### 🐎 [Swift5.5、DocC、Notifications，苹果 WWDC21 带来的最大技术变化](https://mp.weixin.qq.com/s/jw0R-83z9oCnVoffwy-ykg)

[@Damien](https://github.com/ZengyiMa)：苹果在 WWDC21 中给我们带来了许多的新的技术和解决方案，让我们来看看今年 Swift 的 async/await 特性、DocC（文档编译器）、以及系统中的 Notifications 通知中的的一些详细变化的内容吧。

### 🐕 [How iOS 15 makes your app launch faster](https://medium.com/geekculture/how-ios-15-makes-your-app-launch-faster-51cf0aa6c520)

[@Leo](https://github.com/leomobiledeveloper)：对于 deployment target 是 iOS 15 或者 macOS 12 的应用来说，苹果采用了一种新的格式来存储启动时候需要 fixup 的信息。目前像 bind/rebase 这种 fixup 信息是存储在二进制不同的表中的，修改后使用 chained fixups 格式，这种格式能带来包体积和启动时间的提升。

### 🐢 [深入理解 WKWebView（基础篇）—— WKWebView 加载生命周期与代理方法剖析](https://mp.weixin.qq.com/s/ZFui9IiMTWyLXGKZlbnzwQ)

[@享耳先森](https://github.com/iblacksun)：本篇是系列第二篇，第一篇见 [深入理解 WKWebView（入门篇）—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ)，本篇在上一篇的基础上介绍了 `WebKit` 内部的三个进程是如何协作及通信的。

### 🐕 [Diffable data source behavior changes and reconfiguring cells in iOS 15](https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/)

[@老峰](https://github.com/gesantung)：从 iOS 13 开始 Apple 为 TableView&CollectionView 引入 Diffable Data Source 特性实现局部刷新，iOS 15 提供了新 API 带来了更流畅的滚动体验，主要包含如下内容：

- applySnapshotUsingReloadData(_:completion:)：提供简洁的 API 处理非动画 diff reload
- reconfigureItems(_:)：提供更高效的 cell 刷新，避免 dequeuing

另外 [【WWDC21 10252】打造拥有流畅体验的列表和集合视图](https://xiaozhuanlan.com/topic/6813072594) 也有相关阅读，感兴趣对的读者建议阅读。

## 摸鱼周报

[@摸鱼周报 #17](https://mp.weixin.qq.com/s/3vukUOskJzoPyES2R7rJNg)：第十七期摸鱼周报来了~这期概要如下：

本期话题从一个同学的问题入手，谈了些关于习惯的理解。

Tips 部分围绕一个问题展开：“String.count 和 NSString.length 结果是一样的吗？他们之间有什么差别？”。

面试专题带来网络部分的第二弹，关于 TCP 连接，关于三次握手，四次挥手。

博客部分整理了一些网络优化的文章，网络请求分为：请求前阶段，连接阶段，数据处理阶段，各个阶段都是可以进行优化的。

如何用 Swift 实现常用的数据结构？来看 Swift Algorithm Club 吧。

两个实用工具推荐，桌面版 Homebrew：Cakebrew，一个好用的剪切板工具：Paste - Clipboard Manager。

## 工具

### [GitHub Copilot](https://copilot.github.com/)

GitHub Copilot 是一个可以与你结对编程的 AI 程序员，它可以帮助你以更少的工作量更快地编写代码。它能够从注释和代码中提取上下文，并实时补完单个行或整个函数代码。GitHub Copilot 技术预览版目前以 Visual Studio Code 插件的方式提供，你需要在官网申请加入测试等待名单之后才有机会体验使用。虽然 AI 自动生成代码的话题经久不衰，各种工具也层出不穷，但 GitHub Copilot 的出现可能是距离该类工具真正落地使用最近的一次，感兴趣的朋友快点击官网申请试用吧。

* 推荐人：[Zero.D.Saber](https://github.com/faimin)

## 代码

### [Pulse](https://github.com/kean/Pulse)

[@AidenRao](https://weibo.com/AidenRao)：Pulse 是适用于 Apple 平台的强大日志记录系统，基于 SwiftUI 构建。使用 Pulse Console 直接从你的 iOS 应用程序中检查网络请求和日志，并通过 PulseUI 展示出来。你的 QA 团队在问题反馈时可以轻松共享它们，附带在错误报告中。你可以在 Pulse macOS 应用程序中查看共享日志。

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 iTDriverr 哦~**

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

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