# 老司机 iOS 周报 #3 | 2018-01-15

第三期的周报如愿以偿的在周一和大家见面了。前两期的时候因为刚开始做不知道能否做到每周一更。小伙伴们在磨合了两周之后也互相有了默契。希望我们能够继续陪伴大家一起成长。

在掘金上我们也开通了专栏，如果是掘金的用户欢迎关注我们：[老司机 iOS 周报](https://juejin.im/user/5a52075e6fb9a01c9d31b107)。

## 新闻

### [国区 iCloud 账户将转由「云上贵州」运营](https://support.apple.com/zh-cn/HT208352)

2018 年 2 月 28 日起，国区 iCloud 账户将转由「云上贵州」运营。如果想要把 iCloud 的东西继续存在美区，可以参考少数派的文章：[不想停用 iCloud？不妨迁移数据到其它 Apple ID ](https://sspai.com/post/42766)。

### [英特尔处理器打补丁后，性能并没有下降很多](http://www.ifanr.com/965596)

标题已经说明一切，为了照顾强迫症我随手打几个字给你。

### [微信着手封堵 Universal Link](https://juejin.im/post/5a5371626fb9a01cb64ea37d)

恭喜微信离成为操作系统的目标又近了一步。

### [Announcing Realm Cloud: Realm Platform as a Service Beta](https://realm.io/blog/realm-cloud-beta-waitlist/)

Realm 云服务新版本开始第一轮公测啦！只需要简单的配置即可接入，现在就来试试吧：[申请试用 Beta 版](https://cloud.realm.io/)，只有 500 个名额哦～申请通过的话还能以 5 折的价格购买 1 年的 Realm 云服务。


## 文章

### [移动 APP 网络优化概述](http://blog.cnbang.net/tech/3531/)

从速度、弱网、安全三个方面介绍了移动场景中的网络优化。概念清晰易懂，bang 的文章一如既往值得一读。

### [接手一个刚起步的 iOS 项目后我做了什么](https://juejin.im/post/5a5625ddf265da3e3f4c9651)

过去半年我负责一个刚起步的 iOS 项目后的工作实践总结。

### [WCDB 源码解析](http://xiangwangfeng.com/2018/01/08/WCDB-源码解析/)

介绍了微信 WCDB 的代码实现，有不少数据库的知识点。

### [[译]2017 Swift 单元测试文章资源精华](https://juejin.im/post/5a58738ff265da3e4b76b62d)

medium 上有人整理了 2017 年单元测试相关的优秀视频文章。非常值得收藏，所以我翻译了一份资源的简介。

### [[译]用Buck构建混合语言iOS项目](https://www.zybuluo.com/zb5228126/note/844203)

Buck 是 Facebook 开源的编译工具，可以提高编译时间。用来编译纯 Swift 或者纯 OC 项目都没问题，然而编译混合语言的项目则会碰到很多问题。Airbnb 在这篇文章里介绍了他们是如何解决 Buck 在混编项目中使用的问题。

### [iOS 9 之后 NotificationCenter 还需要 removeObserver 吗?](https://oleb.net/blog/2018/01/notificationcenter-removeobserver/)

iOS 9 之后，通过 selector 方式 `addObserver(_:​selector:​name:​object:)` 不用显式 remove，但使用 block `addObserver(forName:​object:​queue:​using:)` 依然需要在 observer 销毁之前主动调用 `removeObserver`。文中还给出了一种 `Automating unregistering` 方案。

### [Xcode 9 里一些实用的 URL](https://cocoaengineering.com/2018/01/01/some-useful-url-schemes-in-xcode-9/)

大家都知道 Xcode 9 里优化了代码版本控制的功能，甚至可以直接在 GitHub 上使用 Xcode 打开项目，这个功能主要是通过 URL 实现的，URL 并不只是支持了跳转项目的功能，这篇文章就介绍了很多其它实用的路径。

### [开源项目挣钱实用手册](https://github.com/wizicer/FinancialSupportForOpenSource)

整理了开源项目获得收入的各种方式。

### [Swift Non-Nil Values In An Array Of Optionals](https://useyourloaf.com/blog/swift-non-nil-values-in-an-array-of-optionals/)

如何优雅的过滤数组中值为 nil 的数据？你可以试试 flatMap。
### [Write your scripts in Swift with Beak](https://www.hackingwithswift.com/articles/47/write-your-scripts-in-swift-with-beak)

用 Swift 也可以轻松愉快地写脚本啦，当然，首先需要安装 [Beak](https://github.com/yonaskolb/Beak)！

## 工具

### [create dmg](https://github.com/sindresorhus/create-dmg)

dmg 是 macOS app 常用的分发格式。一行命令将你的 macOS app 打包成 dmg 格式。

### [typewriter](https://github.com/typwr/typewriter)

当不同系统之间进行数据交换时，往往要有一套特殊的数据交换格式或协议来作为中间人，比较典型的就是 JSON 和 ProtocolBuffer。而把中间数据格式转换为具体数据，实际上就是将中间数据格式进行语法翻译，翻译成系统中对应语言的代码，typewriter 就是上述问题在客户端领域的翻译器，纯 Swift 实现，值得学习和使用。

### [AutoPacking-iOS](https://github.com/stackhou/AutoPacking-iOS)

在实际的 iOS 开发、测试、发布过程中，需要不停的打各种包用于各个流程，开发人员忙于新需求实现的同时，还要花费大量时间在打包这种重复且没有意义的事情上，十分浪费精力。AutoPacking-iOS 为我们解决了这个问题，配置好参数后可以一键打包上传到蒲公英、fir.im 等内测网站或 App Store，方便快捷。

### [Step by step – The story about a code bookmarking tool](http://dyna.mo/bookmarking-tool-for-code/)

这是一个代码标签工具，可以通过简易的流程图来描述代码的行为，然后跳转到对应的代码，目前支持  Xcode / Android Studio / Sublime 等编辑器。

### [thefuck](https://github.com/nvbn/thefuck)

控制台执行命令经常报错却不能自动执行某些操作一点也不智能？一定是没有调教好，试试 thefuck，大幅提升工作效率！

## 代码

### [XLForm](https://github.com/xmartlabs/XLForm)

XLForm 是一个 iOS 表单页面的一个解决方案。可以解决各种复杂交互的表单页面，功能十分强大。用 OC 实现，代码质量很高，其设计思想也很值得学习，是一份很不错的源码学习内容。

比较有意思的一点是，XLForm 的 Swift 版本 Eureka 并不是单纯的翻译 XLForm，而是用一种全新的方式去实现相同的功能，通过大量的函数符重载，让写出来的代码特别清晰。

但是，我觉得对于大部分的 app 来说，没有太过于复杂的表单需求，所以没有太大的必要引用这个库去实现一些简单的表单页面。会给人一种，用复杂的工具去解决简单的问题的感觉。

当然，如果是一个类似系统设置的 app 来说，使用 XLForm 一定是首选之一。

### [iOS 性能优化合集 ](https://github.com/skyming/iOS-Performance-Optimization)

关于 iOS 性能优化梳理：基本工具、业务优化、内存优化、卡顿优化、布局优化、电量优化、安装包瘦身、启动优化、网络优化等。

### [CollectionViewSlantedLayout ](https://github.com/yacir/CollectionViewSlantedLayout)

**CollectionViewSlantedLayout** 是一种 UICollectionView 的布局，实现了倾斜卡片的布局样式。同时支持纯代码使用和 Xib 配合使用。

## 书

### [React Native 应用开发实例解析](https://www.amazon.cn/dp/B077S8V6GQ)

共五章，前两章介绍 React Native 的历史发展和基础知识，包括原生组件和第三方库；余下三章则分别介绍三个企业应用——Myagi、TinyRobot 和 Fixt，探讨了当今业界使用 React Native 的方式，以及生产环境下需要注意的问题和相应对策。

适合想初步了解 RN 开发的开发者。

## 音视频

### [Checked #51: 准确表达与善意理解](http://checked.fm/51)

51 期聊了苹果的降频门。

### [Swift Talk #82 Refactoring Imperative Layout Code](https://talk.objc.io/episodes/S01E82-refactoring-imperative-layout-code)

这一期的 Swift Talk 通过实现一个简易的 FlowLayout 来为我们介绍如何使用函数式去重构布局代码。

## 招聘

### [36氪: iOS Leader](https://www.lagou.com/jobs/4025262.html)

北京 D 轮，使用 Swift 开发哦。

### 流利说: 资深 iOS 开发

上海，使用 Swift 开发，业内口碑巅峰。感兴趣微博联系 hr: [JaniceWU贾尼丝](https://weibo.com/wujt3583)。

hr 表示：

> 我们也有很多不足的，比如说始终因为要求太高招不到足够的人。

### [基础架构开发工程师](https://www.lagou.com/jobs/2848214.html)

B 站搬到新地方后业务依然迅速发展。喜欢 B 站的朋友可以试试。

### [喜马拉雅 iOS leader](https://www.lagou.com/jobs/3887089.html)

上海 D 轮。

## 本期编辑

[@没故事的卓同学](https://weibo.com/1926303682/profile)，[@四娘](https://kemchenj.github.io)，[@mmoaay](https://weibo.com/u/1302422271)，[@享耳先森](https://github.com/iblacksun)，[@EyreFree](https://weibo.com/eyrefree777)，[@Damonwong](https://weibo.com/damonone)

## 说明

🚧 表示需翻墙


