老司机 iOS 周报 #20 | 2018-05-21

3,953 阅读6分钟

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

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

专栏

🌟 🐕 再谈 iOS App Crash 防护

我们老司机 iOS 专栏内最新出炉的一篇文章。作者分析了几种可能的 Crash 防护方案,并结合自己实践网易 Baymax 防护方案中遇到的各种问题,给出了解决方法,也提出了自己对这套方案的一些思考。

新闻

MongoDB 官方提供对 Swift 原生支持

MongoDB 是一个基于分布式文件存储的开源数据库系统。现在官方在 C 驱动(libmongoc)的基础上,用 Swift 进行封装,提供 Pure Swift 驱动。这或许表明 Server-side Swift 越来越成熟,期待不久的将来能看到大规模应用。

文章

🌟 🐕 关于 MVC 的一个常见的误用

如何避免把 Model View Controller 写成 Massive View Controller 已经是老生常谈的问题了。我们可以通过 MVVM , Reactive 模式或 Reducer 模式等进行优化改造。但比起模式和框架,更重要的是认识到解决的问题本质在于:我们要如何才能更清晰地管理“用户操作,模型变更,UI 反馈”这一数据流动的方式。本文则是通过一个简单的 To Do 列表来阐述如何清晰地管理数据流动。

🐎 Flutter 原理简解

Flutter 可以说是近期最热门的一个开发框架了,上周已经推过一篇 Flutter UI 绘制流程的文章,本篇文章也 cover 了一部分绘制的流程,不过与之前 focus 在 layout 环节不同, 本篇文章的渲染部分主要讲解了 Flutter 是如何通过 Skia 框架将 layout 之后的元素提交给 GPU 进行绘制。 除此之外,文章还分析了 Flutter 引擎的组件架构以及一些安装配置教学。

简单来说有用的内容不少,不过结构有点乱,看起来略费劲。(逃。。

🐢 『如何使用现代的 App 工程与架构的技术来构建我们的 App』系列文章

上述四篇是一个系列文章, 围绕一个核心问题来讲述:如何使用现代的 App 工程与架构的技术来构建我们的 App。不得不说作者写的是很良心的,整体文风对新手都很友好而且做到了循序渐进、抽丝剥茧的叙事逻辑,是不可多得的项目教程。

系列文章从一个普通的、设计缺乏考量的 demo 工程开始,首先为其添加了单元测试框架的支持,然后整合了 CocoaPods 来管理第三方的依赖,引入了 SwiftLint 来对代码进行静态检查,最终介绍了如何配置 Fastlane 来把传统打包提审流程中最繁琐的截屏步骤给自动化。基本涵盖了现在的 iOS App 项目的核心工程要素,尤其适合小公司的“多面手”型工程师阅读。

🐎 Tips for using Xcode Playground

虽然 Xcode Playground 老爱崩溃,但 Playground 的确很适合测试一小段代码。文章介绍如何设置手动运行,来降低 Playground 的 CPU 使用率及崩溃率,以及如何为手动运行添加 ⌘R 快捷键。另外 Playground 在最后一行代码执行完毕之后就会立即停止,并不会等待还没有执行的异步回调,可以设置停止方式为手动停止,或者代码来控制停止。

🐎 Running Xcode Playgrounds on Travis CI

Playgrounds 是一个很好的展示代码的方式。Mattt 新写的 Guide to Codable 就是基于 Playgrounds 去传递他的想法。而他为了解决及时发现自己的代码还是否适配最新的 Swift 版本和 SDK 版本,借助了 Travis CI 自动的去检查版本的适配。

🐢 TouchID 和 FaceID 实战使用的一些经验

LocalAuthentication 虽然只有 LAContext 一个 class,但并不代表清晰好用,其文档不够清晰甚至有错误。作者在实际 App 中使用过 LocalAuthentication 之后列出了文档的一些错误并给出了许多最佳实践。

🐕 手机京东技术团队对iOS自动化埋点探索

客户端埋点是产品分析用户数据的重要途径,常见的埋点方式有以下三种:

  • 代码埋点,最直接的手动埋点方式,由开发人员完成;
  • 可视化埋点,本文将会介绍的方式,可由埋点维护人员自行完成;
  • 无埋点,相当于全埋点,网易 HubbleData 中有使用到。

本文整体介绍可视化埋点的使用方式和技术细节,另外针对可视化埋点中遇到的问题,尝试给出解决方案和并提出了一些思考。

🐎 如何在实现类似于 rx 的命名空间

大家应该在 Kingfisher 和 RxSwift 这些库里见过 kfrx 的命名空间,刚开始用的时候会觉得有点陌生,但习惯之后就会理解这是一种多么优雅的代码组织方式,这篇文章会一步一步教大家如何实现这样的命名空间。

如果觉得英文阅读比较困难的同学,也可以考虑一下看 Enjoy 的 iOS 工程师写的这篇博文 Swift 命名空间形式扩展的实现

🐎 监控启动崩溃

一套监控启动闪退的方案,与以前通过检测 App 在某段时间后是否仍然存活的方式相比,这套方案的检测时机更加提前,通过 hook msg_send 函数实现,并且自己处理了 crash 后的日志上报功能。

代码

Parade

Parade 是一个简单易用的视差效果引擎,适用于基于 UIScrollView 任何视图。除了简单易用以外,Parade 的源码和示例代码质量都很高,是一个不错的 Swift 开源库。

ClassicKit

一套 Windows 95 风格的 UI 样式库。比较有意思的是它支持 @IBDesignable,这样就可以在 Xib 或者 Storyboard 中直接查看效果。

工具

Scheduling Services

一个微型 Swift 计划服务框架,基于 NSNotification 实现,用于计划未来(重复的)事件。使用 Codable 持久化任务内容,支持存储和恢复事件状态,API 简单、清晰。

🐢 Catching smiles with Google’s ML Kit on iOS

Google I/O 大会推出了谷歌的全新移动端机器学习框架 MLKit,可以实现在本地跑机器学习模型的能力,各方面都很像苹果已经推出的 CoreML 框架。这篇文章教大家如何使用 MLKit,包括设置 Firebase 服务,然后在 iOS 上进行代码开发,实现了一个对照片进行微笑检测的功能。

关注我们

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

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

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋

说明

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

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