# 老司机 iOS 周报 #144 | 2021-01-11

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

## WWDC20

本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章，每篇都很精彩！

- [WWDC20 CoreImage 专题](https://mp.weixin.qq.com/s/azSk79UwWQaXY6vnZyifkA)
- [Mac Catalyst 的新功能](https://mp.weixin.qq.com/s/zlmsfTgUtJNKbBZxOgn8KQ)

## 新闻

### [The 2020 State of the OCTO—VERSE](https://octoverse.github.com/)

[@Parsifal](https://github.com/ParsifalC)：GitHub 官方的 2020 年度报告，作为聚集了最多全球开发者的开源平台，GitHub 这次从社区、生产率以及安全三个方面，展示不同的数据来总结过去的 2020 年。

## 新手推荐

### 🐎 [the different types of self in Swift](https://www.jessesquires.com/blog/2020/12/28/the-different-types-of-self-in-swift/)

[@极速男孩](https://github.com/ztlyyznf001)：这篇文章简单的介绍了在 Swift 三种 self 的不同用法，包括 self. 前缀，.self 后缀和 self 类型。

## 文章

### 🌟 🐎 [从 Weex 到Web，性能逆势如何破局？](https://mp.weixin.qq.com/s/0EluripD7qNZtx7-aCstkw)

[@Damien](https://github.com/ZengyiMa)：今年双十一飞猪会场从前端渲染引擎从 Weex 回归到 WebView，在迁移变化的同时，同时性能指标上的优化也不能落下，飞猪团队为了极致的性能体验，使用了端侧预渲染、服务端渲染、页面快照、SPA 单页应用模式以及资源&数据预缓存等方案来进行极致的优化，同时取得的效果也是很惊艳的：日常会场首屏耗时环比降低 25%，较 618 以及国庆会场首屏耗时环比降低 20%。对 WebView 优化相关的同学推荐阅读此文，或许可以找到灵感。

### 🌟 🐎 [如何持续的自我提升](https://mp.weixin.qq.com/s/ibezFl5p62yDlb8HS6NyJw)

[@J_Knight_](https://github.com/knightsj)：本文作者结合自己的实际学习案例分享了 “如何自我学习/提升”的问题，整体的学习思路如下：
- 初识：被灌输知识的过程。
- 思考：主动消化知识的过程。
- 探索：手动进行研究的过程
- 总结和超越：完成自我提升的过程

而且文章还提到了费曼学习法，感兴趣的读者可以阅读一下本文。

### 🌟 🐢 [Preventing Data Races in the Swift Concurrency Model](https://gist.github.com/DougGregor/10db898093ce33694139d1dcd7da3397)

[@享耳先森](https://github.com/iblacksun)：并发一直是现代语言的重要部分，根据 Swift Roadmap，预计 Swift 6.0 将推出基于协程的 async/await 模型及新的 Actor Isolation 并发模型，Swift 核心成员 Doug 写了一篇文章，介绍 Swift 加入了新的并发模型之后，有哪些方式可以避免数据竞争。
> 参考：
- [Swift Concurrency Roadmap](https://forums.swift.org/t/swift-concurrency-roadmap/41611)
- [Protocol-based Actor Isolation: Draft #2](https://docs.google.com/document/d/1BEO6QwzcYCUhaGyA-WRoM_phRa7O7mGPNIMdSV4StEE/edit)

### 🐕 [8 Common SwiftUI Mistakes - and how to fix them](https://www.hackingwithswift.com/articles/224/common-swiftui-mistakes-and-how-to-fix-them)

[@zvving](https://github.com/zvving)：SwiftUI 之于 UIKit，就像 objc 之于 swift：二者在设计思想、具体实现方面有诸多关联，却又是底层逻辑完全不同、『推倒重建』的两类事物。

带着 UIKit 已有经验去学习 SwiftUI，能快速上手的同时也会掉一些不易察觉的坑：细节不符合预期、实现冗余、写法错误而不自知……本文作者总结了 SwiftUI 新手常犯的 8 类错误，解决问题的同时，帮助你更好的理解 SwiftUI 的独特之处。

### 🐕 [更现代的 Swift API 设计](https://mp.weixin.qq.com/s/DhtYVLNq5IRu2eUEktXgJg)

[@EyreFree](https://github.com/EyreFree)：Swift 是一门简洁同时富有表现力的语言，这其中隐藏着众多的设计细节。本文通过提出一个 Struct 的语义问题，在寻找答案的过程中逐步引出 DynamicMemberLookup 应用、PropertyWrapper（WWDC19 的 PropertyDelegate） 的实现原理以及 SwiftUI DSL 中 PropertyWrapper 的应用，来一起看看更现代的 API 背后的设计过程。希望这些理念能帮助你用 Swift 在项目中设计出更现代、清晰度更高的 API。

### 🐕 [一文了解 Xcode 生成「静态库」和「动态库」 的流程](https://mp.weixin.qq.com/s/WH8emrMpLeVW-LfGwN09cw)

[@JonyFang](https://github.com/JonyFang)：本篇主要解答了 iOS App 的链接是由谁完成的。作者通过创建 Demo 来实践 Xcode 生成`静态库`和`动态库`的流程，过程中分析 [Report navigator](https://help.apple.com/xcode/mac/11.4/#/dev21d56ecd4) 页面中详细的 Build(构建)日志，得到的结论是：
- 只有在 `动态库` 的链接过程会依赖 `clang Driver`；
- 真正执行生成 `静态库` 与 `动态库` 的任务的是 `libtool` 和 `ld64`。

## 工具

### [iSimulator](https://github.com/wigl/iSimulator)

[@红纸](https://github.com/nianran)：iSimulator 是一款用于操控 Xcode 模拟器的 GUI 工具，其包含基础增删模拟器、展示应用安装列表、快捷导航应用的 Sandbox/Bundle 文件夹、APP 多模拟器同步装载等多种功能。还在烦恼找不到模拟器安装、文件夹路径的小伙伴可以尝试一下此工具。

## 代码


### [滴滴DoKit For Flutter正式开源，功能及核心实现解读](https://mp.weixin.qq.com/s/QLwE-ehvp9dHW4QJmAWI9g)

[@邦Ben](https://weibo.com/linwenbang)：本文介绍了滴滴开源的 DoKit，DoKit 是一个针对 Flutter 的产研工具包，集成了各种丰富的小工具，UI、网络、内存、监控等等。本文也简单介绍了一下原理，但是实际实现方式还是仔细看代码更为确切。作为辅助类的工具，可以在调试方面提供到比较实时的反馈（例如测试找你反馈bug的时候，不用连个线去 debug 或者传日志一点点看），有需要可以一用。

- Github 地址：
https://github.com/didi/DoraemonKit/tree/master/Flutter

- Pub 仓库地址：
https://pub.dev/packages/dokit

## 赞助者

虚位以待..

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