老司机 iOS 周报 #107 | 2020-03-30

4,239 阅读6分钟

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 【译】用UIKit和UIView在视图上执行iOS动画

@极速男孩:本文介绍了 UIView 中实现动画的几种方法以及各个参数的意义,最后简单介绍了如何去优化动画的性能。可以参考原文

文章

🐎 为什么 Debug Information Format 改为 DWARF 可以提高编译速度?

@J_Knight_:本文探索了将 Debug Information Format 改为 DWARF 可以提高编译速度的原因。首先介绍了 DWARF 和 dSYM 的生成时机,以及设置 DWARF with dSYM 与否的产物区别和性能区别,并提供了在不同情况下的性能测试结果。通过本文可以让我们对编译器的编译过程、调试器的调试符号查找过程有较为深入的认识,也可以让我们明白为什么这种优化可以带来编译性能的提升。

🐕 微信支付跨平台软件架构

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

Swift 5.2 正式发布 & 5.3 正在路上

@享耳先森:Swift 5.2 已经正式发布,主要是对错误诊断的增强以及以下两个新特性:

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

🐎 Weex、RN 还是 Flutter?资深技术专家与你聊聊阿里跨平台思路

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

🐎 手淘 App 如何落地 Swift ?一边探索实践,一边“打怪升级”

@JimQ:上个月周报推荐了从探索到落地,手淘引入 Swift “历险记”,本篇是 InfoQ 对文章作者最新的采访稿。

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

🐎 滴滴正式发布开源客户端研发助手DoKit 3.0,新特性解读

@红纸DoKit(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 官方文档

🐢 Flutter Platform Channel 使用与源码分析

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

🐢 在 ARC 下对非 ObjC 类型的指针进行操作的编译器陷阱

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

代码

🐕 SourceKitForSafari

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

内推

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

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

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

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

🚧 表示需翻墙,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)