# 老司机 iOS 周报 #107 | 2020-03-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) 提出。

## 新手推荐

### 🐎 [【译】用UIKit和UIView在视图上执行iOS动画](https://juejin.im/post/5e784681f265da57671be823)

[@极速男孩](https://github.com/ztlyyznf001)：本文介绍了 UIView 中实现动画的几种方法以及各个参数的意义，最后简单介绍了如何去优化动画的性能。可以参考[原文](https://www.smashingmagazine.com/2019/11/performing-ios-animations-views-uikit-uiview/)。

## 文章

### 🐎 [为什么 Debug Information Format 改为 DWARF 可以提高编译速度？](https://mp.weixin.qq.com/s/97h0oeotOpyTc_a-9ZSJtQ)

[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1)：本文探索了将 Debug Information Format 改为 DWARF 可以提高编译速度的原因。首先介绍了 DWARF 和 dSYM 的生成时机，以及设置 DWARF with dSYM 与否的产物区别和性能区别，并提供了在不同情况下的性能测试结果。通过本文可以让我们对编译器的编译过程、调试器的调试符号查找过程有较为深入的认识，也可以让我们明白为什么这种优化可以带来编译性能的提升。

### 🐕 [微信支付跨平台软件架构](https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649287208&idx=1&sn=6f3813deaad2aa6f096bc0b0d7ba8c34&chksm=8334ceaab44347bc903bcf1d00898e124ccbc509fd628b119071b41a05959f09df2ef0716bea&mpshare=1&scene=1&srcid=&sharer_sharetime=1584703159505&sharer_shareid=c357a4972a00ef443223641b12ffbd76#rd)

[@莲叔](http://aaaron7.github.io/)：说起跨平台，我们一般想到的都是 RN、Weex 这样基于 JS 技术栈的跨平台技术。但 iOS、Android 都提供了比较友好的交叉编译工具，使得基于 C/C++ 的跨平台开发也是非常值得考虑的一个选项。微信支付基于业务逻辑复杂、双端实现不一样导致的高昂的维护成本的背景下，开发了一套基于 C++的跨平台开发框架，使得核心的业务逻辑都下沉到 C++中，使用同一份代码来实现，取得了非常显著的业务效果。该文对该架构进行了详细的介绍，也有很多关于架构设计过程中的考量的解析，非常有参考价值。推荐工作中有较多架构工作内容的同学阅读。

### [Swift 5.2 正式发布 & 5.3 正在路上](https://swift.org/blog/5-3-release-process/)

[@享耳先森](https://github.com/iblacksun)：Swift 5.2 已经正式发布，主要是对错误诊断的增强以及以下两个新特性：
- [SE-0249 Key Path Expressions as Functions](https://github.com/apple/swift-evolution/blob/master/proposals/0249-key-path-literal-function-expressions.md)
- [SE-0253 Callable values of user-defined nominal types](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md)

Swift 5.3 已确定相关计划，专注于质量和性能提升，另外，预计将增加对 Windows 及其他 Linux 发行版的支持。

### 🐎 [Weex、RN 还是 Flutter？资深技术专家与你聊聊阿里跨平台思路](https://mp.weixin.qq.com/s/AufpOA4ZDu0sf0sL-Sv_Sw)

[@looping](https://github.com/looping)：本文介绍了跨平台开发的发展趋势和变化，并提出从研发成本、灵活性、性能体验这三个角度来考虑如何选择适合自己的跨平台开发框架，同时也介绍了阿里各跨平台开发框架的发展及应用，以及 5G 时代给移动领域带来的新机会。

### 🐎 [手淘 App 如何落地 Swift ？一边探索实践，一边“打怪升级”](https://mp.weixin.qq.com/s/_iweRWQCjnoASCmUAKHDFA)

[@JimQ](https://github.com/waz0820)：上个月周报推荐了[从探索到落地，手淘引入 Swift “历险记”](https://mp.weixin.qq.com/s/oHGkoGzhMs-l8TX6t0831w)，本篇是 InfoQ 对文章作者最新的采访稿。

1. 首先，更细致的讲述了决定引入 Swift 之前的各种考虑，以及在落地过程中流程和方法的摸索。
2. 讨论了中国 Swift 生态落后于国外的原因，以及随着 Swift ABI 的稳定，对未来一两年国内生态进步的极大期许。
3. 最后，谈了年度热点 SwiftUI 和 Flutter，以及移动跨平台技术的选择问题。

### 🐎  [滴滴正式发布开源客户端研发助手DoKit 3.0，新特性解读](https://mp.weixin.qq.com/s/cTze8_-0KBIHHh96aEcilg)

[@红纸](https://github.com/nianran)：[DoKit](https://github.com/didi/DoraemonKit)([DoraemonKit](https://github.com/didi/DoraemonKit)) 是滴滴开源的一款功能齐全的客户端研发助手。在最新发布的 3.0 版本中，新增了多项新功能：

1. 接口 Mock：拦截 APP 的网络请求进行转发至 DoKit 平台，返回开发人员预先设定好的数据
2. 健康体检：该功能开启后，DoKit 会在一定间隔时间内去记录 CPU、内存、FPS 等信息，与此同时会触发式收集网络、页面卡顿类数据。将此类数据上传到 DoKit 平台后可以进行图形化展示分析
3. DBView：将我们的 APP 内数据库同步到 PC，在 PC 上完成的增删改查会同步到 APP 的数据库内
4. 函数耗时：采用 **Hook objc_msgSend** 的方式，来记录每个函数的耗时，并已树形结构输出

如果你的 APP 还没有合适的 Debug 工具集合，DoKit 值得一试。详细文档请查阅 [DoKit 官方文档](http://xingyun.xiaojukeji.com/docs/dokit/#/intro)。

### 🐢 [Flutter Platform Channel 使用与源码分析](https://juejin.im/post/5e78989cf265da575c16e75c)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：日常的 Flutter 开发中，如果你想和 Native 层交互，那么 Platform Channel 是必经之路，提供方便之余我们也好奇其实现原理，底层是如何操作的，本文多个纬度深度剖析 Platform Channel ，其中源码分析更是抽丝剥茧，从更深的层次带你全方位了解 Platform Channel 。

### 🐢 [在 ARC 下对非 ObjC 类型的指针进行操作的编译器陷阱](https://mp.weixin.qq.com/s/SE5vpD733SQw9_yc1JN_TQ)

[@kyo](https://github.com/KyoLi)：在 MRC（手动管理内存） 时代，内存管理是一件很重要的事，稍有不慎，就可能造成内存泄漏甚至 crash 。如果开启了 ARC 模式，在 backend 阶段会通过几个 ObjcARC Pass 插入基于引用计数的内存管理语句，从而使我们不必再去手动 `retain` 或者 `release` 对象，而且，ARC 下的内存管理常常会比我们手动管理得更好，内存泄漏更少。但 ARC 也并不是完全不会出错，如果某些隐式操作逃过了 ObjCARC Pass 的“火眼”，可能会生成不配对的 RC 语句，从而导致运行时异常。本文介绍了两种可能引发 ARC 异常的情况并分析了原理，也可以让我们更深入了解 ARC 的底层原理。

## 代码

### 🐕 [SourceKitForSafari](https://github.com/kishikawakatsumi/SourceKitForSafari)

[@莲叔](http://aaaron7.github.io/)：相信对于绝大多数开发同学来说，在选择把一个 github repo clone 到本地之前，都会在页面上先浏览一下代码，看一下是否能够大概满足自己的要求。但在网页上看代码普遍是比较痛苦的，SouceKit for Safari 就是解决这个痛点的一个插件，它实现了在浏览器的环境中实现一些基本的 IDE 功能，比如跳转到定义，查看文档以及查看变量定义等功能。配合 Octotree 插件（github 的文件列表插件），相信可以极大的提升 github 的使用体验。我已经迫不及待想要尝试一下了。

## 内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

当然，也欢迎你关注我们每一期的周报，我们会在每期周报底部及时更新编辑内推岗位。

## 关注我们

我们开通了公众号，每期发布时公众号（OldDriverWeekly）会推送消息，欢迎关注。

![](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）
