# 老司机 iOS 周报 #152 | 2021-03-22

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

## 新闻

### [Swift 5.5 Release Process](https://forums.swift.org/t/swift-5-5-release-process/45644)

[@享耳先森](https://github.com/iblacksun)：Swift 社区释出了 Swift 5.5 的发布计划，这意味着随 WWDC21 发布的将是 5.5 而不是 6.0，不过好消息是大家期待已久的 [async/await](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md) 将随 5.5 一起发布。

## 新手推荐

### [Swift LibHunt - Discover popular and related Swift open-source projects](https://www.libhunt.com/l/swift)

[@EyreFree](https://github.com/EyreFree)：LibHunt 是一个跟踪开源项目和软件库的网站，在这里你可以找到最受欢迎的开源库和他们的同类型工具，提供了多种统计口径和筛选方式，除了 Swift 外也支持其他大部分主流编程语言。

> [@Parsifal](https://github.com/ParsifalC)：前阵子不时地看到读者群或者公众号后台都有朋友在问想看一些优秀的开源库，希望这个网站能帮你筛选到合适的。

## 文章

### 🐕 [Swift 5.4 新特性](https://mp.weixin.qq.com/s/p6oeWwcgJJFqP2NgYaJXYw)

[@四娘](https://kemchenj.github.io)：之前我们介绍过 Hacking Swift 写的 [What's New in Swift 5.4](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2021/%23148-2021.02.08.md#-whats-new-in-swift-54)，最近知识小集翻译了中文版。

按照往年的时间安排，包含 Swift 5.4 的 Xcode 12.5 大概会在这个月的月底发布，之前还没看过的朋友可以趁这个机会提前了解一下 Swift 5.4 的新特性。

### 🐎 [从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗](https://mp.weixin.qq.com/s/Y1AHFN1kJ9kCjXdFOnUviA)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：NSUserDefaults 是 iOS 开发者常用的持久化工具，通常用于存储少量的数据。经过文中的测试，发现 NSUserDefaults 有以下 3 个特性：
- 多线程安全
- 内存级别缓存
- 写操作会触发 xpc 通信

根据这三个特性，得出适合选择 NSUserDefaults 作为数据持久化的场景如下：
- 少量数据存储
- 偶尔修改
- 多线程安全

### 🌟 🐢 [clang 源码导读系列 6 篇](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxMzk0OTg5MQ==&action=getalbum&album_id=1773549418412064769&scene=173&from_msgid=2247485042&from_itemidx=2&count=3#wechat_redirect)

[@JonyFang](https://github.com/JonyFang)：clang 源码导读系列，共分为 6 篇。依次简介下每篇的概要内容：

1. clang 源码导读（1）- clang 入门
	- 梳理了不同场景下 clang 的含义；
	- 引出三个基础知识点：诊断、`llvm:Triple`、`ToolChain`；
2. clang 源码导读（2）: clang driver 流程简介
	- 结合实例，介绍 `clang driver` 流程；
3. clang 源码导读（3）: clang driver 参数解析
	- 通过分析 `DriverOptTable` 的生成机制分析 `Driver::ParseArgStrings` 内部流程；
	- 对 `clang driver` 的参数解析流程做了简析；
4. clang 源码导读（4）: clang driver 构建 Actions
	- 通过对 `BuildUniversalActions` 方法的源码分析，介绍了 clang driver 构建 Actions 的流程；
5. clang 源码导读（5）: clang driver 构建 Jobs
	- 对 `clang driver` 的构建 Jobs 流程进行详细的讲解，如介绍了 `clang drive` 是如何通过合并多个 JobAction 来避免反复的硬盘读写操作和文件生成/解析操作；
6. clang 源码导读（6）: clang driver 执行命令
	- 本篇通过分析源码的方式，对 `clang driver` 的执行命令涉及的流程进行完整的分析；

`clang driver` 这一层虽未涉及到真正的编译，但作为整个编译过程的驱动，以 pipline 形式抽象了各个环节的输入输出，解决了参数解析翻译、任务封装及执行等过程，满足了我们各种各样的使用需求。**clang 源码导读系列** 会带着读者了解 `clang driver`，对后续了解编译的全过程会有所帮助。

### 🐢 [Flutter 正在被悄悄放弃吗？](https://mp.weixin.qq.com/s/hDjbMSPNz_D5JeEBMEJZCA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Flutter 自诞生之日起，从来都稳坐风口浪尖，关注与争议一直伴随其身。近几年，诸多互联网大厂投入实践，尝到了 Flutter 带来的甜头，但随着深入落地，Flutter 的性能问题为人诟病。这是一篇访谈文，一起来听听咸鱼负责人宗心和百度贴吧端负责人的看法，我想读者会有新的见解.


### 🐕 [iOS 稳定性问题治理：卡死崩溃监控原理及最佳实践](https://mp.weixin.qq.com/s/cEfIZGtUojKKbhIfUyhTMw)

[@J_Knight_](https://github.com/knightsj)：本文介绍了字节跳动 APM 中台团队自研的一套专门用于定位生产环境中的卡死崩溃的解决方案。文章首先介绍了当前 iOS 卡死崩溃监控的痛点，然后图文并茂地介绍该方案的思路和具体实现：

- 卡顿监控原理
- 如何判定卡顿为一次卡死
- 如何确定卡死时间的阈值
- 如何检测到用户一次卡死的时间
- 如何解决主线程调用栈可能有误报的问题

最后还提供了通过本方案上线后总结出来的一些典型问题和最佳实践。

### 🐎 [Be careful with Obj-C bridging in Swift？](https://swiftrocks.com/be-careful-with-objc-bridging-in-swift)

[@Damien](https://github.com/ZengyiMa)：由于 Apple 平台历史问题的存在，Swift 与 Objective-C 进行桥接一直是 Swift 开发的重要组成部分，今天要说的是我们常用的 as 转换符在 Swift 使用中需要注意的地方，也许在不经意中会造成一些隐藏的异常崩溃，来一起探索 Swift 于 Objective-C 转换中发生的事情吧。

## 工具

### 🌟 [github1s](https://github.com/conwnet/github1s)

[@Parsifal](https://github.com/ParsifalC)：这个工具基于 VSCode 的浏览器版本，使得我们可以只用一个浏览器便可以方便地浏览和编码任意 GitHub Repo，你只需要将仓库链接的 `GitHub` 域名改为 `GitHub1s` 即可立即体验。比如 `https://github.com/microsoft/vscode` 变为 `https://github1s.com/microsoft/vscode`。

### [FVM 愉快的切换 Flutter 版本，强烈推荐！](https://juejin.cn/post/6919469825547272205)

[@邦Ben](https://weibo.com/linwenbang)：Flutter SDK 的安装很简单，下载下来解压就基本可用了。但是当你想进行一些不同版本的调研，或者 beta 版本的尝鲜，或者多个项目之间来回切换，那你就需要一个 SDK 管理工具了，FVM 则满足这个需求。和 NVM, RVM 一样的作用，切换 Flutter SDK。

## 赞助者

虚位以待..

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