# 老司机 iOS 周报 #130 | 2020-09-28

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

## 通知

国庆大长假这就来了，周报也将停更两期，下一次更新会在 **10 月 12 日**，复工的首个星期一。望周知！祝大家长假愉快~

## WWDC20

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

- [iOS 14 相册适配指南](https://mp.weixin.qq.com/s/eGHi17N-XOsZB2Bh-tZZXA)
- [如何使用原生 Diff 能力优化 UICollectionView 性能](https://mp.weixin.qq.com/s/I-leJV9W2s2ntb1Lf4DGVA)
- [UIKit 新进展：现代 Cell 配置](https://mp.weixin.qq.com/s/GSvenyTmmeI7O4XFLoUMlA)
- [PhotoKit 新变化：认识新的照片选择器](https://mp.weixin.qq.com/s/YsfG8-eKwQHRlLdg41w7rQ)

## 新手推荐

### 🐕 [3 lesser-known ways of using Swift enums](https://sarunw.com/posts/lesser-known-ways-of-using-swift-enums/)

[@EyreFree](https://github.com/EyreFree)：本文介绍了 Swift 中使用枚举的 3 种鲜为人知的方法，建议有在使用 Swift 的同学都看一下，相信会有所收获。

## 文章

### 🌟 🐢 [Flutter 渲染引擎详解 - iOS Metal 篇](https://zhuanlan.zhihu.com/p/214099612)

[@极速男孩](https://github.com/ztlyyznf001): 因为苹果即将停用 OpenGL， 所以在 flutter 1.17 版本中支持了 metal 渲染。本文主要介绍了在 flutter 中，如何完成上下文初始化，然后如何将 view 输出到 surface 中。并在最后介绍了 flutter 光栅化的过程。

### 🐕 [搭建 iOS-Crash 平台实践总结](https://www.xuyanlan.com/2020/01/20/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAcrash%E5%B9%B3%E5%8F%B0/#more)

[@水水](https://www.xuyanlan.com)：我之前写过一个 [如何自建 Crash 平台](https://www.xuyanlan.com/2019/02/20/iOS-crash-report/)，里面提供了一个大致的思路，这篇文章是对具体实践的一个过程记录。Crash 收集使用的是 PlCrashReporter，解析是基于 llvm8.0，已成功搭建运行近一年，还指导了另外的部门进行快速搭建。想要自己搭建 Crash 平台和自定义 Crash 信息的，可以参考本文的思路。也欢迎在老司机技术群一起进行探讨和交流。

### 🐢 [The state of Swift for WebAssembly in 2020 (and earlier)](https://desiatov.com/swift-webassembly-2020)

[@老峰](https://github.com/Gesantung)：[SwiftWasm](https://swiftwasm.org/) 是一个开源项目旨在将 WebAssembly 后端集成到官方 Swift 编译器中，该项目仍处于最早阶段，将允许开发人员使用 Swift 编程语言来构建可在 Web 浏览器中运行的应用程序。本文作者介绍了将 Swift 代码编译为 WebAssembly 的 SwiftWasm 工具集发展历程和期间遇到的问题，以及 2020 年所做更新、未来规划和目标，对 swift-webassembly 感兴趣的读者建议阅读。

### 🐎 [Windows 上也能用 Swift 编程了，官方编译工具安装包现已上线](https://mp.weixin.qq.com/s/088RdJNxa79t1Y9Q04A3Xw)

[@zvving](https://github.com/zvving)：Swift 支持 Windows 平台，编译器的支持只是一部分工作，更需要对基础库、调试器、测试工具等开发生态提供全面支持。

至少现在，能用简短 Swift 代码编写 Windows 原生计算器程序：这是马拉松般漫长的平台支持旅程中，一个不错的开始。

> 参考：[Porting by a 1000 Patches: Bringing Swift to Windows](https://www.youtube.com/watch?v=Zjlxa1NIfJc)

### 🐎 [来来来，Flutter Widget 体系架构与 UI 渲染流程](https://juejin.im/post/6874737011325059086#heading-0)

[@Damien](https://github.com/ZengyiMa)：本文是 Flutter Widget 以及 UI 渲染的底层技术讲解文章，从 Widget 的分类不断深入到底层 UI 渲染的整套流程，有助于想了解 Flutter 底层渲染机制的同学学习理解。同时在了解了底层原理后，也可以更好的展开诸如状态管理、渲染优化，卡顿 FPS 优化等技术领域的工作。

### 🐕 [探秘 App Clips](https://mp.weixin.qq.com/s/HtWQONDrOqPMR-MSqn2-eg)

[@JonyFang](https://github.com/JonyFang)：本文主要是对 App Clips 功能支持及开发配置的介绍。先介绍了唤起条件及用户可操作的权限开关；随后介绍 App Clips 二进制的下载和清理；接着介绍 Apple Connect、客户端、服务端需要做的相关配置；之后介绍了下 App Clips 和主 App 的数据共享及互斥关系；最后介绍了本地测试和审核相关的内容。整篇文章，精简地把 App Clips 从开发、测试、提审到用户体验完整的过程介绍了一篇。对于有 App Clips 业务开发需求的同学会有一定的参考帮助。

### 🐎 [深夜暗坑 - iOS 启动图异常修复方案](https://mp.weixin.qq.com/s/giXmBAC0ft-kRB3BloawzA)

[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1)：本文分享了如何定位启动图渲染失败和未能更新的问题的过程以及排查的结果，并提供了替换系统缓存启动图的方案，提供了相关流程图；最后提供了该方案对缓存启动图在不同系统版本上的表现差异。

### 🐕 [Memory Safety - The Swift Programming Language](https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html)

[@四娘](https://kemchenj.github.io)：这是 Swift 官方文档的其中一节，默认情况下，Swift 会阻止你代码里不安全的行为。例如，Swift 会保证变量在使用之前就完成初始化，在内存被回收之后就无法被访问，并且数组的索引会做越界检查。

Swift 也保证同时访问同一块内存时不会冲突，通过约束代码里对于存储地址的写操作，去获取那一块内存的访问独占权。因为 Swift 自动管理内存，所以大部分时候你完全不需要考虑内存访问的事情。然而，理解潜在的冲突也是很重要的，可以避免你写出访问冲突的代码。

### 🐕 [Swift 的 MemoryLayout 是如何工作的](https://ai-chan.top/hexo/2020/09/13/Swift-MemoryLayout/)

[@四娘](https://kemchenj.github.io)：`MemoryLayout` 是标准库里一个很神奇的类型，通过它我们可以在运行时获取到特定类型的内存布局信息，之前我们介绍过的 `HandyJSON` 和 `Runtime` 库都有使用到它，但对于它的原理的介绍文章却不是很多。

这篇文章就从 Swift 编译器的视角出发，介绍了 `MemoryLayout`  的工作原理，例如从源码到 IR 的过程中如何确定类型的内存布局，如何把这些编译期的元信息变成可调用的语言接口，希望读者读完之后也可以对此有所了解。

### 🐎 [JS-Native 通信的 6 种方式](https://mp.weixin.qq.com/s/_Xo6O3NoE1z9AIMJm_uSsA)

[@享耳先森](https://github.com/iblacksun)：本文列出了 Hybrid 架构中，JS 与 Native 通信的几种技术方案，这些方案你都了解吗？

> 题外话：Hybrid 通信大多是异步方式的，不妨深入研究下，是否可以实现同步呢？

## 内推

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