# 老司机 iOS 周报 #2 | 2018-01-08

老司机 iOS 周报，只为你呈现有价值的信息。

## 新闻

### [TIOBE 2017年度语言揭晓：哦，我的上帝，是古老的 C](https://www.tiobe.com/tiobe-index/)

今年 C 语言并没有很强势，只是也没有其他增长很突出的语言，C 的增长率 1.69% 就成为了佼佼者。亚军是 Python ，增长了 1.21%。

2018 年 1 月的排行中，Swift 排名 12，OC 18，相比去年略有提升。

### [集成 iCloud、Passbook 或订阅类 iAP 将导致 App 无法转移](https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/TransferringAndDeletingApps.html)

集成过 iCloud, Passbook 或订阅类 iAP 将导致 App 无法转移到别的开发者帐号，即使之前集成过，新版禁用也不行。

### [Apple 拿下 iPhone X 外形设计专利](http://www.patentlyapple.com/patently-apple/2018/01/apple-wins-patent-for-iphone-x-design-and-carplay-with-turn-by-turn-navigation.html)

美国专利商标局报告显示，苹果已经拿到了 iPhone X 的外形设计专利。不过据最新报道，此专利并非针对「刘海」造型提出，而是著重边框上的按键、天线断点、扬声器等处细节。另外，iPhone X 的「刘海」部分集成了多达 8 个传感器(比 iPhone 8 多 3 个)，分别是红外镜头、泛光感应元件、点阵投影器。

### [让所有科技巨头“焦头烂额”的intel漏洞是什么](https://zhuanlan.zhihu.com/p/32679604)

Intel CPU 爆出史上最大漏洞。腾讯安全联合实验室的[这篇回答](https://www.zhihu.com/question/265012502/answer/290018306)详细的介绍了漏洞的原理和影响。

## 文章

### [程序员如何在技术浪潮的更迭中保持较高的成长速度 ](https://juejin.im/post/5a4e296e51882573315c2917)

冰霜的 17 年总结，标题改成《我是如何从霜菜到霜神》也不为过。技术人员都要面对如何成长的问题，冰霜在文章中结合自身介绍了他是如何进行高效学习的，值得借鉴思考。

### [QUIC 协议初探 - iOS实践](https://mp.weixin.qq.com/s/NbewZ1NU49qSjIcdFrpotw)

QUIC（Quick UDP Internet Connections）是基于 UDP 的 WEB 开发协议 `TCP + TLS + HTTP2 = UDP + QUIC + HTTP2’s API`，由 Google 开发，希望其取代 TCP，加快网页传输速度。还计划提交至 IETF，成为下一代的正式网络规范。文中详细介绍了 iOS 平台下集成方式及与 HTTP2 的对比数据。

### [Basics of parallel programming with Swift](https://medium.com/flawless-app-stories/basics-of-parallel-programming-with-swift-93fee8425287) 🚧

非常详细的介绍了 Swift 中并发编程涉及到的概念，你值得拥有。

### [如何实现 React Native 里的页面导航系统](http://tech.glowing.com/cn/all-about-routing-and-navigation-in-react-native/)

RN 的导航和跳转一直是一个需要解决的问题。作者总结对比了现有的几个开源方案，并阐述了自己的解决思路。

### [阮一峰：比特币入门教程](http://www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html)

数字货币已经成为新的风口。文章从技术角度通俗易懂的介绍了比特币的技术原理及基本概念。

### [Detecting screen capturing in iOS 11](https://medium.com/@abhimuralidharan/detecting-screen-capturing-in-ios-11-cca15881c785)

随着教育、娱乐等领域付费视频服务的兴起，怎样防止付费内容的流失与传播成为了一个很重要的问题，本文详细阐述并演示了如何在 iOS 11 上实现对用户屏幕录制或镜像操作进行侦测的方法，值得一看。

## 工具

### [App Sight](https://www.appsight.io)

查看主流 app 都用了哪些第三方服务和 SDK 。

## 代码

### [Kickstarter 开源了他们的客户端](https://github.com/kickstarter/ios-oss)

Kickstarter 开源了他们的客户端代码，里面有非常多可以学习的内容，例如：

- **AppEnviroment 的抽象**：所有状态都用一个全局的 `Enviroment` 去保存，包括了缓存，设备状态，用户等等，有了这一个抽象的存在就意味着测试时可以随意模拟和切换状态，在测试和监控复现 bug 时非常有用。
- **可运行的文档**：使用 Playground 去搭建 API 文档，UI 的格式可以通过 PlaygroundLiveView 即时查看，构建出了一个类 REPL 的调试环境出来。并且每次 pull request 也会尝试编译 playground 里的代码，如果 API 进行了修改，那就让我们知道该更新文档了。美中不足是目前 Playground 对于 framework 的支持很一般，我们使用 Carthage 或者 Cocoapods 的话需要做很多 setup 才行。
- ...

相关资料：
- [Kickstarter 工程师参与的一期 Swift Talk](https://talk.objc.io/episodes/S01E47-view-models-at-kickstarter)
- 在 Kickstarter-iOS 源码中学到的 [（一）工程相关](https://zhaoxinyu.me/2017-07-08-ios-oss-1/)[（二）代码相关](https://zhaoxinyu.me/2017-07-09-ios-oss-2/)

### [RxFlow](https://github.com/RxSwiftCommunity/RxFlow)

RxSwift 社区推出的基于 Coordinator 模式的响应式导航框架。

### [LSAnimator](https://github.com/Lision/LSAnimator) by [Lision](https://weibo.com/u/5071795354)

基于多维链表实现的 iOS 链式动画库，相比业界另外一个知名 Swift 动画库 [IBAnimatable](https://github.com/IBAnimatable/IBAnimatable)，有如下特性：

- 支持多链式动画，并发执行多条动画链；
- 每个动画节点采用 `CAAnimationGroup` 实现，从而支持单动画节点复合动画；
- 提供 OC 版；
- 侧重于对动画的深度定制。

### [OOMDetector](https://github.com/Tencent/OOMDetector)

OOMDetector 是腾讯开源的一个 iOS 内存监控组件，应用此组件可以帮助你轻松实现 OOM 监控、大内存分配监控、内存泄漏检测等功能：

- OOM 监控：监控 OOM，Dump 引起爆内存的堆栈；
- 大内存分配监控：监控单次大块内存分配，提供分配堆栈信息；
- 内存泄漏检测：可检测 OC 对象、Malloc 堆内存泄漏，提供泄漏堆栈信息。

### [DeepDiff](https://github.com/onmyway133/DeepDiff)

大家在工作中应该经常遇到数据集合更新，然后我们手动 diff 之后刷新 TableView 的情况，但这样的代码重复也容易出错。

DeepDiff 这个框架把这个过程地封装了起来。只要我们直接传入旧的集合和新的集合，然后把 diff 的结果交给 TableView 直接刷新就可以了，下面是代码示例：

```swift
let changes = diff(
    old: oldItems, 
    new: newItems, 
    reduceMove: true
)

tableView.reload(changes: changes, completion: { _ in })
```

并且它在性能方面的表现也很棒，官方的介绍页里有一个简单的性能对比，排名第一。

### [quicktype](https://github.com/quicktype/quicktype-xcode)

quicktype 可以根据给出的 JSON 数据推断出数据类型，然后输出具体的类型模型，支持 Swift、C++、Go、Java、C# 等语言。支持 Xcode 9，使用得当可以给我们的开发带来一定的便利。

## 书

### [音视频开发进阶指南：基于Android与iOS平台的实践](https://www.amazon.cn/gp/product/B078PFKS38)

作者是唱吧的音视频架构师。全面的介绍了音视频开发的基础知识，也结合了移动开发的相关技术（FFmpeg、OpenGL ES）进行了介绍。

## 音视频

### [阿尔法狗 AlphaGo 2017](https://www.youtube.com/watch?v=9UewW8sF4gs) 🚧 

阿尔法狗(AlphaGo)官方纪录片，全方位展示了人机大战的过程，更尽可能多地揭示了人类思维和未来人工智能的工作方式。

### [Testing in iOS](https://videos.raywenderlich.com/courses/105-testing-in-ios/lessons/1?_ga=2.95277404.1190247701.1515328410-485821952.1502437076)

raywenderlich 的付费视频课程（第一部分可以免费观看）。视频课程分为：单元测试基本概念、单元测试实战和 UI 测试实战三个部分。

## 本期编辑

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

## 微信打赏

感谢您的支持。

![微信支付](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/payment.jpeg)

## 说明

🚧 表示需翻墙
