# 老司机 iOS 周报 #4 | 2018-01-22

![ios-weekly](../assets/ios-weekly.png)

进行了四期的周报编辑后，目前参与编辑稳定在 7 个人。看到挺多人表示希望我们能够坚持下去，现在我们每人平均花几个小时就足够维护周报的内容，继续做下去应该问题不大。

欢迎来自百度的[@折腾范儿_味精](http://weibo.com/agvicking)加入我们的编辑团队。

感谢来自饿了么的[@mmoaay](https://weibo.com/u/1302422271)为老司机画的 logo，真是 666。

## 新闻

### [库克：将允许 iPhone 6 / 6s / 7 手动解除降速](http://digi.163.com/18/0119/06/D8G91D3R001680N8.html)

持续发酵的苹果电池降频门，苹果再退一步。库克接受采访时表示会在系统中增加一项设置，用户可以禁用苹果为了保护电池而设的降频策略。最新的 11.2.5 测试版中已经可以查看电池状况。

### [微信打赏功能将在 iOS 上回归](http://tech.sina.com.cn/i/2018-01-16/doc-ifyqqieu6753280.shtml)

在「微信公开课 Pro」的主题演讲中，张小龙表示打赏功能将回归，并将修改打赏机制，打赏金额将直接支付给内容创作者。

### [Apple 更新 App Store 网页预览界面](https://itunes.apple.com/cn/app/id911261462)

Apple 在 iOS 11 中对 App Store 进行重新设计，现在终于对网页版动刀，跟上 iOS 上的简洁和卡片式风格。

### [苹果预计下周修正文字讯息漏洞「ChaiOS」](https://cn.engadget.com/2018/01/18/apple-fix-for-chaios-bug-next-week-imessage/)

跟之前的 iMessage 漏洞类似，收到一个特殊链接的短信之后，设备就会重启，主要是因为 iMessage 会自动加载网页信息生成预览界面，在这一个网页里嵌入几十万个不必要的字符就可以系统崩溃，[据悉这个 bug 已经在 iOS 11.2.5 beta 6 里修复了。](http://www.idownloadblog.com/2018/01/18/ios-11-2-5-beta-6-fixes-the-chaios-text-bomb-messages-bug/)

## 文章
### [蜂鸟商家版 iOS 组件化 / 模块化实践总结](https://juejin.im/post/5a620cf5f265da3e36415764)

文章详实介绍了饿了么物流移动 iOS 开发组的 Swift / OC 混编项目「蜂鸟商家版」进行组件化 / 模块化改造的实践历程，有类似需要的同学可以参考一下。

### [iPhone X home button]( http://blog.zats.io/2017/12/27/iPhone-X-home-button)

iPhone X 用来替换物理 home 键的虚拟 home indicator，可能展示在任何一个 view 上，也展示在锁屏界面上，home indicator 背景颜色会根据背后展示的 view 而改变。这是怎么实现的呢？Sash Zats 深入底层来揭示秘密。

### [从 Aspects 源码中我学到了什么](https://lision.me/aspects/)

作者分享了自己阅读 Aspects 代码之后的收获，另外博客里还有几篇 YYKit 的源码阅读分享，质量都很高。

### [iOS 如何进行网络测速](https://juejin.im/post/5a62c2416fb9a01ca713893d)

[@Joy_xx](https://weibo.com/u/5419850564) 大佬的文章，主要分享了两种常见的网络测速方案。文章内容简短，只谈思路，不涉及技术细节。想做网络测速又没有思路的童鞋可以看看。

### [Useful Optional Extensions](https://appventure.me/2018/01/10/optional-extensions/?utm_campaign=Revue%20newsletter&utm_medium=Newsletter&utm_source=AppCoda%20Weekly)

文章分享了各种 `Optional` 的实用扩展。通过这些扩展，可以用更少的代码来实现判断非空、设置默认值、设置默认行为、处理异常、定义多个可选值之间的关系、判断执行以及条件过滤等功能。文章末尾还给了一个例子，通过代码对比的方式，鼓励大家使用扩展 `Optional` 的方式来实现业务逻辑。

### [WebAssembly 的那些事](https://mp.weixin.qq.com/s/lFqvdBvusCcndoBK0-U7kg)
文章介绍了 WebAssembly 这门在浏览器里跑编译后的字节码的神奇技术，可以把 C++ / Rust 编译成字节码下发给浏览器，进行高效的字节码运行，而非传统 JS 解释执行。文章还手把手教你亲自写一个 C，先编译成 asm.js，在生成 wasm 文件执行，也教你把Rust，编译成 wasm 执行。

### [objc - 编译 Runtime 源码 objc4-680](http://blog.csdn.net/wotors/article/details/52489464)  [objc - 编译 Runtime 源码 objc4-706](http://blog.csdn.net/wotors/article/details/54426316)

> 从苹果开源网站上，我们可以找到很多有意思的开源项目。objc4 是其中一个，也即我们通常说的 Runtime 源码，我们遇到的 `libobjc.A.dylib` 就是用它编译出来的。

这两篇文章就是介绍如何将从苹果网站上下载的 Runtime 源码，创建工程进行编译，运行，调试，从而更深刻的学习和理解 Runtime 源代码的，并且文章中留有作者的 GitHub 可以直接下载可编译版的 2 套源码。

### [WKWebView 强大的新特性](http://www.cnblogs.com/zhanggui/p/8260136.html)

越来越多的项目逐渐开始使用 WKWebView 进行网页展示，是否苦恼于 WKWebView 对于操作 Cookie 的天坑以及不支持 NSURLProtocol 的弊端？这篇文章介绍了 iOS11 的新 API 为你解决了这些问题，不仅包括操作 Cookie 的 `WKHTTPCookieStore`，处理自定义协议的 `WKURLSchemeHandler`，还有用于广告屏蔽的新 API `WKContentRuleList`。

### [Building for the Blockchain（面向区块链开发）](https://zhuanlan.zhihu.com/p/32914619?iam=7a313be561811283ea95625f373cdd99)

> 在区块链上，你不需要部署任何中心化的服务器，这就意味着单点失败的风险为零。如果你的整个技术栈都是去中心化的，那么就不需要引入“可信”的第三方，而没有第三方则意味着可以 100% 对抗审查。区块链技术带来了数据开放的新机会，基于区块链的去中心化数据库未来可期。

YC 是著名的科技企业孵化机构。发布在 YC 官博上的这篇文章介绍了区块链技术对开发者的意义。


### [给 Bool 扩展一个 Toggle 方法](https://www.objc.io/blog/2018/01/16/toggle-extension-on-bool/)

objc.io 介绍的小技巧，给 `Bool` 扩展一个 `toggle` 方法之后就可以避免 `myVar.prop1.prop2.enabled = !myVar.prop1.prop2.enabled` 这种丑陋的写法了，可以直接写为 `myVar.prop1.prop2.enabled.toggle()`。

并且已经[起草提案](https://github.com/apple/swift-evolution/pull/782/files)给 Swift Evolution 了，这个方法有可能在以后会加入标准库。

### [今日头条算法原理（全）](https://mp.weixin.qq.com/s/DC_hJUbTnLhuCwYVOgVlVw)

今日头条公开了他们推荐算法的原理。介绍了如何做到内容、用户、环境（工作场合、通勤、旅游等不同的场景）的匹配预估。

## 工具

### [CocoaPods 发布 1.4.0](http://blog.cocoapods.org/CocoaPods-1.4.0/)

CocoaPods 发布了 1.4.0，带来了很多强大的功能。如下：

- **Test specs 支持配置 App host**；
- **脚本配置** 支持 Podfile 和 Podspec 配置脚本，CocoaPods 会根据你在Podfile 和 Podspec 的关联脚本描述，自动添加相关脚本到不同的Target；
- **支持静态库** 使用 `use_frameworks!` 同时支持 static framework 和 dynamic framework。只要开源库的作者在 podspec 文件中添加 `s.static_framework = true`，CocoaPods 就会把这个库配置成static framework。同时支持 Swift 和 Objective-C；
- **Podspec 文件可以配置 Swift 的版本号**；
- **过渡到https** 当你发布一个 Pod 不支持 https 的时候，会有一个警告。在未来的某个版本，将不再支持不支持 https 的 Pod。

### [Design+Code](https://itunes.apple.com/cn/app/design-code/id1281776514?mt=8)

Design+Code 是一个教你从零开始设计、开发一款 App 直到在 App Store 上架的 iOS App，不需要任何编程基础。其中包括 iOS 11 的设计理论例如颜色、动画以及为 iPhone X 进行适配等，少见的设计和开发兼具的交互式教学工具，值得一试。

### [cocoapods-packager](https://github.com/CocoaPods/cocoapods-packager)

CocoaPods 官方工具，可以根据现有的 podspec 生成 framework 或 static library，给我们的 Pods 库发布工作带来了更多选择和想象空间。

## 代码

### [SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults)

利用 `NSUserDefaults` 存储一些数据在开发中是常用的事。但是每次存取都依赖于字符串类型的 key、类型也不校验，在实际开发中也带来了不小困扰。这个库利用 Swift 的枚举和泛型优化了 `NSUserDefaults` 的使用体验，思路值得借鉴。

### [Turi Create](https://github.com/apple/turicreate)

「Turi Create」是 Apple 的机器学习框架，目前已经开源在 Github 上。它简化了定制机器学习模型的开发。就算你不是一个机器学习专家，也可以在你的应用中添加建议、对象检测、图像分类、图像相似性或活动分类。让开发者更容易的构建机器学习模型。

## 书

### [objc.io 新书「App Architecture」](https://www.objc.io/books/app-architecture/)

本书预计四月完成，但提供「早鸟」版购买，每周可以收到新内容。

## 音视频

### [Swift Unwrapped #42 Conditional Conformance](https://spec.fm/podcasts/swift-unwrapped/105029)

这期很简短，只是简单地聊了一下，之前 Ole 大神发过一篇文章讲了如何查看 Swift 源码，里面讲到了一个代码生成工具 gyb，主要是为了解决 Swift 泛型能力不足的问题，现在实现了 Conditional Conformance 之后就可以重构掉之前很大一部分 gyb 代码。并且**单单只是重构掉 Slice 类型，就已经让 Swift 标准库的二进制文件缩小了 5% 😱**，真是越来越期待 Swift 4.1 的发布了！！！

另外 Swift 的博客还发布了[一篇文章](https://swift.org/blog/conditional-conformance/)专门讲解这个功能，有兴趣的人可以去看看。

## 内推

### [淘宝 - Weex 内核研发技术专家 - 基础平台部](https://job.alibaba.com/zhaopin/job_detail.htm?refNo=GP041921)

Weex 的价值在阿里集团已经得到高度认可。weex 下一步计划是利用 C++ 重写内核。

简历可发送至 zifan.zx@alibaba-inc.com。

### [阿里巴巴 - 国际技术事业部 - ICBU 技术部 - iOS 高级开发工程](https://job.alibaba.com/zhaopin/position_detail.htm?positionId=38653)

国际事业部在杭州滨江，发展迅速非常缺人。

感兴趣的可以简历发送到曾宪华的邮箱：xianhua.zxh@alibaba-inc.com。

### [CSDN 亟需前端开发和后端好手加盟，一起打造程序员新社区](https://weibo.com/1355610915/FEUpVkafe?type=comment#_rnd1516518085805)

> @蒋涛: 老社区的技术债负担不轻，亟需技术开发前端和后端好手加盟 CSDN，一起打造程序员新社区。

## 本期编辑

[@没故事的卓同学](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)，[@折腾范儿_味精](http://weibo.com/agvicking)

## 说明

🚧 表示需翻墙
