# 老司机 iOS 周报 #140 | 2020-12-14

![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 内参专栏内的文章，每篇都很精彩！

- [iOS 稳定性：如何在开发中规避安全风险](https://mp.weixin.qq.com/s/Khmpba8XBxbcf6Cq7zc5ZQ)
- [WKWebView 新变化：发掘 WKWebView 的神奇妙用](https://mp.weixin.qq.com/s/NcMo6uStNrdLJvVGfL1TNw)

### [App 内购买项目现已支持「家人共享」功能](https://developer.apple.com/cn/news/?id=4zbvn7u9)

 [@享耳先森](https://github.com/iblacksun)：现在，开发者可以为自动续期订阅和非消耗型内购买项目启用「家庭共享」功能，从而允许用户与最多 5 位其他家庭成员共享购买内容。

## 文章

### 🌟🚧🐕 [Uber 工程师亲述使用 Swift 重写 App 的（惨痛）经历](https://threadreaderapp.com/thread/1336890442768547845.html)

[@四娘](https://kemchenj.github.io/)：事情起源于 2016 年，那年 Trump 还不是总统，TK 还没有爆出丑闻，Uber 还在飞速增长，App 的架构也逐渐变得复杂和脆弱，由此产生的 Bug 让工程师团队疲于奔命，最终他们决定重写 App 的架构。

在 iOS 端，他们做了一个最“灾难性”的决定：**全面使用 Swift 进行重写**。当时的 Swift 还是 2.x 版本，Uber 的项目在那时敲下一段语句需要等 45 秒才会出现代码补齐，除此之外还有编译速度，启动速度和二进制大小的问题，过程中他们用了非常多的 hacky 的手段去处理，例如 struct 全部改成 class，编译产物重链接，编译 pass 重排等等。

希望大家看完这段经历之后可以对技术选型有更深刻的理解。

> 中文译版：[我在Uber亲历的最严重的工程灾难](https://mp.weixin.qq.com/s/T1RqYrCTOpQvkWdunoxqww)

### 🌟🐕 [杀不掉的 App——CVE-2018-4340](https://mp.weixin.qq.com/s/tnupXwfR5EDhZif7t9vR1w)

 [@Leo](https://github.com/leomobiledeveloper)：作者在 2018 年给 iOS 和 macOS 报了一个 WebKit 沙箱逃逸漏洞 CVE-2018-4310，苹果先后在 macOS 和 iOS13上修复了这个漏洞。本文详细讲述了这个漏洞的原理，以及如何在 iOS 上做一个杀不掉的 App，是一篇 iOS/macOS 上安全相关的高质量文章。

### 🌟🐕 [iOS Synchronized 底层分析](https://juejin.cn/post/6903421773232996365)

 [@Damien](https://github.com/ZengyiMa)：Synchronized 是 iOS 开发中最常用的几种锁之一，想知道 Synchronize 的底层实现吗？本文会从 4 个具体问题出发，结合底层源码一步步为你揭开 Synchronize 的面纱，对想深挖的 iOS 底层开发者值得一读。

> 写的不错的技术博客，包含但不局限于 iOS、多端统一、设计、产品等

### 🐕 [My SwiftUI Pain: Creating Tappable Links in Text](https://medium.com/better-programming/swiftui-pain-links-in-text-b31319783c9e)

 [@EyreFree](https://github.com/EyreFree)：SwiftUI 是苹果最新推出的声明式 UI 开发框架，借助它你可以在所有 Apple 平台上构建用户界面，很多开发者已经开始在个人项目甚至企业项目中使用这一技术。它很酷，但毕竟刚刚起步，很快一些开发者便会碰到一些坑或者问题，比如本文作者遇到的：如何优雅地在一段文本中给某些词语添加点击事件。作者分享了自己如何通过一步步的尝试最终得到了自己想要的效果，虽然最终效果看起来还不错，但他直言使用传统的 UIKit 与 AppKit 也许更方便，对 SwiftUI 感兴趣的朋友推荐一读。

### 🐎 [Xcode 12.3 盘点](https://mp.weixin.qq.com/s/F_47HZZn74Jjd1q99WDCHA)

[@J_Knight_](https://github.com/knightsj)：本文介绍了 Xcode 12.3 RC 版本解决的关于 xcodebuild，macOS  上的键鼠响应速度，文档查看器，Interface Builder，模拟器和 Swift 的几个问题。

## 工具

### [lowmad](https://github.com/bangerang/lowmad)

[@老峰](https://github.com/GesanTung): 在开发调试中我们经常会使用 LLDB 命令 Debug，有时也有自定义 LLDB 命令的需求。lowmad 就是用于管理和生成 LLDB 脚本的命令行工具，它提供了简洁易用的命令来生成或安装脚本命令，另外作者开源了 [lldb_commands](https://github.com/bangerang/lldb_commands) 自定义 LLDB 命令，如 find_label、color、nudge 等，感兴趣的读者不妨来研究一哈。

## 赞助者

虚位以待..

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