老司机 iOS 周报 #50 | 2019-01-02

3,805 阅读13分钟

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

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

新闻

🌟 我们一周岁了~

这是周报成立一周年的第 50 期,也是我们新年的第 1 期。过去 2018 年里,在编辑团队的努力和大家的支持下,我们达成了以下几点小成就:

  • 一共连续为大家贡献了 49 期周报
  • GitHub 累计获得 2000+ star
  • 掘金账号 收获大家 8500+ 关注,近 2400 次获赞,平均每篇约获赞 40 次,总阅读数约 12.5w,并从近一个月开始尝试不定期推送沸点
  • 微博话题 #iOS 周报 共 188w 阅读
  • SwiftOldDriver 精选 发表 23 篇文章,获得 255 个订阅
  • 联合兄弟团队 知识小集SwiftGG 翻译组 共同参与了掘金 WWDC 2018 专题活动,并在近期组织了 iOS 再就业联盟
  • 周报编辑团队也不断成长,目前已有来自一线 iOS 开发的 28 位伙伴加入我们

另外,我们在 12 月初向大家发起了问卷活动,收集大家对周报的建议和希冀,目前我们正在整理和汇总,并尽快在最近几期周报中根据建议作出调整。祝愿周报在 2019 年和大家一起继续成长~

🌟 老司机周报x知识小集xSwiftGG:iOS 内推职位召集

最近很多公司的裁员的消息相信大家都有所耳闻,与此同时也有不少公司逆势而上在持续招聘技术人员。因此我们三大组织决定牵头收集一些可靠的招聘,元旦结束后在我们的资讯发布渠道上发布 iOS 内推职位专题文章

🌟 他们的 2018 年总结

2018 已经悄然离开,2019 已经站在我们面前。这一年,相信大家都有收获,也有过遗憾,这都是常事。下面几篇文章,是几位小伙伴自己的年终总结或者是 2018 年 iOS 的技术发展总结,相信看了他们的总结之后,大家也会有所收获。

文章

🌟 🐢 The Layer Cake

Flutter 现在有多火,相信已经无需多说。尤其 1.0 版本发布后,各个厂也都有在进行先关的调研,不少已经在实际项目中使用了。之所以选择 Flutter,一方面是因为跨平台,另一方面我相信很大一部分原因是因为其高效的渲染性能。相信很多同学对 Flutter 如何进行渲染的也比较好奇,本文讲了 Flutter 的渲染层级及如果工作的,并且在处理负责视图结构中如何保持高效。本文对于正在学习或使用 Flutter 的同学,在思考 Flutter 的架构以及性能的优化等问题上,会很有帮助。

🐕 Advanced UIView shadow effects using shadowPath

虽然扁平化设计的 iOS 7 舍弃了大量的阴影,但最近几年阴影正在不断回归,以增加界面的深度。谨慎地使用阴影可以对 UI 中的内容进行区分、增加深度、吸引用户的视线。这篇文章介绍了用阴影实现的几种效果,全部通过操作图层属性实现。这些效果有的很简单有的很复杂,希望它们可以激发你的创造力!

🐎 A guide to writing your own iOS CI/CD integration script

FastlaneJenkins 是构建 CI/CD(持续集成/持续部署)工作流的常用工具。本文另辟蹊径,不使用第三方工具,只基于苹果的基础工具链构建一个包含编译、测试、检查代码覆盖、签名、分发等相对完整的 CI/CD 工作流。 如果你还不了解 CI/CD 原理,不妨对着本文做一遍,相信可以快速掌握其运行过程。

🐎 ISO-8601, YYYY, yyyy, and why your year may be wrong

小写 yyyy 是我们常用的格式化日期 参数,如果误写成大写 YYYY,会有什么问题? 大部分情况下,它们似乎没有区别,但在每年的最后一周,YYYY 又会给我们带来意外的结果。 本文作者将带你了解 YYYY 对应的 ISO 周日历,从而真正理解它们的不同。

🐎 系统学习 iOS 动画之一:视图动画

动画制作很有趣,可以为用户界面注入活力。如果使用得当,动画还可以向用户传达信息,并将用户注意力吸引到界面的重要部分。

作者学习《iOS Animations by Tutorials》系列笔记共 7 篇包括如下几部分内容:视图动画自动布局动画图层动画视图控制器的转场动画3D 动画其它类型的动画等。

本文是作者系列笔记中的第一篇,文章以实例的形式由浅入深的讲解了弹簧动画、过渡动画、关键帧动画的实现过程。推荐对动画感兴趣的读者跟着教程实践一遍,相信你会有收获。

🐎 函数式编程 - 酷炫 Applicative(应用函子)Swift 描述

函数式编程中,三个核心概念分别是 Functor,Applicative 和 Monad。其中,讲 Functor 和 Monad 的资料都不少,但 Applicative 一直都处于一个爹不亲娘不爱的地位,属实尴尬。核心原因还是其应用范围比较有限。本文以 Swift 语言为载体,介绍了 Functor 和 Applicative 的基本知识,讲述的方法借鉴了函数式编程领域教学中比较经典的“盒模型”,没有复杂的数学概念,算是比较不错的入门教材。最后还找到了一个 Applicative 的应用场景作为例子,对函数式编程感兴趣的同学可以仔细阅读,虽然 Applicative 的应用范围比较狭窄,但对于一些细分领域的问题,的确可以构造出非常优雅的解决方案。

🐎 『译』Hacking Hit Tests

35 期周报我们曾向大家推荐了它的原文,而这周 SwiftGG 则为大家做了翻译,再次温习 iOS 系统基于 Hit Test 的触摸事件处理机制。

🐕 How to test iOS networking code the easy way

测试网络层代码总是很困难,因为代码运行地飞快,并且不好重现。文中给出的方案便是 URLProtocol,一个用于处理特定协议数据的抽象类。你可以编写一个 URLProtocol 的子类来注入你需要的数据,而无需改变你原有的代码,不妨一试。

🚧 🐢 Building an Interactive Voice App Using Custom Siri Shortcuts in iOS 12

Siri Shortcut 是 Apple 在 iOS 12 中基于 SiriKit 框架引入的新 API。它为开发人员提供了自定义用户在应用程序中经常使用的活动创建快捷方式的方法。用户通过向 Siri 发出语音命令来调用快捷方式,可以通过记录与快捷方式关联的自定义短语来自定义实际短语。你可以实现例如:

  • 订购一些东西(例如披萨,咖啡,早餐😋)
  • 信息搜索
  • 连接到任何 API
  • 做我们想要的任何自定义动作
  • 执行 Siri
  • 还有更多...

本文还提供了一系列实现上述功能的参考代码,希望能给感兴趣的朋友提供帮助。

🐎 GitHub Actions: Continuous Delivery of Swift Packages

GitHub Actions 是 GitHub 在 GitHub Universe 2018 开发者大会上发布的新功能,它能够让开发者直接在 GitHub 上根据特定的事件自动执行预设的任务。

本文记录了通过构建 Swift Packages 来使用这个功能的整个流程,也总结了使用过程中发现的一些问题。虽然 GitHub Actions 还处于公测阶段,但大家对这个功能都表示很看好。因为它能让每个开源项目都有自己统一开放的自动化工作流程,它使得 GitHub 服务从代码托管延伸到整个软件开发周期,它很有可能会改变大家使用 GitHub 甚至维护开源项目的方式,所以就让我们拭目以待吧。

🐢 深入浅出 iOS 编译

在日常开发中,并不会常用到编译原理相关的知识,但不代表我们不需要了解它。本文系统的讲了 iOS 编译的各个环节,连签名环节都有涉及,深入浅出,也比较容易看懂。在编译原理层面,分为前端和后端,在众多概念中比较重要的是 Parser 和 CodeGen,了解一定的编译原理相关知识,对我们做更深层次的架构、语法设计会很有帮助。

工具

SwiftRewriter - Swift code formatter using SwiftSyntax

基于 SwiftSyntax 的 Swift 代码格式化工具,要求 Swift 4.2 和 Xcode 10。可以方便灵活的定义和组合自己想要的代码格式。

Shapeshift

快速让一组 Swift 文件兼容 iPad 上的 Playground,甚至可以将转换后的文件放置在 iCloud Drive 中的 Swift Playground documents 文件夹内,以便立即拿起 iPad 开始编程!🚀

Woodpecker

我们曾在 18 年初的 第 5 期周报 推荐过 Woodpecker 这款工具,它可以在 Mac 上查看 App 信息,提高开发测试效率。但现在这款工具 Mac 商店已提供免费下载,免费版本可使用绝大多数功能。

目前功能:

  • 只需一步,即可查看、修改沙盒文件;
  • 监控 App 网络 http(s) 请求,无需设置代理;
  • 查看,修改 UserDefaults;
  • 在线调试 WebView;
  • 简单强大的插件支持。

@张小刚哟 自荐

Code Friend

使用提供的 JavaScript 接口,可以简单快捷地开发出 Xcode 插件的 Xcode 插件。

USB Keyboard

通过 USB 连接 iPhone 到 Mac 后,可以实现在 Mac 端打字,iPhone 上输入的输入法应用。

woza

越狱 iOS 的砸壳工具,类似 clutch、dump-decrypted,是 AloneMonkey 开发的 frida-ios-dump 的 node 版本。另外,woza-desktop 是 woza 的桌面版本,实现了“点点鼠标就能砸壳”的目的。

代码

🌟 Stinger

知名 iOS AOP 库 Aspect 的另一种实现思路。使用 libffi 及解析方法签名构建壳函数,替换原方法实现以感知方法调用和捕获参数;使用同一 cif 模板及函数指针直接执行原实现和所有切面 block;不使用消息转发指针替换原实现,hook 兼容性更好;调用方法不经过消息转发过程,执行原实现及切面代码过程中无手动构建 invocation 等,效率更高。

正在实现 hook 单个实例对象。

🌟 LeetCodeAnimation

现在无论是准备参加校招还是社招,怎么能不去刷刷 LeetCode 呢?但是刷题的过程是枯燥乏味的,而现在广大程序员同胞的福音来了, LeetCodeAnimation 的作者立志将 LeetCode 上所有的题目都用动画的形式演示出来,相对枯燥的算法,使用动画演示将更容易理解铭记。目前已实现了部分算法,并将持续更新。

音视频

ggtalk | 创业那点事:听莲叔和羊叔回忆峥嵘岁月

这一期内容,对于大多数程序员都挺有指导意义,羊叔和莲叔分享了自己曾经创业的经历,同时引出了关于程序员职业发展话题的讨论。面对可能高回报但同样高风险的创业机会,作为工程师应该如何判断,如何抉择,创业公司的股份和期权能不能拿,意味着什么,这些问题,你都能在节目中找到答案。

内推

关注我们

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

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

本期编辑

@四娘@享耳先森@Damonwong@折腾范儿_味精@张嘉夫@Parsifal@aaaron7@kyo@anotheren@水水@looping@老老老老老老老驴@邦ben@红纸@含笑饮砒霜@JimQXanderXu老峰zvving

说明

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

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