# 老司机 iOS 周报 #163 | 2021-06-21

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

**周报编辑组又迎来了一位新人 - [@Smallfly](https://github.com/iostalks)，他是来自网易云音乐的开发者，对 Native 和跨端技术栈均有涉猎，希望未来能一起给大家持续输出高质量内容~**

## WWDC 21

[@Parisfal](https://github.com/ParsifalC)：WWDC 21 圆满结束，但关于 WWDC 21 的学习才真正开始~苹果官方汇总了[新技术和已有框架的重点变化](https://developer.apple.com/documentation/New-Technologies-WWDC-2021)，本周我们针对部分内容更新了 6 篇 WWDC 21 Session 的深度解读，每篇文章都是经过不断推敲和审核才完成。

### [【WWDC21 10114】 初见 StoreKit 2](https://xiaozhuanlan.com/topic/6138790425)

[@黄骋志](https://github.com/ChengzhiHuang): 开发过 In-App Purchase 的同学应该都应该体会过被它 生涩难懂的 API、不合理的数据结构、难以处理的掉单 等问题支配过的恐惧。WWDC21 针对 StoreKit 做了一次全新的升级，同时得益于 Swift 的新特性，进一步简化了 API 调用，并带来了诸多新特性，阅读本文后相信你会惊艳于这次的升级。

### [【WWDC21 10101】使用 ReplayKit 记录你的高光时刻](https://xiaozhuanlan.com/topic/1068759324)

[@七夜](https://github.com/qiyer): 主要介绍了 Apple 为 ReplayKit 新增了一个新的特色功能 Clips Recording，用于记录用户应用或游戏内不超过 15 秒长的精彩瞬间。

### [【WWDC21 10158】使用 VideoToolbox 探索低延迟视频编码](https://xiaozhuanlan.com/topic/2530964187)

[@bqlin](https://github.com/bqlin): 讲述通过 VideoToolbox 最新功能实现低延迟 H.264 硬件编码，最大限度地减少端到端的延迟，并提高性能，实现最佳的实时通信和高质量的视频播放。

### [【WWDC21 10019】在 SwiftUI 中遇见并发编程](https://xiaozhuanlan.com/topic/2957164803)

[@Edmond](https://github.com/looseyi): 众所周知，在计算机领域并发是很棘手的一个难题，现在您拥有了管理应用程序中这种复杂性的工具。我们希望您喜欢并了解 Swift 5.5 和 SwiftUI 中出色的新并发工具，我们期待看到您使用它们解决应用程序中棘手问题。

### [【WWDC21 10134】 探索 Swift 结构化并发](https://xiaozhuanlan.com/topic/3625784190)

[@SZ](https://github.com/imagiczhang): Swift 5.5 创新性地引入了结构化并发的概念。同时，也革命性地引入了不同风格的任务、任务树的自动管理机制以及编译时的数据安全检查，极大地降低了并发程序编写难度。尽管最终正式版还是存在更改部分 API 的可能，我们仍然推荐大家先学习并熟悉一下编写 Swift 程序的新方法。

### [【WWDC21 10017】为 Swift 和 SwiftUI 带来 Core Data 并发](https://xiaozhuanlan.com/topic/4625791038)

[@SZ](https://github.com/imagiczhang): 今年 Core Data 上带来了大量的功能增强，其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验，简化了异步数据操作的程序，因此我们推荐大家学习并逐渐开始使用这些新的 API。


## 新闻

### 🌟 WWDC.<T> 技术沙龙 - 北京地区专场圆满结束
  
[@Parsifal](https://github.com/ParsifalC)：由 SwiftGG 和快手联合主办的 WWDC.<T> 技术沙龙 - 北京专场于本周六在快手总部顺利举办，分享活动吸引了近 200 开发者朋友一起前来学习。本次分享的后续总结工作正在紧锣密鼓地进行中，同时由我们周报主办的杭州场和上海场技术沙龙也将陆续开放报名，欢迎各位同行好友来聚聚。本次活动我们不收取任何费用，除了嘉宾带来的主题分享外，现场更有主办方为每一位到场朋友悉心准备的伴手礼和茶歇，同时周报也将在现场免费赠送 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) 哦。

## 文章
  
### 🌟 🐕 [Concurrency in Swift 5 and 6](https://forums.swift.org/t/concurrency-in-swift-5-and-6/49337)

[@anotheren](https://github.com/anotheren)：来 Swift 官方社区的帖子，介绍了 Swift 并发控制在 Swift 5 和 6 中的展望。Apple 需要考虑将 Swift 生态系统迁移到 Swift 6 会是什么样子，并预计这个过程需要数年时间。在此过程中，Apple 需要确保：

- Swift 5.x 和 Swift 6 代码可以在并发模型的演进中，良好地相互操作
- 逐步采用并发模型可以使代码更好维护，也更安全
- 每个模块、包和程序都可以以自己的速度采用并发控制，而不会不必要地破坏原来的代码

总的来说，Swift 5 中会更加宽松，以能够使并发控制逐步推广开，完成平稳过渡。而 Swift 6 会在需要的情况下要求异步执行的闭包满足 @Sendable (详见 [SE-0302 Sendable and @Sendable closures](https://github.com/apple/swift-evolution/blob/main/proposals/0302-concurrent-value-and-concurrent-closures.md))。
  
### 🌟 🐕 [Xcode 工程文件解析](https://mp.weixin.qq.com/s/s5BQznKjSCt84ZLUlco7Vg)

[@老峰](https://github.com/gesantung)：从我们接触 iOS 开发就与 Xcode 工程配置文件 xcodeproj 打交道，本文作者详细介绍了 xcodeproj 文件结构，以及如何 xcodeproj 开源库 解析并修改 xcodeproj 文件，文章主要包含一下内容：

- Xcode 工程文件组成：xcworkspace、xcodeproj
- Project 解析、Object Module、Object Attributes、Xcode Object等
- 通过代码编辑 Xcode 工程
  
### 🐕 [iOS 14.5 如何用 PAC 保护 Objective-C 对象](https://mp.weixin.qq.com/s/VsqnWo6HGQT5LXdulpcaGg)

[@AidenRao](https://weibo.com/AidenRao)：一篇非常硬核的文章，本文介绍了 iOS 14.5 针对 Objective-C 运行时进一步加强 PAC 保护的两处改动。这些保护仅针对系统自带应用和服务启用，目的是防止跨进程和远程代码执行的漏洞利用。

### 🐕 [Flutter IM 跨端架构设计和实现](https://mp.weixin.qq.com/s/ftZdQ-0GeMgr6kL9bZLA8w)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：一个非常好的跨端 IM 设计方案，从痛点分析到实施方案，到 DB 同步设计，以及状态管理，应有尽有。有相关业务小伙伴值得仔细阅读，文中很多解决方案可以带来不少参考.

### 🐕 [从探索到实践，iOS 动态库懒加载实录](https://mp.weixin.qq.com/s/g5FKnOcW6KonqBSW8XO9Jw)

[@红纸](https://github.com/nianran)：本文是 58 同城对于 APP 模块动态化的实践总结，对方案定制、实现流程、方案结果对比、量化收益等多个方向进行描述。由于动态库的吸附性，团队整理完依赖树，选用自下而上的方式，将模块逐一动态库。并使用懒加载的形式加载动态库，而非启动加载，降低了启动耗时。

### 🐕 [WWDC21 Ultimate application performance survival guide](https://gcsnnb.github.io/2021/06/09/APP%E6%80%A7%E8%83%BD%E7%BB%88%E6%9E%81%E7%94%9F%E5%AD%98%E6%8C%87%E5%8D%97/)

[@Leo](https://github.com/leomobiledeveloper)：性能是客户端永远绕不开的话题， 所以 WWDC 每年都会有很多 session 是关于性能的。这个 session 更像是一篇概述，讲解了苹果提供的性能相关监控、工具和诊断，推荐对性能感兴趣的同学阅读。

* 推荐人：[GCSNNB](https://github.com/GCSNNB) 

### 🐕 [Code Signing - iOS 代码段的校验机制分析](https://mp.weixin.qq.com/s/msUwo3YUcfHXkuAp5wRfyQ)

[@Smallfly](https://github.com/iostalks)：从 iOS JIT 遇到 Crash 的神仙打架，到 iOS 代码段的校验机制。本文作者高级页面仔，从内核源码着手，详细地分析了 iOS 代码段合法性校验的时机和过程。最终给出了 Crash 的原因，并介绍了连接调试器和越狱环境下 JIT 不会 Crash 的实现原理。

### 🐕 [听说你想写个 Lisp 解释器](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485878&idx=1&sn=3f1b37ad693bfd2f0da24aab2616aafe&chksm=cf55867ef8220f68719be7f9666675eff677b7922d27155a079f6b15181cfa65c699cfd7e7a8&token=273579944&lang=zh_CN#rd)

[@折腾范儿_唯敬](https://weibo.com/agvicking)：我们使用的编程语言，我们写下的代码，本质上就是一行又一行的字符串，而这些字符串到底是如何工作的，这本是属于编译原理范畴。很多书或者有些文章也会介绍到“词法分析/AST/解释执行”之类的高大上的概念，稍微有些抽象也有些晦涩。但是本文作者 [silan-liu](https://github.com/silan-liu) 从一个最基础最简单的 Lisp 语言入手，从 0 开始用 swift 写了一个解释器，在这个过程中你可以看到从分词到解析，再到生成 AST 的全部代码过程，亲自感受一遍代码被理解被执行的过程，相信会比书本上抽象的概念更容易吸收和理解。注：本文是该文章的第一篇，写到了生成抽象语法树 AST，而 AST 的执行运算出最终的结果，还请继续期待作者的下一篇文章。

## 摸鱼周报

[@摸鱼周报 #14](https://mp.weixin.qq.com/s/br4DUrrtj9-VF-VXnTIcZw)：本期我们整理了一些包体优化的方案，从资源到代码层面，涉及的 Tips 很多，为了便于观看和记忆，我们将其制作成一张思维导图。开发者账号的续费问题最近有好几个小伙伴都有遇到，我们将其中的注意事项做了一个整理。

概念篇开始整理一些 Web 前端知识，介绍了 React、Vue、React Native 这几个概念，还附带了一些代码片段，实际学习之前可以给大家带来一个初体验。

资料内容收录了一个 Github 仓库 [Newbie Security List](https://github.com/findneo/Newbie-Security-List)，其中整理了网络安全相关的博客、工具、电子书籍资料、在线知识库、在线漏洞库等内容。

[@摸鱼周报 #15](https://mp.weixin.qq.com/s/6thW_YKforUy_EMkX0OVxA)：本期介绍了几个去掉导航栏返回按钮文案的实现方案；还有个系统自带的命令行工具 `plutil`，通常我们将其用于打包脚本设置版本号，但它还可以用来检查多语言文件的格式问题。处理繁杂且巨大的多语言文件，自动化工具永远是最佳助手。

概念篇 Web 前端知识第二弹：BootStrap、Webpack、Flutter。

博客篇整理了一些逆向和签名相关文章，虽然不是新文章，但篇篇都是精品，值得反复阅读。

资料内容收录了一个国外的网站：[SwiftLee](https://www.avanderlee.com/)，一个分享关于 Swift、iOS 和 Xcode 技巧和窍门的周更博客，博客的文章写得清晰易懂，排版、配图和动画质量也很高。

## 赞助者

虚位以待..

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