# 老司机 iOS 周报 #24 | 2018-06-25

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

## 新闻

### [《WWDC 17 内参》免费订阅](https://xiaozhuanlan.com/wwdc17)

去年我们组织针对 WWDC 17 的内容写了 25 篇文章，原来售价 39 元，现在免费开放给大家。

### ["iPhone Only" apps on the iPad](https://bendodson.com/weblog/2018/06/20/iphone-only-apps-on-ipad/)

一个不错的消息，在 iOS 12 beta 2 上，你的 iPhone Only 应用程序将会以 16：9 的比例运行。在此之前，尽管 iOS 10 不再支持 iPhone 4S，但你依旧需要让 APP 能以 3：2 的比例运行在 iPad 上。

### [苹果键盘维修计划](https://www.apple.com/cn/support/keyboard-service-program-for-macbook-and-macbook-pro/)

苹果确认 MacBook 的蝶式键盘出质量问题，开启键盘维修计划 ，如果你的苹果笔记本出现了诸如字母或字符意外重复/字母或字符不出现/按键感觉粘滞或按键反馈不一致，并且符合维修计划覆盖的机型范围，请预约去 Genius Bar 进行维修。

### [重磅！Google发布Flutter Release Preview 1](https://mp.weixin.qq.com/s/iF-5Ak1cMI7c8kaeqwbdbg)

在 GMTC 2018 大前端大会上，Google Flutter 高级工程师于潇宣布 Flutter Release Preview 1 发布，这标志着 Flutter 进入了一个新阶段。同期还发布了基于 VSCode 扩展等辅助开发工具。Flutter 一直在不断地进步，并且得到了来自全世界社区的支持。

## 文章

### 🌟 🐢 [ WWDC2018 - 来自一线开发者的技术笔记](https://techblog.toutiao.com/2018/06/19/untitled-49/)

头条客户端团队针对 WWDC 2018 写了 15 篇技术笔记，有些是 [老司机x知识小集xSwiftGG WWDC 18 专题目录](https://juejin.im/post/5b1d284df265da6e572b3d87) 没有覆盖的。可以看看目录挑选自己感兴趣的看看，一定不会让你失望。

### 🌟 🐢 [What’s Next for Mobile at Airbnb](https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c)

对于 `ReactNative` 社区来说，上周两大事件值得关注：Facebook 宣布[对 ReactNative 底层进行重构](https://facebook.github.io/react-native/blog/2018/06/14/state-of-react-native-2018)；Airbnb 宣布放弃 RN 并连发了五篇 blog 来解释。

- [Part 1: React Native at Airbnb](https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c)
讲为什么 Airbnb 在 2016 年决定投入 RN，比如 `比拟原生体验`、`代码可以跨平台`、`提升开发体验` 等。

- [Part 2: The Technology](https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838)
着重写 RN 在技术层面的一些优劣，优势：垮平台、迭代速度、与 Native 代码桥接方便等，劣势方面：因 JS 无类型导致不好重构、JSCore 在双平台的不一致性、App 体积、RN 初始化及首次渲染时间等。

- [Part 3: Building a Cross-Platform Mobile Team](https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88)
从团队管理角度来讲引进 RN 之后带来的一些问题：要用好 RN 开发者还需要懂 Native，这种混合对招聘、测试、迭代都会带来很多挑战。

- [Part 4: Making a Decision on React Native](https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a)
由于 RN 在技术方面的一些问题及对团队带来的挑战不能很好的解决，Airbnb 决定 `Sunset RN`，停止用 RN 开发新功能，逐渐转向 Native。对于开源，他们会将一些项目转到 react-native-community。

- [Part 5: What’s Next for Mobile](https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab)
讲 Airbnb 在移动方向的未来，介绍了 Server-Driven Rendering，还有努力推进的 `Epoxy`、`MvRx` 等项目。

### 🌟 🐢 [On Apple's Love Affair With Swift](https://stefan-lesser.com/2018/06/20/on-apples-love-affair-with-swift/)
标题读起来有点困惑？ 不过这不重要, 文章内容和这个标题关系不大。之前一位名叫 Dominik Wagner 的博主写了一篇 diss Swift 的文章, 本文的作者通过从之前 Chris Lattner 在一个 Podcast 接受采访的观点中有针对性的摘抄了一些，来对 Dominik Wagner 的观点进行了回应。于是有了本文。

Swift 不只是一门多了面向协议能力和静态类型的语言，要了解 Swift 的诗与远方，还是要多看看 Chris 发表的，关于 Swift 的设计的一些观点, 比如这篇博客。里面解答了诸如为什么要发明 Swift，而不是简单把 OC 变得更好等核心问题，当然也包含一些有趣的观点，比如 Chris 说明了 Swift 的 functional 的特性大量参考了 Haskell，这些从 Haskell 参考的概念也成为其他高级特性的基础（如面向协议）。以及 Swift 并不只是成为一门新的 Cocoa 编程语言，而是对标 C 和 Rust，成为更好、更安全的系统编程语言。

笔者看完后竟然有一丝感动，仿佛感受到了 Chris 在设计与迭代这门语言上的思考与倾注的各种努力，通过一个又一个巧妙的方式把种种先进的理念汇集到一起，make things happen。恍惚间觉得什么 ABI 稳定，Playground 崩溃，Source Intellisense 崩溃都是浮云， 这是一门虽然年轻但未来潜力无限的编程语言, Let's make Swift great again!

### 🐕 🚧 [Maintaining Productivity as Engineering Teams Scale](https://medium.com/accel-india-insights/maintaining-productivity-as-engineering-teams-scale-1a821f5add28)

早早的时候《人月神话》里就指出了：往一个延迟的项目里添加人手只会拖慢项目的进度。那么随着业务增长，开发人员也越来越多后要如何保持团队的效率要解决什么问题呢？文章给出了极富建设性的意见。

- 花时间偿还技术债，否则往后会越来越拖累开发进度
- 随着用户的增加，避免工程师陷入解决客服、运营的问题，分散开发精力
- 关注“老人”的价值。随着新同事的加入，“老人”还额外承担了介绍项目情况，说明某个功能对业务的价值。这个过程中要理解“老人”自身的开发进度可能会变慢。
- 技术人员的职能分化，有些人可能倾向于往管理岗发展，有些人适合技术专家方向
- 注重沟通效率。团队人数少于十人的时候什么事在饮水机旁边可能就讨论完了。人数增加后则要注重如何有效的沟通，有的团队也可能都不在一个办公地点。同时这个环节也体现了高质量文档的重要性。

### 🐕 [[译] 怎样（以及为什么要）保持你的 Git 提交记录的整洁](https://juejin.im/post/5b29060ee51d4558cd2adac0)

作者通过日常工作中常用的 4 个 git 使用场景，向读者解释了为什么要保持 Git 提交记录的整洁，以及保持 Git 提交记录的整洁的方法。建议读的时候跟着作者的思路操作一遍，更能加深理解！

### 🐕 [Create ML Tutorial Getting Started](https://www.raywenderlich.com/196233/create-ml-tutorial-getting-started)

Raywenderlich 家出的 Create ML 入门教学，手把手教你用 Craete ML 和 Turi Create 构建一个通过图片分辨猫狗的机器学习模型，体验过一遍以后大家可能对 Create ML 这门框架，并且国内有开发者已经[翻译了这篇文章](https://juejin.im/post/5b2f66a9f265da59a1172896)，感兴趣的同学可以考虑跟着文章体验一次机器学习模型的训练过程。

### 🐎 [iOS中的图片使用方式、内存对比和最佳实践](https://juejin.im/post/5b2ddfa7e51d4553156be305)

在 WWDC2018 的[图像最佳实践](https://juejin.im/post/5b1a7c2c5188257d5a30c820)中，苹果为我们介绍了一种缩放图片的方式。本文则是对这个议题进一步探究，研究了三种创建`UIImage`的方式所占用的内存大小，结论是苹果官方提供的方式占用内存最小，推荐大家使用。

### 🐕 [Using generics and descriptors to standardise icons, images and placeholders on iOS](https://medium.com/asos-techblog/using-generics-and-descriptors-to-standardise-icons-images-and-placeholders-on-ios-35dded0650be)

通常应用里的图片占位图只有少数几种样式，如果粗暴的使用继承来复用不够灵活。本文介绍了利用泛型约束来进行图片配置。我个人认为这个实现方式清晰且安全，值得借鉴。

### 🐢 [2018 年主流 RSS 服务选哪家？Feedly、Inoreader 和 NewsBlur 全面横评](https://sspai.com/post/44420)

在我们已经有了公众号、QQ/微信群、直播平台等各种技术社群的集中式服务时，RSS 是否还适合技术人员？唐巧在[3月25日的博客](http://blog.devtang.com/2018/03/25/job-choices/)是这么说的
> 我之前做 iOS 开发，白天上班完成公司的需求，晚上就自己研究一些技术细节，写一些总结的博客。每年的 WWDC 视频，我都坚持看完并且写一些总结笔记。我还用 RSS 订阅了很多 iOS 国内外的博客，平时和周末没事就翻来学习。

可见，在信息高度过载的今天，RSS 无疑发挥了一个「聚合器」（aggregator）的作用，帮用户抓取各个高价值订阅源的更新。但各家 RSS 服务之间的区别性其实很高，最终阅读体验也大相径庭。此外，目前绝大多数的 RSS 服务都是有收费选项的，要不要付费、付费给谁也是需要考虑的问题。为此，本文挑选了几家有代表性的 RSS 服务进行对比，分析各自优劣，希望能帮读者做出最适合自己的选择。更多的时候，RSS 是一种学习习惯，而 RSS 服务就是学习的工具。工具好不好用，关键还是要看主人。

P.S. 国内的 RSS 源数量正在逐渐减少，这里吐血推荐一个基于[多人协作式开发的 RSS 生成器](https://docs.rsshub.app/)，毕竟没有池塘哪有鱼，对嘛！


### 🐎[The Problem You Solve Is More Important Than The Code You Write](https://medium.com/@fagnerbrack/the-problem-you-solve-is-more-important-than-the-code-you-write-d0e5493132c6)

> You are not a Code Monkey paid to write characters on a screen. 

作为研发，可能会认为，产品业务的方向、需求应该仅仅是 PM 们需要考虑的事情，而我们只需要通过代码完成一个又一个的需求，但事实真的是这样吗？在 coding 过程中，我们可能常常执迷于代码写的漂不漂亮，接口设计符不符合 DRY 原则等等。当然，这并没有什么不对，只是，似乎我们忽视了一个问题，那就是，我们的每一行代码，最主要的目的是为了解决问题，或者说，为所在公司、团队创造价值。本文虽然没有介绍任何技术相关的东西，但可能比很多技术文章更值得技术人员去看一看。

PS：文中举的蓝牙解锁的例子，实际上我觉得无匙进入比按个按钮解锁在技术上难实现的多（手动滑稽）

## 设计

### 🐎 [How Apple can fix 3D Touch](https://medium.com/@eliz_kilic/how-apple-can-fix-3d-touch-2f0ca5ea589e)

作者认为目前 3D Touch 的体验有待改进，用户无法区分普通按钮与支持 3D Touch 的按钮，只能不断尝试然后记住那些支持 3D Touch 的按钮。所以作者认为 3D Touch 按钮应该在视觉上加以区分，例如在右下角加一条短线。

## 代码

### [MessengerKit](https://github.com/steve228uk/MessengerKit)

MessengerKit 使用 Swift 编写，是一款基于 UICollectionView 的消息 UI 框架，可以方便地搭建类似 iMessage 的界面。它内建了可自定义的主题，你可以根据示例来快速地构建符合你应用 UI 的消息对话框，值得一试。

### [StyledTextKit](https://github.com/GitHawkApp/StyledTextKit)

StyledTextKit 是一款支持后台渲染和 LRU 缓存的富文本框架。在 iOS7 之前，UITextView 由于使用了 UIWebView 导致性能十分差，虽然后来苹果给出了 TextKit 框架，但是所有的渲染和尺寸计算依旧还是在主线程。所以 GitHawkApp 的开发者自主开发了 StyledTextKit 这个富文本框架，用于含有大量富文本的列表。在子线程中计算背景大小及文本内容渲染，保证在滚动大量文本的时候依旧十分流畅。


## 内推

### [字节跳动](https://job.toutiao.com/society) 北京 iOS 团队持续招人中

这是一家非常年轻的创业公司，充满活力与激情，只招优秀的人，一起做有挑战的事情。直接内推可以将简历及心仪岗位发送至我的邮箱 raozhizhen@bytedance.com，或者添加我的微信 jingmu1994 了解更多公司信息。有需要的我也可以直接帮你对接技术 Leader 详聊。

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

### [杭州/广州/深圳 奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html)
奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域， 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。Mesh 在运用 yarn, rollup, vue 等技术栈的同时，利用 Couchbase 设计多端数据同步方案，并深入研究 React Native。也可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。

### [百度教育事业部招iOS开发](https://www.baidu.com/s?wd=百度)
部门下面有百度阅读，百度文库，百度爱听等App产品。团队技术氛围浓厚，有兴趣的同学欢迎将简历发送到我的邮箱：lizelei@baidu.com，想了解更多也可添加我的微信：lizelei618087。

## 关注我们

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

![](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)，[@mmoaay](https://weibo.com/u/1302422271)，[@享耳先森](https://github.com/iblacksun)，[@EyreFree](https://weibo.com/eyrefree777)，[@Damonwong](https://weibo.com/damonone)，[@折腾范儿_味精](http://weibo.com/agvicking)，[@张嘉夫](https://weibo.com/2949394297)，[@AidenRao](https://weibo.com/AidenRao)，[@Parsifal](https://weibo.com/parsifalchang)， [@叶孤城](https://weibo.com/u/1438670852)，[@aaaron7](https://weibo.com/aaaron7)，[@方秋枋](https://weibo.com/100mango)，[kyo](https://github.com/KyoLi)，[tom510230](https://xiaozhuanlan.com/u/6682065345)，[anotheren](https://anotheren.com)

## 说明

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

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


