# 老司机 iOS 周报 #138| 2020-11-30

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

- [端智能：使用 Create ML 打造图片和视频的风格转化模型](https://mp.weixin.qq.com/s/oIVvGleWyHi7X38uFULRjA)
- [端智能：用 Create ML 打造智能运动 App](https://mp.weixin.qq.com/s/pzbxLL03Sq3IXKQRCQohKg)

## 新闻

### [App Store Connect 放假安排：12月23日-27日 ](https://developer.apple.com/cn/news/?id=83m4plrb)

[@Parsifal](https://github.com/ParsifalC)：请确保您的 App 为最新版本，以准备迎接假期。App Store Connect 在12月23日至27日（太平洋时间）期间不接受新 App 和 App 更新，因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。

## 文章

### 🌟 🐕 [iOS AOP 方案的对比与思考](https://mp.weixin.qq.com/s/5JhbX4McMifFpZ7NyztIQw)

[@Damien](https://github.com/ZengyiMa)：AOP 意为面向切面的编程方式，在不修改源代码的情况下，给程序动态统一添加功能的技术。本文详细的介绍了目前 iOS 的各项 AOP 方案（Method Swizzle, Aspects, MPSwizzler, ISA-swizzle KVO, Fishhook, Thunk, Clang 插桩）的原理实现、使用场景以及问题缺陷。让我们的工具箱又多出了一些可供选择，同时进一步加深对静态和动态语言的理解，也对程序从静态到动态整个过程理解更加深入。

### 🐕 [UME - 丰富的 Flutter 调试工具](https://mp.weixin.qq.com/s/9GjXB9Eu-OP3fIjdQWKklg)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：鉴于在开发 Flutter 过程中遇到的一些问题，西瓜视频 Flutter 基础团队开发了一款调试工具包 UME，内部集成了丰富的调试工具, 包括但不限于如下功能：

- Widget 信息：查看当前选中 widget 的大小、名称，文件路径以及代码所在行数
- Widget层级：查看当前选中 widget 的树层级，以及它 renderObject 的详细 build 链
- ShowCode： 查看到当前页面的页面代码
- 内存泄露：检测 flutter 内存泄漏
- 内存查看：查看当前 Dart VM 对象所占用情况
- 对齐标尺：测量当前 widget 所在屏幕的一个坐标位置，开启吸附开关后可以自动吸附最近 widget
- 颜色吸管：查看到当前页面任何像素的颜色，方便调试 UI
- 网络调试：支持所有网络请求抓取，mock 响应内容等
- Logger：展示使用 debugprint 函数打印的日志
- Channel Monitor：查看所有的 channel 调用，包括方法名，时间，参数，返回结果

### 🐕 [What went wrong with the libdispatch. A tale of caution for the future of concurrency](https://tclementdev.com/posts/what_went_wrong_with_the_libdispatch.html)

[@Leo](https://github.com/leomobiledeveloper)：libdispatch 是 Apple 推出的帮助开发者利用好多核性能的底层框架，简洁的 block 相关的 API 让并发编程变得前所未有的容易。但很多情况下 libdispatch 被滥用，导致引起线程爆炸，代码调试困难等问题。本文作者讲述了自己使用 libdispatch 的痛点，分析了 swift 即将引入的并发相关特性的，文章条理清晰，能看出作者对并发编程有着独到的见解。

### 🐕 [MongoDB Realm 使用初体验 ｜ 奇谈](https://mp.weixin.qq.com/s/HhhqkHtu9P1hib9L2Miyhg)

Realm 是一个专门为移动端设计的数据库。主要特点是性能好，易使用。MongoDB 是一个流行的 NoSQL 数据库，主要是在服务器端使用。MongoDB 收购 Realm 半年后推出全新的 MongoDB Realm。移动端的数据库还是 Realm，本地的数据存取接口几乎保持一致。通过 Realm sync 这个程序把数据同步到 MongoDB Atlas 中。本文介绍了 MongoDB Realm 的基本功能和使用方法。

### 🐎 [DispatchSource: Detecting changes in files and folders in Swift](https://swiftrocks.com/dispatchsource-detecting-changes-in-files-and-folders-in-swift.html)

[@四娘](https://kemchej.github.io/)：GCD 里的 DispatchSource 家族包含了一系列监听系统事件的 API，例如 Mach 事件通知，文件变更通知等等。在这篇文章里，作者以实时日志浏览为例展示了这一套 API 的使用方式。

### 🐢 [端智能：理解 Vision 框架中的图片技术](https://mp.weixin.qq.com/s/L4VHrw0Hvu_ALlTRY7rBBA) 和 [How to display Vision bounding boxes](https://machinethink.net/blog/bounding-boxes/)

[@EyreFree](https://github.com/EyreFree)：Vision 是 Apple 2017 年和 Core ML 一起推出的、基于 Core ML 封装的图像识别库，它包含有人脸识别、机器学习图片分析、条形码识别、文字识别等基础功能。本次推荐的两篇文章对 Vision 的图片重点区域、图片分类、图片相似度、人脸识别技术等主要应用进行了介绍和演示，推荐大家都来看一下，说不定下次遇到的图形相关的业务就可以用它来实现了。

### 🐢 [一篇吃透 Dark Mode ，搞定“暗黑/深色”适配](https://mp.weixin.qq.com/s/02QmgMkmVcB8x7xVZJT_Bg)

[@AidenRao](https://weibo.com/AidenRao)：本文讲述 APP 中各组件适配 Dark Mode（暗黑模式 或 深色模式）的方式和注意事项，以及一些细节的处理建议。
但更重要的，是让大家掌握适配暗黑模式的工作量。避免轻易开工，导致进退两难。

- 从“层级”、“颜色”两方面讲述 iOS 安卓适配方法。
- 讲述 Dark 适配需要关注的细节：字色、图标、插图等
- Dark 适配的难点：适配场景多，Dark 模式下无障碍阅读的适配，以及容易出现遗漏。

### 🐢 [移动端 UI 一致性解决方案](https://mp.weixin.qq.com/s/oq7ylltdRIdJuSlL7EIiNA)

[@Parsifal](https://github.com/ParsifalC)：大型 App 往往承接着来自不同团队的业务，可能各个业务组都有着自己的产品、设计和研发团队。随着版本的不断迭代，大型 App 在设计层面、研发层面、测试层面和产品层面均会面临着效率低、UI 体验不一致等问题。美团外卖团队分享了他们在移动端 UI 一致性解决方案上的探索。这是一套需要各个团队达成共识共同去维护的标准化组件，相比于完成这一套方案的建设，或许去推进各个业务团队接受并使用也是不小的挑战。

### 🐎 [Comparing iPhone OS 1.0 with iOS 14 using tree maps](https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/)

[@Parsifal](https://github.com/ParsifalC)：2007 年第一款 iPhone 发布至今，iPhone 的硬件在不断更新，软件也从 iPhone OS 1.0 到了 iOS 14。本文通过 tree map 带我们一览其中的结构变化过程。


## 赞助者

虚位以待..

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