# 老司机 iOS 周报 #66 | 2019-05-06

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## 新手推荐

### [Flutter 豆瓣客户端](https://github.com/kaina404/FlutterDouBan)

[@邦Ben](https://weibo.com/linwenbang)：该开源库，对豆瓣客户端有一定的还原度，不过未实现部分也挺多，毕竟仅仅只是学习用途，暂时里面并没有用到更为复杂的 Rx 或者 Redux ，因此十分适合新手先上路。在学习 Flutter 的同学可以一看。

PS：项目需要还原一下 Podfile 为初始状态方可运行（ BUG ）

## 文章

### 🌟 🐕 [移动开发这十年](https://mp.weixin.qq.com/s/vcbHMtaJEkZhSgiRBST1YA)
[@莲叔](https://weibo.com/aaaron7/): 移动开发从诞生之日起，到现在已经过了十年时间，这篇文章是 InfoQ 邀请美团的藏成威老师回顾了移动开发技术的十年演变。笔者作为移动开发年限算比较久的老兵，有幸经历了其中大部分的浪潮。其中绝大多数技术升级都是围绕跨平台、动态性，归根到底技术体系的升级是围绕业务形态来决定的。文章比较全面的剖析了从 H5 hybrid，到 RN/Weex, 到 Flutter/小程序等不同阶段的跨平台技术。文章本身没有太多技术点，但非常适合拿来作为思考技术和业务是如何相互影响的素材，在阅读文章的时候要多问 Why，相信会有不少的收获。

### 🌟 🐕 🚧 [Reducing FOOMs in the Facebook iOS app](https://code.fb.com/ios/reducing-fooms-in-the-facebook-ios-app/)

[@zvving](https://twitter.com/zvving)：Facebook 2015 年的一篇经典文章，提出优化 OOM 问题的一些思路：

- 通过列举所有 App 被终止的已知路径区分是 FOOM 还是 BOOM
- 分析内存使用状况，从 UIWebView 迁移至 WKWebView，降低内存占用
- 避免内存重复申请与释放，减少多达 30% OOM Crashes
- 完善基础设施：跟踪 App 中每个类的实例计数和内存占用

相关阅读：[iOS微信内存监控](https://mp.weixin.qq.com/s/r0Q7um7P1p2gIb0aHldyNw)

### 🌟 🐕 [iOS App 安全加固方案调研](https://mp.weixin.qq.com/s?__biz=MzI2NzI4MTEwNA==&mid=2247485642&idx=1&sn=dce8e7581d94c8d8d2b79366f6223161&chksm=ea807f75ddf7f663daf6776b0f5a98aeea2e735e08c3a5268fd00f45b5a893d0e8dbac03b0f8&mpshare=1&scene=23&srcid=%23rd)

[@红纸](https://github.com/nianran)：iOS 系统向来以安全著称，但是在越狱面前，我们的 App 接近于裸奔的状态。在本文中，作者整理了如下内容：

1. 现有市面上已有的加固方案，以图片的方式，展示了各家公司的核心功能点。
2. 对现有的加固方案，进行了一次规整，总体方案梳理
	1. 数据保护：细分中有网络数据、IPA 资源数据、沙盒数据、Keychain 数据
	2. 混淆保护：细分中有符号混淆、字符串混淆、指令混淆
	3. 反调试保护：细分方案有 ptrace 和 sysctl 两种防护策略，(有兴趣可以参考 [关于反调试&反反调试那些事](http://bbs.iosre.com/t/topic/8179))
	4. 异常检测：动态监控 App 的异常信息，例如被注入、篡改代码、重签名等攻击行为

世界上没有绝对的安全可言，想要了解更多关于安全方面的知识，推荐沙老师的书《iOS应用逆向工程》，以及 [念茜的安全攻防系列](https://blog.csdn.net/yiyaaixuexi)。

### 🌟 🐕 🚧 [为什么需要 Reactive Programming？](https://medium.com/@jasonyuh/%E5%85%B3%E4%BA%8Ereactive-programming-24a2cf28fffa)

[@Jason](https://github.com/yxztj)：相信有不少同学都或多或少尝试过 ReactiveCocoa 或者 RxSwift，享受到了链式调用的快乐，但是对于 Reactive 思想的本质，可能不一定每个人都有深入的思考过。本文抛开 Rx 库本身，也没有再重复介绍如何使用 Rx，而是从一些日常开发过程中的问题出发，探讨 Reactive 思想的由来，它所解决的关于数据流、事件传播和观察者模式的一系列问题，以及作者在几年的使用中所领悟的一些更深层次的思考。

### 🐕 [Architecturing an app with functional reactive programming](https://www.welcometothejungle.co/fr/articles/functional-reactive-programming-architecture)

[@anotheren](https://github.com/anotheren)：本文从常见的“回调地狱出发”，讲述了为什么应该使用响应式框架来进行编程。并以 ReactiveX 框架为例，同步展示了在 Swift/Kotlin 中这类框架的思想和应用，推荐阅读。

### 🚧 🐕 [Optional, throws, Result, and async/await](https://nshipster.com/optional-throws-result-async-await/)

[@xiaofei86](https://weibo.com/xuyafei86)：在 Swift 5 之前，我们通过 optional 和 throws 来处理错误。在 Swift 5 中，虽然没有我们期盼的 async/await 特性，但在标准库中增加了 Result 类型。本文对这些 Swift 错误处理的方式进行对比，让你更好的了解 Swift 错误处理的进化过程。

## 工具

### [Xcode10 New Build System And CocoaPods](http://yuqiangcoder.com/2018/11/13/Xcode10-new-build-system-and-CocoaPods.html)

[@享耳先森](https://github.com/iblacksun)：Xcode 10 发布之后，你可能发现修改了 CocoaPods 依赖库的源码之后立即编译并不生效，必须 clean 整个项目重新编译，这其实是 Xcode 10 默认采用 `New Build System` 导致的，本文介绍了两种解决方案。

### [Marzipanify](https://github.com/steventroughtonsmith/marzipanify)

[@老峰](https://github.com/GesanTung)：在 WWDC 2018 苹果分享了名为 Sneak Peak 的工具可以将 iOS APP 移植到 Mac 中，并宣布 2019 对第三方开发者开放，Marzipanify 是 [Steven Troughton-Smith](https://www.highcaffeinecontent.com/blog/20190301-Bringing-iOS-Apps-to-macOS-Using-Marzipanify) 自己开发的一个小工具让开发者提前体验 iOS APP to Mac APP，感兴趣的读者快来尝试吧。

## 代码

### [手把手教你在 Flutter 项目优雅的使用 ORM 数据库](https://juejin.im/post/5c45c72d6fb9a049d81c2b4c)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Flutter 现在开发上最大的槽点可能就是数据库使用了，Flutter 现在只提供了 sqllite 插件，手写 sql 代码，建表、建索引、transation、db 线程控制等等繁琐的事情必然接踵而至，这种数据库使用方式是最低效的了，又倒退回去裸写 sql，这对大部分团队都是重大的成本。

本文将详细介绍一种在 Flutter 项目中优雅的使用 ORM 数据库的方法，文中使用的 ORM 框架是包含在一个 Flutter 插件 [flutter_luakit_plugin](https://pub.dartlang.org/packages/flutter_luakit_plugin) (如何使用可参考[介绍文章](https://juejin.im/post/5c34597651882523d3200c98)）中的其中一个功能，本文只详细介绍这套 ORM 框架的使用和实现原理。并且给出了一个详细的 [demo](https://github.com/williamwen1986/flutter_luakit_demo) 。

## 开源库

### [NSFWDetector](https://github.com/lovoo/NSFWDetector?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more)

[@张嘉夫](https://github.com/josephchang10)：CoreML NSFW（色情）内容检测器。NSFWDetector 是一个小型（17 kB）CoreML 模型，由 CreateML 训练，用于检测图片中的裸体。

### [InAppViewDebugger](https://github.com/indragiek/InAppViewDebugger)

[@红纸](https://github.com/nianran)：UIView Debugger，类似于 Reveal 和 Xcode 中集成的组件，其比较方便的是能够在 APP 内就可以直观的去查看，但目前它只是处于 1.0 版本，功能仅限于查看视图层级，期待其能拥有更加完善的功能。

## 内推

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

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

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

## 关注我们

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

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

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

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）


