# 老司机 iOS 周报 #165 | 2021-07-05

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

## WWDC 21

### 🌟 线下沙龙：杭州场圆满结束！上海场迎来第二波免费门票开放~

[@Parisfal](https://github.com/ParsifalC)：WWDC 系列活动 - 淘系技术.T 沙龙杭州专场在上周六下午已经圆满结束了！杭州专场同样邀请到了 4 位国内讲师以及 2 位特邀国外讲师。他们分别是来自手淘终端平台技术的无线开发专家**倾寒**、来自有赞的移动技术负责人 **Jackie**、来自抖音创作工具基础架构团队的移动端架构师 **Crespo** 以及来自西瓜视频的移动端工程师**黄骋志**，国外的特邀嘉宾还是我们熟悉的 Hacking With Swift 系列书籍作者 **Paul Hudson** 和 objc 联合创始人 **Chris Eidhof**。沙龙现场近 160 位开发者朋友相聚一堂，技术探讨氛围十分浓烈。

错过杭州场的朋友不用着急，**上海场我们也将在这周六正式举办**！上海场之前在我们 **WWDC.playground by SwiftGG** 直播活动中开放了第一批超过 100 张门票，很快就售罄了，现在**第二波门票也正式开放**，数量有限，想来现场的朋友抓紧扫码报名~

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

[@Parisfal](https://github.com/ParsifalC)：除了线下沙龙在火热进行，我们内参的更新也如火如荼。已经订阅的读者有福啦，本周我们一次性更新了 29 篇 session 的解读，每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。
  
- @Style月月：【WWDC21 10032】探索 WKWebView 新增功能
- @琦乐无穷的小蘑菇：【WWDC21 10089】探索电子病历在 HealthKit 中的使用
- @Leppard：【WWDC21 10145】Advanced Video Quality Tool 使用指北
- @Rec：【WWDC21 10256】初探 Swift 算法和集合 & 【WWDC 10168】开发 Mail App 扩展
- @Watermelon：【WWDC21 10268/10269】探索 Xcode Cloud Workflows
- @Ronbin：【WWDC21 10298】在 HomeKit 中添加对 Matter 协议的支持
- @阿尘：【WWDC21 10039】Create ML 新妙用：手势分类和手部动作分类 &【WWDC21 10040】使用 Vision 框架来检测人物、人脸和姿势
- @atuo：【WWDC21 10057】让你的 iPad 应用更进一步
- @ljcoder：【WWDC21 10118】CloudKit 自动化开发
- @Ckitakishi：【WWDC21 10121】为内容丰富的应用量身打造高效 VoiceOver 体验
- @Frank：【WWDC21 10212】强大的 Network Instruments，诊断你的 APP 网络请求及流量控管
- @希徳：【WWDC21 10264】让你的 App 支持快速备忘录
- @Damien：【WWDC21 10061】Meet TextKit 2
- @Tamarous：【WWDC21 10063】更好用的 Sheet
- @鸭嘴兽：【WWDC21 10085】聚焦苹果隐私原则
- @刘杰：【WWDC 2021 10096】 苹果为了你的隐私又做了什么
- @happts：【WWDC21 10098】在 Spotlight 中呈现 App 的数据  
- @志远：【WWDC21 10115】依托更完善的 App 分析指标，优化 App 展示页面的新方案
- @DengXiaoBai：【WWDC21 10158】使用 VideoToolbox 探索低延时视频编码
- @旷明：【WWDC21 10166/10167/10235/10236】DocC: 未曾设想的苹果文档
- @张凡：【WWDC21 10203】Xcode Organizer 功能升级
- @Semyon：【WWDC21 10204/10261/10170】云签与 Mac App 分发流程简化探索
- @PerTerbin：【WWDC21 10209】通过断点技巧让调试更高效
- @jojotov：【WWDC21 10254】Swift 并发编程：原理探究
- @小铁匠Linus：【WWDC21 10259】键盘布局指南
- @Uyloal：【WWDC21 10023/10260】构建使用键盘导航的应用程序
- @瓮杰：【WWDC21 10265】将你的应用沉浸在空间音频中

## 文章

### 🌟 🐕 [在 iOS 客户端上通过 bitcode 为第三方库修复 bug](https://mp.weixin.qq.com/s/BuDnfl1ZbUtiZBhy8_Z7wA)

[@JonyFang](https://github.com/JonyFang)：本文主要记录了便利蜂技术团队 iOS 移动端遇到的一个疑难 bug 的排查过程，介绍了他们是如何通过修改 bitcode，成功在没有源码的情况下为有问题的三方库修复 bug 的。

文中用到的知识点总结如下：
1. 崩溃现场中，在主线程发现 `exit`，多半是由于 C++ 全局变量析构 + 多线程导致的；
2. 在有源码的情况下，可以通过调整编译参数消除全局变量析构；
3. 使用 7-zip 可以无损解包静态库文件；
4. 使用 otool 可以看到目标文件是否嵌入了 bitcode；
5. 使用 llvm 提供的工具，可以对 bitcode 进行修改、重新生成机器码；
6. 通过私有 API 可以模拟出应用退出，制造复现场景。
  
### 🌟 🐕 [iOS Pod 构建缓存方案](https://mp.weixin.qq.com/s/zWhgpuhq3r799ZYQPMsdFw)

[@红纸](https://github.com/nianran)：编译加速通常有两种方案二进制化和源码编译缓存，相较于二进制化，源码编译能解决二进制化带来的问题：编译宏问题、函数不存在等一系列问题。文中，作者使用基于 MD5 和 Xcode Cache 来做缓存机制，使得每次编译都是增量编译而不是全量编译。感兴趣的同学可以看下作者的方案描述。

此外本文是基于 Xcode Cache 实现的编译缓存机制，在即将到来的《老司机技术沙龙-上海场》中，第二场来自 Bilibili 的同学会介绍基于 Bazel 的远端编译缓存技术实践，也欢迎大家来现场聆听~

> 自荐： [WeijunDeng](https://github.com/WeijunDeng)
  
### 🐢 [深入理解 WKWebView（入门篇）—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ)

[@享耳先森](https://github.com/iblacksun)：移动互联网时代，网页依旧是内容展示的重要媒介，开发者经常需要与 `WKWebView` 打交道，但当遇到疑难问题时官方文档不足以解惑。本系列文章介绍了如果从 WebKit 源码入手，建立可调试工程，基于此深入理解 WebKit 核心内容。

### 🐢 [Swift 并发初步](https://onevcat.com/2021/07/swift-concurrency/)

[@zvving](https://github.com/zvving)：今年 Swift 的最大更新无疑是对 `async/await` 的支持，作为新手的你很可能已经跃跃欲试。但并发编程向来以错综复杂著称，光是并发/并行、同步/异步、串行/并行就已经让人傻傻分不清，更不必提 `Actor`、`Structured Concurrency`、`Async Sequence` 这些翻译起来都困难的概念。如果你也有以上这些疑惑，或许可以从本文中找到答案。这篇图文并茂的博客同时也是喵神新书[《Swift 异步和并发》](https://objccn.io/products/async-swift)的开篇之作。

> 本文推荐语来自 [弥明-KeithBird](https://github.com/KeithBird)

### 🐎 [How Swift runs an async executable](https://oleb.net/2021/async-program-launch-sequence/)

[@kemchenj](https://kemchenj.github.io)：Swift 5.5 最大的更新就是加入了 Concurrency，@main 也添加了对应的支持，让我们可以将 main 函数标记为 async，由编译器负责生成代码，提供一个 async context 让 async main 函数执行，这篇文章就深入了 Swift 源码来探究其中的奥秘。

## 摸鱼周报

[@摸鱼周报 #16](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w)：iOS 摸鱼周报不知不觉已经发布到第 16 期了，为了了解大家对周报的想法和建议，前段时间我们做了一次问卷调查。根据问卷反馈，我们停更一期进行了格式上的调整：去掉了`那些 Bug`、`编程概念`模块，增加了`本期话题`和`面试解析`。

改版之后内容更讲究实用性，特别是呼声很高的`面试解析`模块，我们对众多面试题目进行筛选，选出一些高频且实用的内容，然后用更通俗易懂的话讲明白其中的知识点，首期`面试解析`带来的是网络相关的一些题目。

其他更多内容欢迎阅读本期[完整版](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w)进行探索，如果有其他建议也欢迎后台留言告诉我们。

## 代码

### [世界上第一个浏览器源码](https://github.com/cynthia/WorldWideWeb)

[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5)：这个 repo 其实算得上是一个考古 repo 。维基百科上记载，世界上第一个浏览器是在 NextStep 的电脑上（repo 的 readme 上有索引），用 C 和 Objective-C 语言完成的，被 repo 作者从原始 WorldWideWeb 的仓库中剥离，保存于此。虽然这个项目中的代码过于老旧，已经无法编译，但有兴趣的人还是可以前往一探究竟，看看上古时代的浏览器代码大概是什么样子。

### [VideoLab - 高性能且灵活的 iOS 视频剪辑与特效框架](https://mp.weixin.qq.com/s/duLk1mNLdcqRlfzpnh2LEA)

[@anotheren](https://github.com/anotheren)：这是一个为视频剪辑编辑处理的框架，使用了 AVFoundation 和 Metal 作为其处理核心，目前已有以下特性：
* 高性能实时剪辑与导出
* 高自由度组合视频，图片，音频
* 支持音频音高设置，音量调节
* 支持 CALayer 矢量动画，可以支持复杂的文字动画
* 支持关键帧动画
* 支持类似于 AE 的预合成
* 支持转场
* 支持自定义各类特效，如 LUT 滤镜，Zoom Blur 等等（MSL 编写脚本）

如果你也有视频处理的相关需求，不妨看看能否满足项目需要。

## 音视频

### 🐢 [“Structured concurrency” with special guest Doug Gregor](https://www.swiftbysundell.com/podcast/99/)

[@老驴](https://www.weibo.com/6090610445)：这期 Swift By Sundell 节目请到了 Swift 开发组的成员之一 Doug Gregor 来聊聊 Swift Concurrency 和背后的故事。

## 赞助者

虚位以待..

**非常感谢以上赞助者的支持，如果你也有赞助我们的兴趣，欢迎添加微信 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）
