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

老司机 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』系列文章
How to refactor your app to add unit testsHow to add CocoaPods to your projectHow to clean up your code formatting with SwiftLintHow to streamline your development with Fastlane
上述四篇是一个系列文章, 围绕一个核心问题来讲述:如何使用现代的 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 这些库里见过kf和rx的命名空间,刚开始用的时候会觉得有点陌生,但习惯之后就会理解这是一种多么优雅的代码组织方式,这篇文章会一步一步教大家如何实现这样的命名空间。
如果觉得英文阅读比较困难的同学,也可以考虑一下看 Enjoy 的 iOS 工程师写的这篇博文 Swift 命名空间形式扩展的实现

###监控启动崩溃
一套监控启动闪退的方案,与以前通过检测 App 在某段时间后是否仍然存活的方式相比,这套方案的检测时机更加提前,通过 hookmsg_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 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom

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

作者:老司机iOS周报
链接:https://juejin.im/post/5b0248b5518825429c598309
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。