老司机 iOS 周报 #31 | 2018-08-13

2,642 阅读10分钟

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

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

备受 iOS 开发者喜爱的 raywenderlich 社区全新改版!

raywenderlich 这次进行大改版,为开发者提供更为优质的教程。此次更新主要有:

  • 教程将全部按照主题分类,目前已经有 iOS & Swift tutorialsAndroid & Kotlin tutorialsUnity tutorials 以及 Unreal Engine tutorials 四大类,未来 rw 也将继续增加新的分类;
  • 每个分类都会有自己的主页,可以帮助你更快地找到自己所需要的教程;
  • 全新的学习路径规划,真正实现从『入门』到『精通』;
  • 个人主页上线,掌控自己的学习进度;
  • 教程库,成千上万的教程资源供你筛选;

WWDC 2018 视频已经全部配上简体中文和日文字幕

在早些时候,苹果已经为所有视频配上了英文字幕,仅少部分视频有中文字幕,这次全部都已配上简体中文和日文字幕。相比去年第一次有中文字幕,今年的又额外增加了日文字幕,看来日语区的 Apple 开发者也不少。如果你对之前的看的某个 Session 还有疑问,不如趁着中文字幕上线的热乎劲再回顾一遍。

Dart 重启!Dart 2 正式发布,目标成为移动与 Web 开发主流语言

Google Dart 产品经理宣布 Dart 2 正式发布,这标志着 Dart 语言的重启,目标成为主流的移动和 Web 开发语言。同时,Google 还宣布重构 Dart Web 平台,这对开发者来说,是一个高效率、高性能和可扩展的组合。 Google 称,Dart 2 的目的有三个:优化语言开发,增强 Google 对 Web 和移动框架的支持能力,将 Google 内部的一些支持 Dart 的工具和组件带给外部的开发者。

文章

🐕 Guys, REST APIs are not Databases

作为目前最常见的后端设计风格,REST API 已经成为任何项目中不可缺少的一部分。然而在实际使用的时候,开发者很容易把 REST API 设计成直接对数据库进行操作。

作者在文章中解释了为什么直接对数据库操作是有问题的,同时也给出了自己的对 REST API 设计的一些理解。

🐕 Refactoring Massive App Delegate

每一个 iOS 程序员都需要和 AppDelegate 类打交道,App 生命周期的逻辑一般都会放在这个类中进行处理。该文作者提出了一个“Massive App Delegate”的概念,表示当一个 App 越来越复杂,其 AppDelegate 类也会变得越来越庞大并且难以维护,作者分析了一些有名的开源项目并抽取了一些大家喜欢放在 AppDelegate 类中处理的逻辑列表,并且针对性的提出了三个方向:命令模式,组合模式和中介者模式来更好的组织 AppDelegate 中的代码,很有参考价值。

🐕 Type inference-powered serialization in Swift

类型推断是 Swift 作为强类型语言的一个特性。本文介绍了利用泛型实现类型推断简化 Codable 解析 JSON 的操作。阅读本文可以学习到在实践中如何应用泛型。

🐢 面试中的个人竞争力

很多人都觉得自己没有竞争力,那相信这篇专栏会戳到你的痛点,找工作是不可能的,这辈子都不可能找工作,算法又不会,原理又不懂,只能做一个 github 的搬运工,才能维持会写代码的样子。

写简历要挑重点,用最简洁的篇幅,展现出你个人独一无二的亮点。面试需要多展现自己的思考过程,思考的深度。但这一切都基于过去的积累,就算是再平凡的工作,也能通过发现问题,探寻本源,自驱优化来锻炼自己,提升竞争力,从而赢得好机会的青睐。

🐕 由 NSObject *obj = [[NSObject alloc] init] 引发的一二事儿

这是一篇随想类型的文章,由 [[NSObject alloc] init] 开始讲起,覆盖了 Objective-C 内存分配、ARC、@propertyatomic 等,看的过程遇到不是很清晰的知识点建议另找资料细读。

🐢 剖析 ARM 64 架构中的 objc_msgSend

我们都知道 Objective-C 的"方法调用"其实是消息转发,[obj foo] 其实都会转变成 objc_msgSend 调用。本文概述了 objc_msgSend 内部的代码处理流程,而在具体代码实现层面,整个消息处理流程代码可以分为两个部分:通过汇编代码实现的快速路径部分(fast path),C 语言实现的慢路径流程(slow path)。其中汇编代码对应缓存表中查询方法部分并且未命中时跳转 C 代码来进行下一步处理。本文重点讲了 arm64 架构下 objc_msgSend 汇编部分指令细节。

🐢 构建流畅的人机交互

今年 iOS 花了很大的功夫在优化系统基础体验上,甚至在 WWDC 里专门开一个 session 来讲如何构建流畅的人机交互。这篇文章的作者在看了这个 session 之后有感而发写了这篇文章,在介绍和总结 session 内容的同时,还动手通过代码实现了那些 Design Tips,里面特定交互的最佳实现和动画实现的思路都非常棒,推荐一看。

🐕 血泪总结:如何从微信小程序的坑跳进支付宝小程序的大坑

支付宝小程序也在公测之中,开发者可以自由申请进行体验。不同于微信小程序的社交传播场景,在一些线下支付场景使用支付宝小程序也能获得很多流量,对产品也是大有助益,因为迁移成本低,也是值得尝试。

本文虽说是血泪总结,跳进大坑,但其实从代码的角度来看支付宝小程序的代码规范与API和微信小程序相比,真的是非常非常的近似,只有一些细节的差异。如果你的微信小程序已经很成熟了,那么尝试支付宝小程序将会没有障碍,毕竟微信已经成熟了如果差异很大就没人会用支付宝小程序了。不过终究还存着API差异,如果打算一套代码然后通过前端工程化的方案同时适配2种小程序,那么本文作者踩的这些坑值得关注。

🐕 WubaRN分步打包流程

用官方命令打出来的 ReactNative(RN) JSBundle 都会带上自身框架代码。如果每个 Bundle 都自带框架代码的话,对于业务模块多的 App 来讲就不是很友好了。所以很多公司都会采取将框架和基础模块代码拆分出来,让所有业务使用同一份基础代码。

本文是 58无线技术 分享的一篇关于 RN 打包的文章,作者按照打包流程来解释他们的 WubaRN 拆分打包的思路,同时也介绍了如何通过缓存来加速打包。还在使用 RN 或对 RN 工程化感兴趣的都可以了解下。

🐕 NLLanguageRecognizer

在 iOS 12中,苹果开放了更多机器学习的能力给开发者。NLLanguageRecognizer 便是其中的一员。本文介绍了如何使用NLLanguageRecognizer判断字符串是属于哪种语言,检查拼写错误和合成声音。

🐎 5 分钟教你成为会赚钱的独立开发者

作者几个月前辞去大公司 iOS 工程师的工作,成为了一名全职独立开发者,目前已经在 App Store 发布了 17 款 app,累计下载量超过 56W 次,其中两款应用被 App Store 多次推荐。作者目前的独立开发月收入已经与辞职之前持平,在这篇文章里他会为你介绍如何把知识直接通过代码变成钱,包括获得创意、建立付费和内购模式、优化 ASO 等等。

工具

Xcode::Install

Xcode::Install 是一款从命令行更新 Xcode 的工具,它可以帮助你安装并管理多个版本的 Xcode。它使用了 Apple 的 开发者下载中心 来查找并下载指定的版本。

Knil

Knil 是一款帮助你测试和验证 Universal link 是否有效的工具。在 Knil 中输入对应的 host,它就会帮你把对应的 apple-app-site-association 文件下载到本地,并列出其中的 path 方便你进行测试。可以直接在 App Store 搜索下载 Knil。

内推

北京-蚂蚁金服 招iOS/安卓/前端开发

蚂蚁金服招聘,负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。虽然招聘链接只给了 iOS 的 JD,但前端/安卓/iOS 都要,要求相近。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱) 或这微博私信 @折腾范儿_味精 了解情况。

编辑内推

关注我们

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

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

本期编辑

@没故事的卓同学@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@AidenRao@Parsifal@aaaron7@方秋枋kyotom510230anotheren水水looping@JasonYuh@老老老老老老老驴

说明

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

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