老司机 iOS 周报 #106 | 2020-03-23

4,375 阅读5分钟

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

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

新闻

App Store 对 COVID-19 相关应用的审核要求

@享耳先森:苹果此前发出通知:为了保证数据源的可靠性,要求 COVID-19 相关应用必须以机构身份提交。同时,正常的审核流程可能需要比较长的时间,鼓励 COVID-19 相关应用在提交审核时发起「TimeSensitive Event」请求优先审核。

新手推荐

Determining which frameworks use UIWebView

@老峰:苹果已经弃用了 UIWebView,从 2020 年 4 月开始将不再接受新的 UIWebView 应用,从 2020 年 12 月开始将不再接受老的 UIWebView 应用升级。本文介绍了检测三方库是否包含 UIWebView 的方法:

  • 源码:grep -r 'UIWebView' .
  • 非源码(.framework):nm .framework/ | grep -i UIWebView

文章

🌟 🐕 性能深度分析之 System Trace

@五子棋:作者从 Time Profiler 的原理出发,阐述了性能优化过程中仅仅使用 Time Profiler 的一些瓶颈。然后引出了平时大家可能较少使用的 System Trace。通过一个具体加载 Dyld Lib 的例子来直观的对比 System Trace 能够对性能优化起到什么样的 “补缺” 式帮助。最后作者还补充了一些技术原理,来帮助大家更好的理解性能优化中的一些关键点,总之是一篇具有深度的 Instrument 佳作。

🌟 🐕 FlutterBoost1.0到2.0,我一共做了这几件事

@CrazyCoderShi:FlutterBoost 目前已经来到 2.0 版本,在从 1.0 到 2.0 的过程中,踩了不少坑,本文是 FlutterBoost 小组对于升级过程中坑点的一个全盘解析,社区一直反馈的白屏和闪屏问题也在此次迭代中得到了解决。

🐎 基于时间轮片方式处理超时任务

@J_Knight_:如果每次判断某个任务是否超时的时候都要开启定时器的话,对性能上会带来一定的消耗。本文作者参考了使用时间轮片的方式去处理 TCP 心跳连接的方案,实现了一个基于时间轮方式来处理超时任务的框架,从一定程度上避免了性能的消耗。作者结合了代码框架代码和使用示例进行了讲解,并在文末附上了 demo。

推荐阅读:时间轮片(Timing Wheel)实现心跳机制

🐕 一个不规范的 Category 写法导致的“血案”

@含笑饮砒霜:文中举例通过线上监控发现项目前后两个版本在没有较大改动的前提下,启动时间缩短了并且包体积也变小了,然后追根朔源找到是因为一个 UIView 分类把实现写在了头文件导致。

因为这个分类会被工程中很多地方 import,而实现如果直接写在头文件中,相当于头文件的内容直接 copy 到对应文件,对应符号也编译到了对应的 .o 文件中,导致 .o 文件变大,所以会导致包体积变大。另外由于是 copy 到多个文件内,相当于生成了多个具有相同方法的分类,导致 UIView 的方法列表变长,进而导致在 UIView 消息发送过程中的查找时间变长,因为又会导致启动时间变长。

🐕 MediaPipe - 跨平台机器学习应用开发框架

@老驴:MediaPipe 是 Google 开发并开源的数据流处理机器学习跨平台应用开发框架。作为基于图的数据处理管线,MediaPipe 适用于视频,音频,传感器数据等这些时间序列数据。

框架主要想要解决的是性能,充分利用设备功能等在跨平台机器学习开发中比较有难度的问题。MediaPipe 同时还提供了可视化图编辑器,使用的时候,对新手更加友好。有兴趣的童鞋们不妨来看看。

🐢 Avoiding massive SwiftUI views

基于 UIKit 开发的应用程序,很容易使我们开发出 “Massive View Controller” ,因为 ViewController 通常承担了过多的职责。SwiftUI 是 Apple 去年发布的一个全新 UI 框架,它采用声明式的界面开发方式,没有各种 view controllers ,可以使我们更容易写出低耦合的代码。但即便如此,如果要避免 “Massive View Controller” ,依然需要进行一些良好的设计。本文介绍了如何在基于 SwiftUI 开发的前提下,将 UI 分解成更小的模块,让职责更单一,这会有助于我们写出更易迭代和维护的代码。

工具

Profiling and debugging your Combine code with Timelane

@zvvingTimelane 是一个响应式编程调试工具,结合 Instrument 提供更直观、交互式的调试过程,同时支持 Combine 和 RxSwift。这篇文章告诉你如何上手 Timelane,告别 print 的调试方式。

GitHub 手机客户端正式发布

@xuyanlan:GitHub 手机客户端已经正式发布在了 Google Play 和 AppStore。

代码

FLUI

@loopingFLUI 是一个基于 Flutter 开发的 UI 框架,拥有完善的使用示例和文档,同时支持动态化渲染、Dark Mode 等特性,喜欢 Flutter 的同学可以好好学习研究一番。

内推

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

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

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

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

关注我们

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

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

说明

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

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