# 老司机 iOS 周报 #174 | 2021-09-06

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

## Apple 专家一对一

### 🌟 [第二期：探索 iPadOS 技术](https://developer.apple.com/cn/accelerator/)

[@Parsifal](https://github.com/ParsifalC)：苹果官方的一对一咨询活动第二期来啦！2021 年 9 月 14 日（下周二）举办主题为 “探索 iPadOS 技术”的在线研讨会。本次面向周报读者免费公开报名，**扫码即可参与**。独一无二的机会，直接向 Apple 的专家学习，**报名截止日 9 月 10 日，名额有限，报满即止**。

![image](https://user-images.githubusercontent.com/7930911/132127482-7eec524e-0fd8-4584-8ee2-ca812586a276.png)

## 新手推荐

### 🐕  [Flutter 里的语法糖解析，知其所然方能潇洒舞剑](https://mp.weixin.qq.com/s/Wi2jJ8KnsSnrV8Dk_eIqDg)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：以往大家都是从官方的介绍文档中认识 dart 的中的 关键字 / 语法糖 的，本文通过 [dump_kernel.dart](https://github.com/dart-lang/sdk/blob/master/pkg/vm/bin/dump_kernel.dart) 解析 dill 二进制执行文件，从编译产物的角度分析了 late 、 typedef 、extension 、 async / await 的具体实现。知道现象的你，如果也对下面的问题有所疑惑，在看了生成后函数就能明白底层是如何实现的。

- 当我们访问 late 声明的对象时，如果对象还没有初始化，为什么会返回一个异常？
- 使用 typedef 会不会对性能和运行结果产生影响？
- extension 关键字是如何在原对象基础上实现拓展呢？
- 为什么我们在外部对一个 Future 进行 try catch 不能捕获异常？

想实操反解 dill 文件的同学可以参照这篇[文章](http://gityuan.com/2019/10/05/dart_vm/#25-%E6%9F%A5%E7%9C%8Bkernel%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F) 进行操作。

## 文章

### 🌟 🐕 [一文读懂字节跳动自研移动研发工具链 MBox](https://mp.weixin.qq.com/s/5_IlQPWnCug_f3SDrnImCw)

[@Barney](https://github.com/BarneyZhaoooo)：瓜神曾参与开发的 **Mbox** 终于开源了，文章从现状与问题开篇，详细介绍了 Mbox 诞生的背后思考、架构设计、核心功能、困难与挑战，给业内开发者带来了很好的参考。

### 🐕 [APP 隐私合规](https://mp.weixin.qq.com/s/_RP6EEYfYGJn877tRdXOFA)

[@AidenRao](https://weibo.com/AidenRao)：作者公司的 APP 收到通信管理局，关于 APP 侵害用户权益整治专项行动中核查整改问题的通知。整改要求是 10 天内完成对有问题 APP 的整改，并提交整改情况报告。

作者整理了中国网信网关于 APP 违规的认定标准，针对容易出现的违规问题，给出了整改方式建议。

### 🐕 [Reverse engineering a 5 year old Xcode issue](https://swiftrocks.com/reverse-engineering-xcode-issue-crash-symbol)

[@Damien](https://github.com/ZengyiMa)：你是否注意到 Xcode 中的 Organizer 中如果不是你本地机器打出的包将无法进行符号解析，作者通过 Hopper 等逆向手段定位到了 DVTAnalytics 框架中的一个 Bug，并且做了对应的修复，好奇是怎么实现的吗？对逆向感兴趣的同学值得一读。

### 🐢 [Swift 与 Objective-C 混编时，我们是如何将编译时间优化了 35%？](https://mp.weixin.qq.com/s/9BpfKhT1tQM_gAUNb2mQLg)

[@Smallfly](https://github.com/iostalks)：这篇文章比较长，详细地介绍了 58 同城在 Swift 和 Objective-C 混编过程中，编译速度优化的分析与实践。

Swift 和 OC 混编，要实现 Swift 引用 OC 文件，一种方案是添加桥接文件，另一种是采用 Module 化的方式引用，第一种方案有较高的维护成本，58 采用了第二种。

然而，在尝试 Module 化之后，整体的编译耗时比非 Module 化增加了，这和苹果官方给出的性能数据是不符的。

经过深层次的分析，最终通过 hmap 方案实现了编译耗时优化。对其他 App 的 Module 化有比较好的借鉴意义。

### 🐕 [添加编译警告的另一种方式：clang 开发入门](https://juejin.cn/post/7002999613984768031#heading-6)

[@红纸](https://github.com/nianran)：本文是一个 **clang** 插件开发的一个入门开发的实践文章。以检查 if 语句的过度嵌套提示 warning 为目标，对 AST 中 if 节点进行解析，输出 warning。对于没有了解过 clang 插件开发的同学，本文还是比较有意思的文章。

### 🐕 [Core Data with CloudKit (一)](https://www.fatbobman.com/posts/coreDataWithCloudKit-1/)

[@JonyFang](https://github.com/JonyFang)：WWDC 2019 Core Data 的更新引入了 `NSPersistentCloudKitContainer`，由此可以便捷的使用 Core Data with CloudKit 来进行多设备数据同步。本篇主要对 Core Data with CloudKit 的基础介绍，内容大概为：

1. Core Data with CloudKit 的局限性
2. Core Data with CloudKit 的优点
3. 简介 Core Data 和 CloudKit
4. Core Data 对象 vs CloudKit 对象、

### 🐢 [Flutter Fish Redux 2.0 架构演进实践](https://mp.weixin.qq.com/s/5LUCFZWts9Q0lUNqtocADQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Fish-Redux 作为 Flutter 状态管理工具已经开源已久，也在大量应用和业务中被验证，特别是咸鱼。但随着业务和场景的复杂度不断增长，在有些场景下显得捉襟见肘，无法很好的满足，于是有了此次架构的演进，致力于解决复杂页面编排，动态 AB 问题，以及提升灵活度。

## 摸鱼周报

[@摸鱼周报 #25](https://mp.weixin.qq.com/s/LLwiEmezRkXHVk66A6GDlQ)：第二十五期摸鱼周报来啦，一起来看下本期概要：

* 话题：本期跟竹立交流一下关于求职和学习方法的话题。
* Tips：如何清除启动图的缓存；如何优化 SwiftLint 流程。
* 面试模块：本期解析一道 GCD 死锁题。
* 优秀博客：整理了 Swift 泛型相关的几篇文章。
* 学习资料：Adobe 的调色板网站：Adobe Color Wheel；知识小集的 Tips 汇总：Awesome-tips。
* 开发工具：管理 Github 项目 Star 的工具：OhMyStar。

## 代码

### [swift-atomics](https://github.com/apple/swift-atomics)

[@Parsifal](https://github.com/ParsifalC)：去年 10 月，Apple 正式推出并开源了 swift-atomics，我们可以通过它使用纯 Swift 代码实现高性能的无锁并发数据结构。而近日，swift-atomics 终于发布了 1.0.0 版本，这也意味着 swift-atomics 有了一个正式的稳定版。

延伸：
- [Introducing Swift Atomics](https://swift.org/blog/swift-atomics/)，非常详尽的官方介绍文档。
- [【译】SE-0282 Low-Level Atomic Operations ⚛︎](https://kemchenj.github.io/2020-10-02/)：周报编辑四娘翻译了 swift-atomics 的原始 Proposal，有助于更全面的了解它。

## 赞助者

### flomo 浮墨笔记

新一代卡片笔记，像聊天一样无压力输入，帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码（可以获得 45 天 PRO 会员）：https://flomoapp.com/register2/?Mjk4Njk

### 产品沉思录

一份由少楠& fonter 打理的付费邮件周刊及知识库，创建于 2017 年，累计 3000+ 用户付费订阅。涵盖了产品设计，服务设计，互联网技术，经济学，社会学等领域。我们尽量选择那些半衰期较长的内容，以确保这些知识能跨越时间。欢迎访问我们的免费精选集：https://index.pmthinking.com

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