# 老司机 iOS 周报 #30 | 2018-08-06

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

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

## 新闻

### [新变化不多，但最新的 iOS 12 「剧透」了今年可能发布的新硬件 | 具透](https://sspai.com/post/45936)

在 iOS 12 的第四个公开测试版中，苹果可透露了不少新硬件的信息：比如支持双卡双待的 iPhone；支持 Face ID 的 iPad；支持无线充电的 AirPods 充电盒；以及 HomePod 将支持打电话。其他软件方面的改动也不少，具体还是仔细看看原文。当然，如果你问我自己能否瞧瞧固件里的秘密，[IDA](https://www.hex-rays.com) 和 [Hopper](https://www.hopperapp.com) 了解一下。

## 文章

### 🐕 [Swift 4 弱引用实现](https://swift.gg/2018/08/02/swift-4-weak-references/)

> 原文作者 Mike Ash，是知名博客 [Friday Q&A](https://www.mikeash.com/pyblog/) 作者，现在是 Swift 团队一员。

2015 年的时候 Mike Ash 就已经介绍过 Swift 弱引用的实现了，这次 Swift 4.0 的对象内存布局做了一些调整，加入了 side table 去存放额外的对象信息，改变了弱引用的实现。文章还对 Objective-C 和 Swift 4 之前的旧实现做了对比分析。

### 🐕 [如何在几十个 Repo 中游刃有余](https://mp.weixin.qq.com/s/jyURunuToRyLwOFyeMrcQA)

本文对“研发效率”这个话题进行了非常深入的讨论，平时我们为了提升研发效率，会开发一些脚手架，工程模板等，但大多数时候都不会有量化指标去衡量，秉承“不谈目标的优化都是耍流氓”的原则，作者提出了一系列衡量项目迭代和发布时间的指标，来帮助衡量优化的目标。除此之外，还探讨了在复杂系统开发中保持高效开发的经验，很有价值。专注研发效能、工程架构的同学可以重点参考。

另外，作者陈天也是我很喜欢的程序员，经常会发表一些质量很高的技术文章，推荐大家关注他的公众号。


### 🐕 [MessageThrottle Safety](http://yulingtianxia.com/blog/2018/07/31/MessageThrottle-Safety/)

[MessageThrottle](https://github.com/yulingtianxia/MessageThrottle) 是作者玉令天下开发的 Objective-C 节流限频组件，其原理基于 Hook 消息转发流程，在运行时应用了一套节流限频的规则。本文介绍了新版本中对于 hook 流程、多线程操作、规则管理的安全性实现细节。
本文是关于 MessageThrottle 的第四篇文章。前三篇如下：
- [Objective-C Message Throttle and Debounce](http://yulingtianxia.com/blog/2017/11/05/Objective-C-Message-Throttle-and-Debounce/)
- [Associated Object 与 Dealloc](http://yulingtianxia.com/blog/2017/12/15/Associated-Object-and-Dealloc/)
- [MessageThrottle Performance Benchmark and Optimization](http://yulingtianxia.com/blog/2018/05/31/MessageThrottle-Performance-Benchmark-and-Optimization/)

### 🐎 [Structuring Swift code](https://www.swiftbysundell.com/posts/structuring-swift-code)

随着时间的流逝，几乎所有的 app 和框架都会变得更大、更复杂，所以维持一个稳定的、一致的架构就变得非常关键。这篇文章介绍了提升 Swift 项目架构的几个小技巧，包括"三个原则"（如果有三个相同类型的类、文件夹或文件，就将它们组合起来）、根据功能来组织架构的原则以及"侦查原则"（在改动代码库的时候时刻让文件处于更容易找到的位置）。

### 🐕 [Flutter 的编译模式](https://mp.weixin.qq.com/s/O4Yws6KUc1O6q-yzRPRPJA)

Flutter 在 Google I/O 之后也算是火了一把，虽然之后能不能继续火下去也还是个未知，但是能多学习了解新东西总是有益无害。

蚂蚁金服的 stephenwzl 在自己的微信公众号写了一系列关于 Flutter 基础知识的文章，对于还在学习 Flutter 的人来说，比较有学习价值。

本文介绍了 Flutter 编译中的一些基本概念，阐释了基本的编译过程和不同平台上的区别。除了这篇文章，还可以参考学习一下他的其他文章。

### 🐎 [Migrating an Objective-C class to Swift: a piecemeal approach](https://oleb.net/2018/objc-swift-transition/)

随着 Swift 越来越普及，很多人都会面临如何将 Swift 与已有的 OC 代码相结合的问题。对于一个已有的 OC 类，如果我们无法马上把它完全用 Swift 来重写，但是又想用 Swift 为它扩展功能，特别是添加不兼容于 OC 的存储属性（如带泛型的枚举类型），我们是无法把这个属性直接加到 OC 类定义里的。作者巧妙地做了一层简单的封装，轻松绕过了这个限制，相信对大家处理类似问题会有启发。

### 🐕 [Never](https://nshipster.com/never/)

**Never** 是 Swift 标准库中一个很特别的类型。在 [SE-0102](https://github.com/apple/swift-evolution/blob/master/proposals/0102-noreturn-bottom-type.md) 中提出用 **Never** 去代替 **@noreturn**。在文中 Mattt 先介绍了 **Never** 这个特殊的类型是什么，紧接着以 `Result<Value, Error: Swift.Error>` 为例介绍了一个 **Never**  用于解决不可能发生的场景的实际应用的妙处。最后在文章的末尾，Mattt 还写了一些对未来的 Swift 中 **Never** 可以以一个 **Bottom Type** 的角色去实现更多的功能的期待。

### 🐕 [JSON Web Token 入门教程](http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html)

JSON Web Token（缩写 JWT）是目前最流行的跨域认证解决方案，本文主要是介绍它的原理和用法。

对于用户认证来说，用户的 session 数据如果存在服务端，那对于服务器集群，或者是跨域的服务导向架构。session 数据的共享，会是一个比较麻烦的问题。 JWT 方案则是将不可篡改的 session 数据储存到客户端，每次请求再将 session 数据发回给服务端进行用户认证。不同服务器之间，不再需要进行 session 数据共享，比较容易实现扩展。

### 🐎 [Scrollable UIStackView](https://blog.alltheflow.com/scrollable-uistackview/)

对 UIScrollView 进行自动布局(Auto Layout)时需要设置两套约束，分别是 frame 和 content。设置 frame 很简单，跟普通的 view 操作一样；但是 content 就比较特殊了，自动布局引擎会通过子视图的大小自动调整 content，所以加到 UIScrollView 里的视图必须是已经指定大小或者能自动计算大小（intrinsic content size）的。

本文主要解释了把 UIStackView 加到 UIScrollView 进行自动布局时出现的一些棘手的问题，并实现了一个可滚动的高度自适应的 StackView。相信大家看完后，对如何使用自动布局处理滚动视图会有一个比较清晰的认识。

## 代码

### [PerfectAccelerators - 加速 Perfect Server Side Swift 开发](https://github.com/PerfectAccelerators/PerfectAccelerators.github.io)

上期我们推荐了篇文章[介绍 Perfect 开发体验](http://posts.enumsblog.com/posts/18014)，这次，给大家推荐一组 Perfect 封装库，可以帮助 Perfect 加速 Server Side Swift 开发。

## 音视频

### [ADDC 2018](https://www.youtube.com/playlist?list=PLwR4QwnnbBuLHBfsD0Spj6hAcI4yT3uib)

ADDC 是 2018 年 7 月 4 日至 6 日在西班牙巴塞罗那举办的 App 设计师和开发者大会，这个大会的目的是给设计师和开发者提供一个开放的、包容的、合作的空间，让他们在一起碰撞想法，找到新的合作方式。ADDC 请到的嘉宾都是移动 app 领域的顶级开发者和设计师，这个 YouTube 频道收录了他们精彩的、具有启发性的演讲。

## 内推
### [北京-拉勾网招聘 iOS 工程师](https://www.lagou.com/jobs/3301073.html)
拉勾团队目前需要一枚 iOS 大牛，负责公司核心产品功能的开发和维护。

### [北京-蚂蚁金服 招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 了解更多公司及岗位信息。

## 关注我们

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

![](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)，[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）
