forked from SwiftOldDriver/iOS-Weekly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
#20-2018.05.21.md
114 lines (60 loc) · 9.21 KB
/
#20-2018.05.21.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 老司机 iOS 周报 #20 | 2018-05-21
![ios-weekly](../assets/ios-weekly.png)
老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。
## 专栏
### 🌟 🐕 [再谈 iOS App Crash 防护](https://xiaozhuanlan.com/topic/6280793154)
我们老司机 iOS 专栏内最新出炉的一篇文章。作者分析了几种可能的 Crash 防护方案,并结合自己实践网易 Baymax 防护方案中遇到的各种问题,给出了解决方法,也提出了自己对这套方案的一些思考。
## 新闻
### [MongoDB 官方提供对 Swift 原生支持](https://github.com/mongodb/mongo-swift-driver)
`MongoDB` 是一个基于分布式文件存储的开源数据库系统。现在官方在 C 驱动(`libmongoc`)的基础上,用 Swift 进行封装,提供 Pure Swift 驱动。这或许表明 Server-side Swift 越来越成熟,期待不久的将来能看到大规模应用。
## 文章
### 🌟 🐕 [关于 MVC 的一个常见的误用](https://onevcat.com/2018/05/mvc-wrong-use/)
如何避免把 Model View Controller 写成 Massive View Controller 已经是老生常谈的问题了。我们可以通过
MVVM , Reactive 模式或 Reducer 模式等进行优化改造。但比起模式和框架,更重要的是认识到解决的问题本质在于:我们要如何才能更清晰地管理“用户操作,模型变更,UI 反馈”这一数据流动的方式。本文则是通过一个简单的 To Do 列表来阐述如何清晰地管理数据流动。
### 🐎 [Flutter 原理简解](https://mp.weixin.qq.com/s/CQQXD0TrlbaNWjoClIcDtw)
Flutter 可以说是近期最热门的一个开发框架了,上周已经推过一篇 Flutter UI 绘制流程的文章,本篇文章也 cover 了一部分绘制的流程,不过与之前 focus 在 layout 环节不同, 本篇文章的渲染部分主要讲解了 Flutter 是如何通过 Skia 框架将 layout 之后的元素提交给 GPU 进行绘制。 除此之外,文章还分析了 Flutter 引擎的组件架构以及一些安装配置教学。
简单来说有用的内容不少,不过结构有点乱,看起来略费劲。(逃。。
### 🐢 [『如何使用现代的 App 工程与架构的技术来构建我们的 App』系列文章](https://www.hackingwithswift.com/articles/94/how-to-refactor-your-app-to-add-unit-tests)
- [How to refactor your app to add unit tests](https://www.hackingwithswift.com/articles/94/how-to-refactor-your-app-to-add-unit-tests)
- [How to add CocoaPods to your project](https://www.hackingwithswift.com/articles/95/how-to-add-cocoapods-to-your-project)
- [How to clean up your code formatting with SwiftLint](https://www.hackingwithswift.com/articles/97/how-to-clean-up-your-code-formatting-with-swiftlint)
- [How to streamline your development with Fastlane](https://www.hackingwithswift.com/articles/98/how-to-streamline-your-development-with-fastlane)
上述四篇是一个系列文章, 围绕一个核心问题来讲述:如何使用现代的 App 工程与架构的技术来构建我们的 App。不得不说作者写的是很良心的,整体文风对新手都很友好而且做到了循序渐进、抽丝剥茧的叙事逻辑,是不可多得的项目教程。
系列文章从一个普通的、设计缺乏考量的 demo 工程开始,首先为其添加了单元测试框架的支持,然后整合了 CocoaPods 来管理第三方的依赖,引入了 SwiftLint 来对代码进行静态检查,最终介绍了如何配置 Fastlane 来把传统打包提审流程中最繁琐的截屏步骤给自动化。基本涵盖了现在的 iOS App 项目的核心工程要素,尤其适合小公司的“多面手”型工程师阅读。
### 🐎 [Tips for using Xcode Playground](https://fluffy.es/xcode-playground-tips/)
虽然 Xcode Playground 老爱崩溃,但 Playground 的确很适合测试一小段代码。文章介绍如何设置手动运行,来降低 Playground 的 CPU 使用率及崩溃率,以及如何为手动运行添加 `⌘R` 快捷键。另外 Playground 在最后一行代码执行完毕之后就会立即停止,并不会等待还没有执行的异步回调,可以设置停止方式为手动停止,或者代码来控制停止。
### 🐎 [Running Xcode Playgrounds on Travis CI](https://flight.school/articles/running-xcode-playgrounds-on-travis-ci/)
Playgrounds 是一个很好的展示代码的方式。Mattt 新写的 [Guide to Codable](https://gumroad.com/l/codable) 就是基于 Playgrounds 去传递他的想法。而他为了解决及时发现自己的代码还是否适配最新的 Swift 版本和 SDK 版本,借助了 Travis CI 自动的去检查版本的适配。
### 🐢 [TouchID 和 FaceID 实战使用的一些经验](http://michael-brown.net/2018/touch-id-and-face-id-on-ios/)
`LocalAuthentication` 虽然只有 `LAContext` 一个 class,但并不代表清晰好用,其文档不够清晰甚至有错误。作者在实际 App 中使用过 `LocalAuthentication` 之后列出了文档的一些错误并给出了许多最佳实践。
### 🐕 [手机京东技术团队对 iOS 自动化埋点探索](https://mp.weixin.qq.com/s/u-HmmrSAgtER1N2pKxCm0A)
客户端埋点是产品分析用户数据的重要途径,常见的埋点方式有以下三种:
- 代码埋点,最直接的手动埋点方式,由开发人员完成;
- 可视化埋点,本文将会介绍的方式,可由埋点维护人员自行完成;
- 无埋点,相当于全埋点,网易 [HubbleData](https://neyoufan.github.io/2017/04/19/ios/%E7%BD%91%E6%98%93HubbleData%E6%97%A0%E5%9F%8B%E7%82%B9SDK%E5%9C%A8iOS%E7%AB%AF%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/) 中有使用到。
本文整体介绍可视化埋点的使用方式和技术细节,另外针对可视化埋点中遇到的问题,尝试给出解决方案和并提出了一些思考。
### 🐎 [如何在实现类似于 rx 的命名空间](https://medium.com/@thibault.wittemberg/versatile-namespace-in-swift-3e8bbd6b6250)
大家应该在 Kingfisher 和 RxSwift 这些库里见过 `kf` 和 `rx` 的命名空间,刚开始用的时候会觉得有点陌生,但习惯之后就会理解这是一种多么优雅的代码组织方式,这篇文章会一步一步教大家如何实现这样的命名空间。
如果觉得英文阅读比较困难的同学,也可以考虑一下看 Enjoy 的 iOS 工程师写的这篇博文 [Swift 命名空间形式扩展的实现](https://blog.nswebfrog.com/2017/03/23/swift-namespace/)。
### 🐎 [监控启动崩溃](http://sindrilin.com/apm/2018/05/12/observe_crash_at_launch.html)
一套监控启动闪退的方案,与以前通过检测 App 在某段时间后是否仍然存活的方式相比,这套方案的检测时机更加提前,通过 hook `msg_send` 函数实现,并且自己处理了 crash 后的日志上报功能。
## 代码
### [Parade](https://github.com/HelloElephant/Parade)
Parade 是一个简单易用的视差效果引擎,适用于基于 UIScrollView 任何视图。除了简单易用以外,Parade 的源码和示例代码质量都很高,是一个不错的 Swift 开源库。
### [ClassicKit](https://github.com/Baddaboo/ClassicKit)
一套 Windows 95 风格的 UI 样式库。比较有意思的是它支持 `@IBDesignable`,这样就可以在 Xib 或者 Storyboard 中直接查看效果。
## 工具
### [Scheduling Services](https://152percent.com/blog/scheduling-services)
一个微型 Swift 计划服务框架,基于 NSNotification 实现,用于计划未来(重复的)事件。使用 Codable 持久化任务内容,支持存储和恢复事件状态,API 简单、清晰。
### 🐢 [Catching smiles with Google’s ML Kit on iOS](https://martinmitrevski.com/2018/05/11/catching-smiles-with-googles-ml-kit-on-ios/)
Google I/O 大会推出了谷歌的全新移动端机器学习框架 MLKit,可以实现在本地跑机器学习模型的能力,各方面都很像苹果已经推出的 CoreML 框架。这篇文章教大家如何使用 MLKit,包括设置 Firebase 服务,然后在 iOS 上进行代码开发,实现了一个对照片进行微笑检测的功能。
## 关注我们
我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。
![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
## 本期编辑
[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@mmoaay](https://weibo.com/u/1302422271),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango)
## 说明
🚧 表示需翻墙,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)