老司机 iOS 周报 #117 | 2020-06-15

4,325 阅读6分钟

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

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues

新闻

🌟 苹果公布史上最大规模的 WWDC20 阵容

@享耳先森:WWDC 已经进入第 31 个年头,WWDC20 将于 6 月 22 至 26 日以前所未有的虚拟方式将全球超过 2300 万的苹果开发者社区聚集在一起,将成为迄今为止规模最大的 WWDC。

Keynote 主题演讲在北京时间 23 日凌晨 1 点开始,对于中国的观众来说,主题演讲也将在腾讯、爱奇艺、Bilibili 和优酷上进行直播。同时,超过 1000 名苹果工程师将在 Developer Forums 回答问题并参与技术讨论,开发者可以发布自己的问题,直接向苹果专家学习。

文章

🌟 🐕 iOS 架构谈:剖析 Uber 的 RIB 架构

@老驴:这是一篇由 Uber 工程师撰写,知识小集团队翻译的对 Uber RIB 构架的解析文章。RIB 从很多年前 Uber 切换 Swift 开始使用,到今天已经存在了很长时间了,应该可以说算是一种经得住考验的构架。如果很多年前你对 RIB 构架的理解没有很深入的话,也许你今天再回头来看,就会有更深的理解。

还记得2,3年前,构架风潮兴起的时候,几乎所有的公司的,所有的团队都在搞自己的构架。然而,经历了时间的考验,并不是所有的构架最后都存活了下来。谈点个人看法:所有的构架都应该以自己的业务需求为出发,为了构架而构架,那就是耍流氓了。这个角度上去说,也许很多年以后,再回头去看,说不定觉得 MVC 才是更好的选择呢?

🌟 🐎 Flutter 卡顿问题的监控与思考

@极速男孩 : 卡顿问题一直是开发中比较关注值得关注的问题。本文首先介绍了如何去判断卡顿以及卡顿的原理,然后从修改 Dart SDK, AOT 模式下采集堆栈(暂停线程),AOT 模式下采集堆栈(通过信号)这三种不同的解决方案,并比较了三中不同方案各自的优劣势。

🐢 如何在模块化/组件化项目中实现 ObjC-Swift 混编?

@含笑饮砒霜:在单一 target 的项目中,ObjC 和 Swift 可以直接通过桥接文件 bridging header 实现混编,但如果是在多个 target 或 library 或 framework 中,是不能使用 bridging header 的,这时候如何实现混编呢?文中详细记录了在混编过程中的踩坑历程,可供大家参考借鉴。

推荐阅读:一波 N 折的携程酒店 Swift-Objc 混编实践

🐕 iOS 中的网络调试

@looping:本篇文章不仅详细地介绍了我们所熟悉的一些网络调试工具和原理,而且还经过实践给出了一个不会影响原有网络请求,又能拿到所有网络请求回调的方法。在阅读过程中我们会进一步了解到作者能通过学习借鉴开源框架、官方示例等的设计原理,为解决问题带来新思路,不断地优化演进成最终方案,非常值得肯定和学习。

🐢 在block内如何修改block外部变量?

@水水 : 如果面试被问:在 block 内如何修改 block 外部变量? 你会如何回答呢?如果你不清楚没关系,本文简洁明了的带你了解底层原理,值得一读。

🐎 版本管理工具及 Ruby 工具链环境

@红纸:来自瓜神的**「CocoaPods 历险记」**系列第一篇,本文介绍了版本管理工具以及 Ruby 工具链环境。从中我们可以学习几个不同的版本管理工具的差异,以及 Cocoapods 作为包管理工具如何控制 iOS 项目中各个依赖库版本信息。另外瓜神通过实操 Bundler 管理工程的全流程,详细介绍了如何控制 Gem 的版本信息,以及如何使用 rbenv 管理对应的 ruby 版本。

🐕 Swift Pointers Overview: Unsafe, Buffer, Raw and Managed Pointers

@anotheren:指针是 Swift 语言中最复杂的功能之一,本文成体系地介绍了 Swift 中的 19 种指针,并详细解答了它们是什么,何时使用以及从中可以得到什么。如果你对音视频感兴趣,那么你在和底层接口(主要是一些 C API)打交道的过程中是绕不开指针的,快去了解一下吧。

工具

Swift Package Index

@EyreFree:随着 Xcode 11 中开始集成 Swift Package Manager,越来越多的第三方库也添加了对 SPM 的支持,切换到 SPM 已经逐渐成为可能。swiftpackageindex.com 是一个对支持 SPM 的 Swift 库的索引,即一个 SPM 库搜索引擎,它目前是一个非官方的、由开源社区维护的项目。它的实现原理很简单,数据是依靠人工录入的,即当有人将开源库提交到主列表中时(有需要提交的库?点这里),此站点会立即对它进行完全克隆,并且每隔几个小时进行一次轮询,以便在索引中看到的信息始终反映最新的库版本,而不需要库作者执行任何操作。选择正确的依赖关系不仅仅是找到满足您需要的代码,挑选高质量的库是很困难的,swiftpackageindex.com 软件包索引可以帮助您更好地决定依赖关系,快来尝试一下吧!

代码

全新技能,FDottedLine

@邦Ben:Flutter 官方库并没有提供方便的实现虚线的库(其实就是生态还比较弱)。FDottedLine 这个库则提供了灵活构建虚线效果的组件。如果有虚线需求的童鞋,不妨使用一下。

  • 同时支持水平、垂直两个方向的虚线
  • 支持创建虚线形状
  • 提供超简单的方式为 Widget 添加虚线边框
  • 支持创建灵活的虚线边角效果

内推

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

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

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

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

关注我们

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

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

说明

🚧 表示需某工具,🌟 表示编辑推荐

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