# 老司机 iOS 周报 #135 | 2020-11-09

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

## 新闻

### [App Store Connect 已包含 app 隐私相关问题](https://developer.apple.com/cn/news/?id=vlj9jty9)

[@Parsifal](https://github.com/ParsifalC)：苹果对用户隐私数据保护的又一措施。在用户下载 App 之前，开发者必须让用户知晓可能被收集的信息以及该信息是否会用于跟踪他们的行为。从 2020 年 12 月 8 日起，提交至 App Store 的新 app 和 app 更新都将需要包含此信息。

## 文章

### 🌟 🐢 [Flutter 中的 Tree Shaking 机制初探](https://mp.weixin.qq.com/s/Uv6vKiESZVplTYQV9T07Yg)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Tree Shaking 是一种死代码消除（Dead Code Elimination）技术，这一想法起源于 20 世纪 90 年代的 LISP。其思想是：一个程序所有可能的执行流程都可以用函数调用的树来表示，这样就可以消除那些从未被调用的函数。本文是闲鱼技术探究工程一体化的过程中对 Flutter 的 Tree Shaking 机制探究的科普文，强烈推荐.

### 🐕 [Swift KeyPaths under a different optic](https://www.47deg.com/blog/keypaths-optics/)

[@极速男孩](https://github.com/ztlyyznf001)：Optics 可以给一个语言提供了简单地访问或修改整个数据结构各个部分的方法。这篇文章主要介绍了如何利用 key paths 来实现 Optics 的模型，来实现深度嵌套的不可变数据结构的 get 和 set 方法。更多关于 Optics 的内容可以参考[这篇文章](https://www.47deg.com/blog/optics/)。

### 🐕 [Swift 编译慢？请看这里，全套开源](https://juejin.im/post/6890419459639476237)

[@JonyFang](https://github.com/JonyFang)：主要介绍 [cocoapods-imy-bin](https://github.com/MeetYouDevs/cocoapods-imy-bin) 项目对 Swift 二进制化的支持。分享了 Swift 二进制化过程中遇到的一些问题及对应的解决方案。

cocoapods-imy-bin 特征：

- 无入侵
- 轻量。不受耦合或组件化的影响
- 支持自动化使用
- 支持 `use_frameworks!`
- 支持 Swift 项目二进制化编译

> 由 [Mr.Coder](https://github.com/su350380433) 自荐

### 🐕 [Bridging Native UI Components in the React Native](https://www.netguru.com/codestories/bridging-native-ui-components-in-the-react-native)

[@J_Knight_](https://github.com/knightsj)：本文作者通过一个简单的 Demo 和 iOS、Android 以及 JS 三端的代码，分享了如何桥接原生的 UI 组件到 React Native 显示，以及原生和 React Native 的数据通信的方法。

### 🐎 [Swift 中使用 Option Pattern 改善可选项的 API 设计](https://onevcat.com/2020/10/use-options-pattern/)

[@zvving](https://github.com/zvving)：线上项目应用 SwiftUI，除了 Widget 目前可落地的场景还不够多。业务场景或许有些限制，学习探索的思路则不应该局限。就像[喵神](https://onevcat.com/tabs/about/)所说：『SwiftUI 中提供了很多“新颖”的 API 设计思路和 Swift 的使用方式，我们可以进行借鉴，并反过来使用到普通的 Swift 代码中。』

这篇文章中，作者从交通灯实际例子出发，探讨可配置交通灯不同实现的优劣。通过 Option Pattern，可以帮助我们在不增加存储属性的情况下，提供简洁、高效、类型安全的配置方案。试试借鉴思路，相信你也可以用到自己的项目中。

### 🐎 [Formatting numbers in Swift](https://www.swiftbysundell.com/articles/formatting-numbers-in-swift/)

[@Damien](https://github.com/ZengyiMa): 在 Swift 中我们应该如何去格式化我们的数字格式呢？你可以使用 NumberFormatter 类来实现你的需求，NumberFormatter 可以处理多国家/地区的数字分隔符、货币数字符号、度量衡符号以及和 Codable 结合去用，如果你的 App 的面向国际化的用户，使用 NumberFormatter 绝对会让你提高数字格式化的效率。

### 🐕 [围观 Github 上 Flutter 评论最多的 Issue](https://juejin.im/post/6888884127634817038)

[@Parsifal](https://github.com/ParsifalC)：Flutter 虽然是近年来最火爆的跨端方案，但它的 Bug 之多也是一直被社区开发者所诟病的。Flutter 体系中万物皆 widget，而负责管理 widget 状态 的是 State，目前 Flutter Repo 上被最多关注评论的 issue 也是围绕着 `State` 这一概念。这个 issue 由 [provider](https://github.com/rrousselGit/provider) 和 [flutter_hooks](https://github.com/rrousselGit/flutter_hooks) 的作者 [@rrousselGit](https://github.com/rrousselGit) 提出，他表示 [Flutter 的复用状态逻辑要么太麻烦要么太难](https://github.com/flutter/flutter/issues/51752)，用 Hooks 的话就能彻底解决这个问题，但 Flutter 团队似乎并不认可这一做法。整个 issue 一共有 30 多位开发者参与讨论，从 3 月份提出至今已累计了 400 多条评论。本篇文章带着大家强势围观了这次激辩，吃完瓜感觉不够过瘾，可以自己再爬爬楼~

## 工具

### [ImportSanitizer](https://github.com/SketchK/ImportSanitizer)

在 iOS 开发中，我们常常会看到各种引入头文件的方式，往往这些方式都可以正常编译和运行。但其实一些非标准的写法可能会导致项目的 `search path` 变得冗长，也有可能导致编译不过。ImportSanitizer 是一款能够帮助开发者自动修复工程头文件引用方式的 CLI 工具，它非常简单易用，想排查下工程头文件引入问题的同学可以使用试试。

### [Arena](https://github.com/finestructure/Arena)

[@Parsifal](https://github.com/ParsifalC)：macOS 端的 CLI 工具，可以让我们快速创建一个使用指定 SPM 包的 Swift Playground 工程，并且同时支持 GitHub 仓库引入和本地引入。

## 音视频

### 🐢 🚧 [Chris Lattner: The Future of Computing and Programming Languages | Lex Fridman Podcast #131](https://www.youtube.com/watch?v=nWTvXbQHwWs)

[@老驴](https://www.weibo.com/6090610445)：Chris Lattner 和 Lex Fridman 一对一详细聊语言和未来计算的发展，其中有谈到很多关于 Swift 以及其他基础计算相关的话题。Chris 现在就职于 SiFive，是一家设计 RISC-V 芯片的公司。值得一提的是，作为开源指令集的代表，RISC-V 未来也很有可能是 ARM 构架的有力挑战者。
本视频可以作为通勤路上的一个不错的收听选项。

## 赞助者

[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具，提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能，在工作中能极大提升开发效率，Mac App Store免费下载！

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