# 老司机 iOS 周报 #31 | 2018-08-13

![ios-weekly](../assets/ios-weekly.png)
老司机 iOS 周报，只为你呈现有价值的信息。

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

## 新闻

### [备受 iOS 开发者喜爱的 raywenderlich 社区全新改版！](https://www.raywenderlich.com/6646-welcome-to-the-new-raywenderlich-com)

raywenderlich 这次进行大改版，为开发者提供更为优质的教程。此次更新主要有：

- 教程将全部按照主题分类，目前已经有 [iOS & Swift tutorials](https://www.raywenderlich.com/ios)、[Android & Kotlin tutorials](https://www.raywenderlich.com/android)、[Unity tutorials](https://www.raywenderlich.com/unity) 以及 [Unreal Engine tutorials](https://www.raywenderlich.com/unreal-engine) 四大类，未来 rw 也将继续增加新的分类；
- 每个分类都会有自己的主页，可以帮助你更快地找到自己所需要的教程；
- 全新的学习路径规划，真正实现从『入门』到『精通』；
- 个人主页上线，掌控自己的学习进度；
- 教程库，成千上万的教程资源供你筛选；

### [WWDC 2018 视频已经全部配上简体中文和日文字幕](https://developer.apple.com/news/?id=08082018a)

在早些时候，苹果已经为所有视频配上了英文字幕，仅少部分视频有中文字幕，这次全部都已配上简体中文和日文字幕。相比去年第一次有中文字幕，今年的又额外增加了日文字幕，看来日语区的 Apple 开发者也不少。如果你对之前的看的某个 Session 还有疑问，不如趁着中文字幕上线的热乎劲再回顾一遍。

### [Dart 重启！Dart 2 正式发布，目标成为移动与 Web 开发主流语言](https://mp.weixin.qq.com/s/7h9MLe9YJn0VmZ9Rsni-KA)

Google Dart 产品经理宣布 Dart 2 正式发布，这标志着 Dart 语言的重启，目标成为主流的移动和 Web 开发语言。同时，Google 还宣布重构 Dart Web 平台，这对开发者来说，是一个高效率、高性能和可扩展的组合。
Google 称，Dart 2 的目的有三个：优化语言开发，增强 Google 对 Web 和移动框架的支持能力，将 Google 内部的一些支持 Dart 的工具和组件带给外部的开发者。

## 文章

### 🐕 [Guys, REST APIs are not Databases](https://medium.com/@marinithiago/guys-rest-apis-are-not-databases-60db4e1120e4)

作为目前最常见的后端设计风格，REST API 已经成为任何项目中不可缺少的一部分。然而在实际使用的时候，开发者很容易把 REST API 设计成直接对数据库进行操作。

作者在文章中解释了为什么直接对数据库操作是有问题的，同时也给出了自己的对 REST API 设计的一些理解。


### 🐕 [Refactoring Massive App Delegate](http://www.vadimbulavin.com/refactoring-massive-app-delegate/)

每一个 iOS 程序员都需要和 AppDelegate 类打交道，App 生命周期的逻辑一般都会放在这个类中进行处理。该文作者提出了一个“Massive App Delegate”的概念，表示当一个 App 越来越复杂，其 AppDelegate 类也会变得越来越庞大并且难以维护，作者分析了一些有名的开源项目并抽取了一些大家喜欢放在 AppDelegate 类中处理的逻辑列表，并且针对性的提出了三个方向：命令模式，组合模式和中介者模式来更好的组织 AppDelegate 中的代码，很有参考价值。

### 🐕 [Type inference-powered serialization in Swift](https://www.swiftbysundell.com/posts/type-inference-powered-serialization-in-swift)

类型推断是 Swift 作为强类型语言的一个特性。本文介绍了利用泛型实现类型推断简化 Codable 解析 JSON 的操作。阅读本文可以学习到在实践中如何应用泛型。

### 🐢 [面试中的个人竞争力](https://xiaozhuanlan.com/topic/3670248951)

很多人都觉得自己没有竞争力，那相信这篇专栏会戳到你的痛点，找工作是不可能的，这辈子都不可能找工作，算法又不会，原理又不懂，只能做一个 github 的搬运工，才能维持会写代码的样子。

写简历要挑重点，用最简洁的篇幅，展现出你个人独一无二的亮点。面试需要多展现自己的思考过程，思考的深度。但这一切都基于过去的积累，就算是再平凡的工作，也能通过发现问题，探寻本源，自驱优化来锻炼自己，提升竞争力，从而赢得好机会的青睐。

### 🐕 [由 NSObject \*obj = \[\[NSObject alloc\] init\] 引发的一二事儿](https://juejin.im/post/5b63b857e51d455f5f4d1d74)

这是一篇随想类型的文章，由 `[[NSObject alloc] init]` 开始讲起，覆盖了 Objective-C 内存分配、ARC、`@property`、`atomic` 等，看的过程遇到不是很清晰的知识点建议另找资料细读。

### 🐢 [剖析 ARM 64 架构中的 objc_msgSend](https://juejin.im/post/5b67c781e51d4519202e601b)

我们都知道 Objective-C 的"方法调用"其实是消息转发，`[obj foo]` 其实都会转变成 `objc_msgSend` 调用。本文概述了 `objc_msgSend` 内部的代码处理流程，而在具体代码实现层面，整个消息处理流程代码可以分为两个部分：通过汇编代码实现的快速路径部分（fast path），C 语言实现的慢路径流程（slow path）。其中汇编代码对应缓存表中查询方法部分并且未命中时跳转 C 代码来进行下一步处理。本文重点讲了 `arm64` 架构下 `objc_msgSend` 汇编部分指令细节。

### 🐢 [构建流畅的人机交互](https://medium.com/@nathangitter/building-fluid-interfaces-ios-swift-9732bb934bf5)

今年 iOS 花了很大的功夫在优化系统基础体验上，甚至在 WWDC 里专门开一个 session 来讲如何构建流畅的人机交互。这篇文章的作者在看了这个 session 之后有感而发写了这篇文章，在介绍和总结 session 内容的同时，还动手通过代码实现了那些 Design Tips，里面特定交互的最佳实现和动画实现的思路都非常棒，推荐一看。

### 🐕 [血泪总结:如何从微信小程序的坑跳进支付宝小程序的大坑](https://juejin.im/post/5b651e9ee51d4535c7564fd1) 

支付宝小程序也在公测之中，开发者可以自由申请进行体验。不同于微信小程序的社交传播场景，在一些线下支付场景使用支付宝小程序也能获得很多流量，对产品也是大有助益，因为迁移成本低，也是值得尝试。

本文虽说是血泪总结，跳进大坑，但其实从代码的角度来看支付宝小程序的代码规范与API和微信小程序相比，真的是非常非常的近似，只有一些细节的差异。如果你的微信小程序已经很成熟了，那么尝试支付宝小程序将会没有障碍，毕竟微信已经成熟了如果差异很大就没人会用支付宝小程序了。不过终究还存着API差异，如果打算一套代码然后通过前端工程化的方案同时适配2种小程序，那么本文作者踩的这些坑值得关注。

### 🐕 [WubaRN 分步打包流程](https://mp.weixin.qq.com/s/KVDKheeUvaeLwxERcY-nbQ)

用官方命令打出来的 ReactNative(RN) JSBundle 都会带上自身框架代码。如果每个 Bundle 都自带框架代码的话，对于业务模块多的 App 来讲就不是很友好了。所以很多公司都会采取将框架和基础模块代码拆分出来，让所有业务使用同一份基础代码。

本文是 58无线技术 分享的一篇关于 RN 打包的文章，作者按照打包流程来解释他们的 WubaRN 拆分打包的思路，同时也介绍了如何通过缓存来加速打包。还在使用 RN 或对 RN 工程化感兴趣的都可以了解下。

### 🐕 [NLLanguageRecognizer](https://nshipster.com/nllanguagerecognizer/)

在 iOS 12中，苹果开放了更多机器学习的能力给开发者。`NLLanguageRecognizer` 便是其中的一员。本文介绍了如何使用`NLLanguageRecognizer`判断字符串是属于哪种语言，检查拼写错误和合成声音。

### 🐎 [5 分钟教你成为会赚钱的独立开发者](https://juejin.im/post/5b67f69a5188251aaa2d5138)

作者几个月前辞去大公司 iOS 工程师的工作，成为了一名全职独立开发者，目前已经在 App Store 发布了 17 款 app，累计下载量超过 56W 次，其中两款应用被 App Store 多次推荐。作者目前的独立开发月收入已经与辞职之前持平，在这篇文章里他会为你介绍如何把知识直接通过代码变成钱，包括获得创意、建立付费和内购模式、优化 ASO 等等。

## 工具

### [Xcode::Install](https://github.com/krausefx/xcode-install)

Xcode::Install 是一款从命令行更新 Xcode 的工具，它可以帮助你安装并管理多个版本的 Xcode。它使用了 Apple 的 [开发者下载中心](https://developer.apple.com/download/more/) 来查找并下载指定的版本。

### [Knil](https://github.com/ethanhuang13/knil)

Knil 是一款帮助你测试和验证 Universal link 是否有效的工具。在 Knil 中输入对应的 host，它就会帮你把对应的 apple-app-site-association 文件下载到本地，并列出其中的 path 方便你进行测试。可以直接在 App Store 搜索下载 Knil。

## 内推

### [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0)

蚂蚁金服招聘，负责支付宝会员及帐号业务线，地点北京国贸，金台夕照地铁站出口 100 米。虽然招聘链接只给了 iOS 的 JD，但前端/安卓/iOS 都要，要求相近。有兴趣的同学欢迎将简历发送到：weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com （同一个邮箱） 或这微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。

### 编辑内推

- 上海即刻：如果你认识聪明勤奋、胆大心细、有追求的工程师，那就来加入我们吧！任何推荐或简历可直接发给 Jason（即刻 iOS leader）: jasy@okjike.com，或微博 [@JasonYuh](https://weibo.com/jasonyuh)。

- [杭州/广州/深圳 奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html)：奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域， 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感谢可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。

- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D)：如想了解更多深圳头条的信息，可以加小T微信：tomtan，切磋技术和聊情怀都可以喔~~~~

- [字节跳动北京 iOS 团队持续招人中](https://job.toutiao.com/society)：简历可以发送到邮箱 raozhizhen@bytedance.com，或者添加我（[@AidenRao](https://weibo.com/AidenRao)）的微信 jingmu1994 了解更多公司及岗位信息。

- [百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度)：百度教育事业部，地点：北京西二旗。部门下面有百度阅读，百度文库，百度爱听等 App 产品。团队技术氛围浓厚，有兴趣的同学欢迎将简历发送到我的邮箱：lizelei@baidu.com。

## 关注我们

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

![](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)，[@享耳先森](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)，[kyo](https://github.com/KyoLi)，[tom510230](https://xiaozhuanlan.com/u/6682065345)，[anotheren](https://anotheren.com)，[水水](https://www.xuyanlan.com)，[looping](https://github.com/looping)，[@JasonYuh](https://weibo.com/jasonyuh)，[@老老老老老老老驴](https://weibo.com/u/6090610445)

## 说明

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

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