# 老司机 iOS 周报 #122 | 2020-08-03

![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 20 SwiftUI 的重大改变及核心优势](https://mp.weixin.qq.com/s/hp1nMopK_XBkFT7zp3gCfA)

[@zvving](https://github.com/zvving)：在苹果统一平台的大方向下，SwiftUI 不仅是用来替代 UIKit 的布局引擎，也是统一苹果所有终端视图的『终极方案』。在这个背景下，不难理解 SwiftUI 2.0 大量的内容更新。

本文汇总了其中的重大改变，并介绍 SwiftUI&Swift 在淘宝的落地情况。都 0202 年了，如果你的团队还没开始用 Swift，是不是该反思一下？😄

### 🌟 [​ 我们用 Flutter 写了一套全新的 Flutter 开发者工具](https://mp.weixin.qq.com/s/4mcFo3z8DhCDkEMX7IPmww)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Dart DevTools 是由官方团队产出的 Flutter 开发工具，日前官方团队用 Flutter 重新构建了 Dart DevTools ，目前已经在最新版本的 Flutter 插件中集成。在重构原有工具的基础上新增了不少新工具，比如 Layout Explorer , Networking View 等。强烈建议正在使用 Flutter 开发的同学仔细研究一番。

### 🐢 [PRODUCT THINKING · 产品沉思录](https://index.pmthinking.com/PRODUCT-THINKING-a601a12335044f349a22caf57f274c27)
[@zvving](https://github.com/zvving)：老朋友 [少楠（Plidezus）](https://mp.weixin.qq.com/s/Pj4VHdUQNYMqRAQ9uX5-jA)是资深产品经理、设计师、连续创业者，还曾开过超市、做过外卖。同时，他更是充满好奇的互联网玩家：三年前，少楠发起并持续建立了这个数字后花园——**产品沉思录**。从人物集、产品历史、到跨界、认知与思维，不一而足，其中有不少很难收集的珍贵资料。

本期把产品沉思录推荐给大家，在这个后花园闲逛一会儿，相信你会发现诸多宝藏。

## 文章

### 🐕 [Swift 5.3 又更新了什么新奇爽快的语法？](https://mp.weixin.qq.com/s/pQiLyl572fSgMX1Fq3RDhw)

[@享耳先森](https://github.com/iblacksun)：Swift 从 WWDC14 发布至今，已经经过了五年多的迭代，5.3 随着 WWDC20 一起发布，看过相关 Session 的同学一定对 `[SE-0279] Multiple trailing closure` 印象深刻。本文作者给大家列出了 Swift 5.3 的一些改动点，同时对 Swift 的现状与未来，作者也给出了他自己的一些看法。

### 🐕 [Core Image：iOS 图像处理技术追踪](https://mp.weixin.qq.com/s/VeRohpOm_Wo6TNJ4IOTCAA)

[@anotheren](https://github.com/anotheren)：Core Image 是 Apple 平台上最实用的图像处理技术，并在各个平台上都提供了大量现成的工具以快速实现图片/视频的处理。本文介绍了在 WWDC20 中，苹果官方针对 Core Image 技术在三方面做的优化：Core Image 对视频/动图的支持、基于 Metal 构建 Core Image (CI) Kernel 以及 Core Image 的 Debug 支持。

### 🐕 [iOS 大解密：玄之又玄的 KVO](https://mp.weixin.qq.com/s/0Yfb-FYorH5GZ3ZB6bMCUQ)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：说到 KVO，不少人都知道其本质是基于被观察的实例的 isa 生成一个新的类并在这个类的 extra 空间中存放和 KVO 操作相关的关键数据，然后这个新的类以一个中间人的角色借助 extra 空间中存放各种数据完成复杂的方法调度。但是如果仿照系统的 KVO 来实现一套自定义的 KVO，你会发现各种诡异的 bug。本文从汇编层面向大家介绍了 KVO 的本质并提供了相关 bug 的解决方法，其分析和解决问题的思路很是值得我们借鉴。

### 🐕 [WWDC：无线网络优化实践，带来哪些启发？](https://mp.weixin.qq.com/s/R3jMJqNSFkjRtXGePPHKQA)

[@Damien](https://github.com/ZengyiMa)：本文从问题背景、实现原理、实践经验和业务价值角度出发深入介绍了 WWDC20 中推出的加密 DNS 以及受限网络中推送这 2 个新网络特性。并且在后文中介绍了手淘在新网络特性如 IPv6、HTTP/2、TLS1.3、MTCP 以及 HTTP/3 中的实践经验和落地情况，对正在做网络相关的体验优化和升级的同学提供了很好的参考资料。

### 🐕 [GitHub 用对了吗？Flutter 团队分享如何管理大型开源项目](https://mp.weixin.qq.com/s/zo7i232oCQexyegioB7kxA)

[@老峰](https://github.com/gesantung)：Flutter 作为近年热度非常高的跨端开源项目之一，从开发者那里收到了大量的反馈，以及海量的 issue。本文主要分享了 Google Flutter 团队使用 GitHub 管理维护大型开源项目的经验，包括使用 GitHub 管理海量 issue，issue 标签化优先级排序方案，通过 issue 完结率衡量项目运行状况，如何清理积压的 issue 等。

### 🐢 [连续 3 年最受欢迎：Rust，香！](https://mp.weixin.qq.com/s/TPV6uG7StvSQIj3lxufU0Q)

[@tom510230](https://xiaozhuanlan.com/u/6682065345)：本文全面地介绍了 Rust 语言的语言特性，包含以下几个 issue
- 性能：对比下来完胜 go 和 python，这个网上一直有人做 profile，感兴趣的同学可以找到很多的佐证，最大的原因是因为 Rust 的 runtime 不需要 JIT 之类的机制，编译后的 bitcode 即可直接运行
- 内存安全性：所有权规则类似一个单引用计数的机制，考虑一下如果内存一直只有一个变量（所有者）能够操作的话，自然没有内存竞争的问题
- 变量生命周期：编译器会自动发现潜在的野指针问题，要修正了以后才能够编译通过
- 线程安全：在 Rust 中，线程间的数据共享是通过很“别扭”的方式来完成的，可以理解为就是显式获取，显式释放，显式转移所有权，然后才能完成多线程通信，但是这样子却可以通过代码逻辑，保证了不会出现多线程访问边界资源导致的多线程崩溃问题
- 开发效率：看了以上的描述，可以大概看出来编写合理的 Rust 代码，需要很高的入门门槛，调试工具的缺失也一直是 Rust 被人诟病的问题
- 跨平台：因为轻量级运行时的关系，所以 Rust 嵌入到各种语言的运行环境都没有什么压力
- 社区生态：很弱，Stack Overflow 上面基本都是问问题居多，基础组件也有很多缺失，需要自己发明轮子

总体而言，国内大规模使用 Rust 的公司，目前公开分享的，除了[字节跳动](https://www.infoq.cn/article/OH79WEaK7Z3S2XaVO*BV)以外，还有就是在[区块链](https://xie.infoq.cn/article/ba4877ebb2ae379cda30ec136)领域中的高性能表现了，期待后续随着越来越多大厂的加入，Rust 会变得越来越香

### 🐕 [Flutter 季度调研结果分享 | 开发者的选择](https://mp.weixin.qq.com/s/3NAa-uNSZ-KmGsZoVgKs3Q)

[@EyreFree](https://github.com/EyreFree)：Flutter 团队每季度进行一次为期十天的问卷调研，以听取大家使用 Flutter 的体验。本文分享了今年 5 月启动的第九次季度调研的结果，包含了围绕 Flutter 的使用情况、代码示例、Flutter 应用性能、编写 package 等主题的调研结果，对目前 Flutter 在全球的使用情况有了一个比较直观的反映。虽然 Flutter 团队可能无法直接回答每一条评论，但开发者的需求和评论每天都会影响团队的决策，希望有越来越多对 Flutter 感兴趣的朋友能够参与到 Flutter 生态的建设中来。

## 代码

### [如何实现一行命令自动生成 Flutter 插件](https://mp.weixin.qq.com/s/MKQAcYwJ4kiYg-Z8UeddkQ)

[@邦Ben](https://weibo.com/linwenbang)：首先，这个插件是基于 DartNative 框架衍生出来的辅助代码生成工具，用于提高开发 DartNative 框架开发效率，因此不能单独使用。所以如果对 DartNative 还不了解，那请先看下下方两个链接。简而言之，就是通过 `antlr` 进行分析 Native 语言（Objective-C, JAVA, Swift, Kotlin 等）得到 AST ，最后生成 Dart 代码（当然，你可以手写 ~）。对于不使用 DartNative 的读者来说，也可以了解一下工作原理，这类工具在基础工程效率方面或许可以给你带来不少启发。

参考阅读：

- [DartNative Github Repo](https://github.com/dart-native/dart_native)
- [用 Dart 来写 Objective-C 代码](https://mp.weixin.qq.com/s?__biz=MzA5NzMwODI0MA==&mid=2647765287&idx=1&sn=219d4f944b22c0381b1c9e301b5bbd40&chksm=8887ca18bff0430ee847b4f5820f42b79c664a054fd7c149a5e5498f2d96b46f12cb63ca49e7&scene=158#rd)
- [告别 Flutter Channel，调用 Native API 仅需一行代码！](https://mp.weixin.qq.com/s?__biz=MzA5NzMwODI0MA==&mid=2647767683&idx=1&sn=77c7d56ee5c3c141209424a138b94f72&chksm=8887c1bcbff048aa2e0a077893338ef79c630b833d19bcf73beb40a42cbc835b3f159a24504e&scene=158#rd)

### [jVirus/swiftui-2048](https://github.com/jVirus/swiftui-2048)

[@JonyFang](https://github.com/JonyFang)：一个很棒的 SwiftUI 开源项目，使用了纯 SwiftUI 2.0 编写了经典的 2048 游戏，同时支持 iOS 和 iPadOS，也可以轻松拓展以支持 macOS。另外，作者对 iPad 纵向和横向的屏幕旋转也做了切换支持。对于想学习 SwiftUI 的读者，这是一个可以拿来作为参考的示例项目~

## 内推

老司机周报团队联合知识小集和 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）
