老司机 iOS 周报 #23 | 2018-06-18

2,607 阅读10分钟

上一周在掘金的支持下,我们联合“知识小集”、SwiftGG 针对 WWDC 18 一共完成了 28 篇技术文章。希望广大的开发者多多转发,不要错过:老司机x知识小集xSwiftGG WWDC 18 专题目录

新闻

🐎 FB正在大规模重构React Native,预计今年发布

这毫无疑问是个好消息,和原生代码的协同一直是 React Native 的一个痛点,Facebook 愿意亲自解决这个问题,这对 RN 生态的超级利好。业内一些公司选择 Weex 而不选择 RN 的原因就是因为 Weex 和 Native 之间交互更加方便,这样可以最大限度的复用自己积累的 Native code base(毕竟目前 iOS 业内没多少新项目, 大部分都是有一定历史包袱)。如果 RN 解决了这个问题想必会给 Weex 带来新的压力。

文章

🌟 🐕 Enumerating enum cases in Swift

本文介绍了 Swift 4.2 新引入了 CaseIterable 协议。因为 Enum 会自动实现 CaseIterable 的方法,所以作者先介绍了 CaseIterable 协议中 allCases 方法在 Enum 上的几种使用场景,其中就包括了在 TableView 上的使用。然后作者详细讲解了如何让其他类型去实现 CaseIterable 协议。这是 Swift 4.2 非常重要的一个新增项,值得关注!

🐕 iOS 流量监控分析

在移动开发早期,流量监控一直是 APM 里很重要的部分。但随着 WiFi 覆盖率的提高以及流量资费的下降,客户端的流量监控渐渐显得不是那么重要了。饿了么基于自己的业务场景需要,分析比较了圈内各大已知 APM 流量监控方案的优缺点,最终实现了自己的流量监控模块。该文章对于加深理解 iOS 客户端内 HTTP 请求流程是很有帮助的。

🐢 SR-7380, Ambiguous KeyPath

作者是 GitHub 和 Apple 的前员工。

作者在编码过程中发现 Swift KeyPath 的一个 bug,从定位和修复问题的过程非常清晰,值得一看。

Swfit 的编译前端是 swiftc(为什么不是 Clang ? 参考 www.youtube.com/watch?v=Ntj…) 文章写了如何给编译器加参数让其打印出更多信息、如何生成 AST(抽象语法树)语义分析如何做类型检查等。

关于 Swift 编译过程,可参考 向开源的 Swift 贡献代码

🐕 WWDC 中提到的浏览器 Fingerprinting 有多可怕?

Web 浏览器上的 fingerprinting 技术指通过 IP 地址、JavaScript 行为、Flash 与 Java 插件、字体、Canvas、WebGL 等多维度信息,来给每一个浏览器打上一个不同的 fingerprint。你修改浏览器的常见配置,fingerprint 往往并不会发生改变,而你换一台电脑,或者换一个浏览器,都会产生不同的 fingerprint。通过这项技术,就能给一个运行在某个 OS 平台上的浏览器打上唯一标识,识别 Cookie 泄露产生的用户伪装,不过目前 fingerprinting 被广泛用于在不同的网页上识别用户,去投放合适的广告。

🚧 🐕 iOS 12: Notable UIKit Additions

作者 Jordan Morgan 每年 WWDC 之后都会深入探索新版本的 iOS 并为大家带来 UIKit 新增的 API,这次包括用于提示密码的 UITextInputTraits、用于图像渲染的 UIGraphicsImageRenderer、自动填充验证码、通知设置等等值得花时间研究的新 API。

🐕Training a Text Classifier with Create ML and the Natural Language Framework

CreateML 是今年 WWDC 苹果发布的新的深度学习训练工具,允许开发人员在不太了解机器学习的情况下,便可以训练自己的 models。本文作者 Mattt 在很短的时间,只写了很少的代码,就通过 CreateML 训练了一个文本分类的 Model,可见 CreateML 在使用上的简单和迅速。我一直认为机器学习慢慢一定会随着各种工具,框架的出现,变得越来越简单,可以让更广大的开发人员使用。虽然 CreateML(目前 CreateML 还是 Beta 版本)还不能完全代替诸如 TensorFlow 这样的框架,但我认为这是一个很好的开始。

🐕MessageThrottle Performance Benchmark and Optimization

MessageThrottle 是 OC 消息节流和防抖的库,换句话说就是控制方法调用的频率,主要利用 OC 的 runtime 机制来实现。由于 Hook 消息转发流程带来了一定的性能损耗。作者在原有基础上,通过改进存储结构和缓存策略,对库的性能进行了优化,使得消息转发流程的耗时下降 50%,同时节省 6% 的 CPU 耗时,并加强了线程安全。建议读者在读这篇文章前,如果对这个库或者 runtime 机制不是太熟悉的,可以先看一下 MessageThrottle 这个库的实现细节。

🐢 When your CA turns against you

目前主流的网站基本都采用了 HTTPS,而证书都是通过 CA 颁发。TSL 证书主要有三种类型,分别为 DV、OV 以及 EV。其中,EV 是最贵的。而我们知道,CA 总是想引导我们购买更贵的证书,但从安全性而言,它们三个其实并没有多大区别(当然,本文重点不在介绍 EV,主要是证书发布后的问题)。CA 不仅可以颁发证书,还具有撤销证书的权利。本文以实际的案例,Ian Carroll 在美国注册的一家名为 Stripe Inc. 的公司被 CA 撤销了证书,来讨论 CA 的权利是否过大,是否存在滥用职权的问题。

🐎 WWDC 2018 见闻

Bang 参加 WWDC 2018 的见闻,不仅仅提到了 WWDC 中,大家在最近几周看过很多相关文章的 WWDC Session ,还提到了 WWDC Lab 这个现场与苹果开发者,全世界开发者交流探讨的环节,另外 Bang 作为 JSPatch 的作者,也向苹果询问了官方对这类工具,这类热修复,热更新的态度,苹果的回答也颇有意味。

🐕 [译]现代 js 框架存在的根本原因

作者从数据状态与UI响应的方向集中阐述了在传统前端开发模式下带来的痛点,因此而产生了现在诸如 React,Angular 或 Vue 等现代 js 框架。在文章中提到此类框架的基本策略是通过虚拟dom来高效操作渲染,使用观察者监听来即时响应状态变化。作者为了大家理解方便,用原生 js 与虚拟 dom,实现了一个响应式 UI 框架的基本流程。

🐕 Harnessing Code Generation to Increase Reliability & Productivity on iOS at Uber

本文的中心是利用代码自动生成能力提高 Uber iOS 上的可靠性和生产力。主要通过资源访问器(Resource accessors)和模拟(Mocks)两个例子来介绍代码自动生成能力如何提高代码可靠性和生产力。

🐢 Modular iOS

下面四篇文章是一个系列文章,主要描述了「如何将我们的项目进行模块化拆分」

上述四篇文章篇幅不大,但是每篇文章都对模块化过程中产生的问题提供了一个很好的思路,对于正在写模块化的你们来说,值得都看一遍。

细说 Swift 4.2 新特性:Dynamic Member Lookup

Swift 4.2 中新增加的 dynamic member lookup 对 swift 未来的动态特性有着很大的影响。同时也增强了和动态语言如 python 和 js 的交互。是个值得关注的新特性。

设计

【国内首发 + 中国价】Design+Code 绝佳 iOS 设计和开发教程一年订阅

Design+Code 系列教程教你从 0 到 1 设计、开发一款完整的 iOS app,非常适合希望入门设计或编程的朋友,包括 Sketch、Swift 4、Xcode 9、CocoaPods、Core Data、Realm、动画、SpriteKit、TestFlight、发布 App 到 App Store 等等内容,不仅有文字教程,还有超过 40 小时的视频课程以及 10GB 可供下载的资源文件。

工具

Mac Bootstrap

这是一个针对新 Mac 开发的,快速配置开发环境的脚本,里面集成了一些常用的配置。所有的配置和功能都有文档说明, 它既是使用手册,也是教学指南。

虽然环境配置是一件非常主观的事,不同的人审美和需求不一样,但也可以看看文档,了解一些好玩的用法,看看它是怎么实现的,然后把部分函数抄走并提高自己的工作效率。

Sonar

Facebook 出品,一个可扩展的移动应用调试工具,同时支持 iOS 及 Android,让你能够从桌面可视化地控制你的应用。Sonar 基于插件化设计,已经内建了 Logs (日志)、Layout Inspector (布局检查器)、Network (网络检查器)。当然,你也可以自己为其编写插件来满足自身业务需求。不过当前还没有支持 Swift,项目中全面使用 Swift 的同学还得再等等。

在线 AI 生成 LOGO

相信每位开发者都有会自己做的应用却不会自己做 Logo 的窘境,也更不希望和不靠谱的收费设计师来回扯皮,那么快让这款 AI 工具来帮助你。输入名称、标语、关键词并选择配色方案,然后等待数秒,就会得到若干个基于你配置的设计结果,总有一款适合你。

音视频

Swift Unwrapped #62: Interview with Ted Kremenek

这期 Swift Unwrapped 采访了 Swift 的核心团队负责人 Ted,主要讲了 Swift ABI 相关的内容,很大的篇幅都在讨论 ABI 稳定的概念以及影响,例如 ABI / API / Module Stability 的概念和区别,Swift Runtime 跟系统的交互,以及 Swift 稳定对于操作系统 SDK 开发的影响。

内推

字节跳动 北京 iOS 团队持续招人中

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

深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目

如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~

杭州/广州/深圳 奇志科技招聘 iOS、前端

奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。Mesh 在运用 yarn, rollup, vue 等技术栈的同时,利用 Couchbase 设计多端数据同步方案,并深入研究 React Native。也可以微博上私信 @没故事的卓同学 了解。

关注我们

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

本期编辑

@没故事的卓同学@四娘@mmoaay@享耳先森@EyreFree@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@叶孤城@aaaron7@方秋枋,@Kyo

说明

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

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)