# 老司机 iOS 周报 #70 | 2019-06-03

![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) 提出。

## 新闻

### 🌟 [『SwiftOldDriver 精选』调价至 1 元](https://xiaozhuanlan.com/olddriver-selection)

『SwiftOldDriver 精选』是周报编辑去年做的一个付费专栏，内容是编辑们自己的原创或译文，总共 20 余篇。现在正式以一元价格开放，保留一元售价而不完全免费只是为了减少无脑订阅导致的一系列麻烦事儿~望谅解。

### [iPhone 蜂窝网络下载限制提升到 200M](https://9to5mac.com/2019/05/31/apple-iphone-cellular-limit-increased/)

[@JimQ](https://github.com/waz0820)：iPhone 蜂窝网络下载限制从 150M 提升到了 200M，上次调整还是在 2017 年 9 月 从 100M 提升到 150M。值得一提的是，并非应用主页上显示超过 200M 就不能使用蜂窝网络下载了，只要经 App Store 压缩瘦身之后的应用大小不超过 200M 这个阈值都是可以下载的。

## 文章

### 🌟 🐎 [开启 Cocoapods 新选项，加快项目索引速度](https://kemchenj.github.io/2019-05-31/)

[@红纸](https://github.com/nianran)：来自编辑部[@四娘](kemchenj.github.io)关于 Cocoapods 1.7.0 的踩坑作品。其主要内容如下：

1. 生成多个 Xcodeproj，在 Podfile 文件中可以加入 **generate_multiple_pod_projects** 选项，开启时，生成多个 Project 嵌套在 Pods 这个顶级 Project中，未开启的状态为一个 Project 对应多 Target。据[@四娘](kemchenj.github.io)考察这种方式所有的 Item 都会按照类别存放到各自的 section 里，最终在项目的结构树里会以引用的形式呈现，从而加快了索引速度。
2. 在 Podfile 中 install! 函数只能调用一次，其函数是一个配置函数，仅保留最后一次的配置结果
3. Swift 版本控制和生成多个 Xcodeproj 会有冲突，因为生成多个后，项目结构会发生改变  post_install 函数中 installer.pod_target 就没办法获取所有 pods 引入的 Target
4. 在使用 Pod 时，我们可以去利用 **pry** 去调试 Pod 程序，简单易懂（如果想更好的去调试的话，建议直接调用 **Pod::Command.run(%w(#{你要调试的命令，eg install}))**，可以一步步去断点调试到每一个函数的执行。）

### 🌟 🐢 [Preparing a code base for WWDC](https://wwdcbysundell.com/2019/preparing-a-code-base/)

WWDC 马上就要到了，显然我们目前还并不知道会苹果具体会发布什么，但根据以往的经验，肯定会带来一些新的技术点，以及废弃一些老的 API 等等。所以我们依然可以提前为即将到来的 WWDC 做一些准备，如：

- 去除一些老的 Warnings，它们可能存在很久了。
- 让我们的工程结构更加的解耦，以避免像之前苹果废弃 UIWebView 时候替换 WKWebView 所带来的巨大的工作量。
- 适当做一些单元测试和 UI 测试，这样能让我们更加从容面对新的 API 或者代码更改。
- 大的项目基本都会或多或少有一些三方库在里面，所以在 WWDC 之前，可以做一些依赖项检查，了解它们内部工作的原理，这样在新版本升级时候遇到问题我们可以更好的去处理。
- 使用一些最新的 API ，相信很多同学已经听说过今年可能会推出 Dark 模式，所以使用官方最新的 API 是减少以后适配成本的最好方式。

### 🐢 [腾讯新闻前端团队：Flutter Web 初体验](https://mp.weixin.qq.com/s/AlTtvrsRWRLxAbJbs-Y8XA)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：flutter_web 发布有一段时间了，业内对其褒贬不一，但不管如何 Google 在持续的推动，在 flutter 1.5.4 以后的版本已经做到 Write once，Run everywhere , 同一份 flutter 代码可以在不做任何修改和适配的情况下同时运行在 iOS，Android，Web，Desktop。所以不管从哪个角度看，flutter_web 都是一门值得探索的技术。

[本文](https://mp.weixin.qq.com/s/AlTtvrsRWRLxAbJbs-Y8XA)由腾讯新闻前端团队推出，可以说是手摸手教你从零开始使用 flutter 来开发 web 前端应用。

### 🐎 [Ordered Collection Diffing](https://thoughtbot.com/blog/ordered-collection-diffing)

[@anotheren](https://github.com/anotheren)：SE-0240 为 `Collection` 带来了新的一个新的方法 `difference(from:)`。就如同方法名本身，这个方法能够高效地处理集合之间的差异。本文以 `UITableView` 的数据更新为例，简明展示了这个新 API 的使用方法。目前这个提案的状态已经更新为 `Implemented (Swift 5.1)`，相信本周的新 Xcode 就能使用了，不要忘了试一试。

### 🐕 🚧 [Migrating to Codable from a third party parsing library](https://medium.com/@elenipapanikolo/migrating-to-codable-from-a-third-party-parsing-library-fd85298ef5a2)

[极速男孩007](https://github.com/ztlyyznf001)：在 Swift4 中，苹果引入了 Codable 协议。本文以 [Argo](https://github.com/thoughtbot/Argo) 为例子，介绍了如何从第三方 JSON 解析库迁移到 Codable 协议中。本文主要通过实现 init(from decoder: Decoder) 和 decode(_ json: JSON) 这两个协议，并且让 JSON 对象遵循这个协议，使得对象即可以通过 Argo 也可以通过 Codable 去解析。

### 🐎 [Understanding Compilers – featuring Swift! ](https://www.prolificinteractive.com/2019/05/18/understanding-compilers-featuring-swift/)

[@莲叔](https://weibo.com/aaaron7)：本文以 Swift 为例，科普了编译器和解释器的区别以及编译器的主要组成部分，文中比较有价值的观点就是对于 Swift 这样一门比较新、语法也相对复杂的语音，对编译过程有所了解的确是可以对日常开发也有帮助。建议如果不了解相关知识的同学们可以看看，不过近些年编译器相关的文章并不少，横向比较下来看本文并没什么新东西，大佬可以略过。

### 🐕 [Refactoring iOS app with Coordinator Pattern for Navigation](https://medium.com/swift2go/refactoring-ios-app-with-coordinator-pattern-for-navigation-alfian-losari-50081bfa7a4a)

[@老驴](https://github.com/olddonkey)：这篇文章的作者从一个实际项目出发，介绍了如何使用 Coordinator Pattern 来对项目中的 View Controller 进行解耦，有兴趣的话也可以自己动手试一试。

前两年的有一段时间，这类库和这类设计思路盛行过一段时间，后来都逐渐没有了声音。倒不是这类库不好，而是在实际应用过程中，设计中的过度解耦会给项目编写带来不必要的麻烦，所以在应用过程中应该结合自己项目的情况进行考虑。解耦但不要过度解耦，才是应用的正确之道。

### 🐕 [技术清谈【008期】【代号：超人】](https://github.com/ChenYilong/iOSInterviewQuestions/issues/124)

[@小T](https://github.com/tom510230)：这是著名 iOS 程序员 [ChenYilong](https://github.com/ChenYilong) 整理的技术清谈话题，稍微看了一下 issue 列表，基本都属于要对底层实现或者 Swift 源码实现比较了解的话题。如果功利来说，属于面试不会问，工作中也很难遇到的场景，当然如果你是 sunny 组内的同学或者专业做 iOS 底层技术研究的同学除外。总体而言，issue 里面的问题都值得推敲一下，对于提升 iOS 技术都有很大的帮助。很多时候，解决方案不一定就是目标，可能在寻找解决方案的路上就已经学到了很多。

### 🐢 [深入了解 Swift 中的初始化（Initialization）](https://juejin.im/post/5ceb82056fb9a07efe2d9aab)

[@四娘](kemchenj.github.io)：类型安全是 Swift 的一大特点，其中一个表现就是初始化的确定性，只要一个实例完成了初始化过程，它的属性就必然初始化完成，不会处在不确定的状态。

这篇文章的作者总结了自己对于初始化过程的了解，加上一些更加接地气的例子和练习，如果有同学对于这一部分知识还比较模糊的话，推荐一看。

## 工具

### [Stride - 跨平台的 Swift IDE](https://github.com/pmacro/Stride)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Stride 是 Swift 开发的跨平台 IDE, 它是自托管的，您可以编辑、构建和运行。目前仅支持 macOS 和 Linux，但在目前的替代品有限的状态下，它是有用且可用的。尽管目前依然处于早期阶段，还有很多调试尚未实现，但如果您很感兴趣，可以在[Twitter](https://twitter.com/saniceadonut)上关注作者，以获得 Stride 的进度更新，或者您也可以参与其中，贡献自己的一份力量。

### [launchaco](https://www.launchaco.com)

[@张嘉夫](https://github.com/josephchang10)：为创业项目快速生成产品宣传网站，包括快速构建自适应网站、利用 AI 设计图标、域名查询及注册的在线工具。

## 代码

### 🐎 [XCTAssertAutolayout](https://github.com/tarunon/XCTAssertAutolayout)

[@jimq](https://github.com/waz0820)：通过封装 XCTAssertAutolayout 断言为 autolayout 提供测试用例，仅支持 Swift。
原理是 hook UIViewAlertForUnsatisfiableConstraints 获取有歧义的约束，以此作为断言失败的依据。有 UI 测试需求的朋友推荐试用。

## 内推

老司机周报团队联合知识小集和 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）
