老司机 iOS 周报 #116 | 2020-06-08

4,261 阅读5分钟

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

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

新手推荐

🐕 3 steps to speed up storyboard

@极速男孩:storyboard 作为 iOS 的一种对 viewcontroller 的控制的方法被广泛使用,本文简单介绍了如何快速的使用 storyboard 来对你的 viewcontroller 进行管理。

文章

🌟 🐕 TrampolineHook - 解决栈污染问题支持变参 Hook

本文是 TrampolineHook 框架系列文章最新的一篇。TrampolineHook 是一个中心重定向框架,可以通过一个函数替换/拦截所有你想要的函数的框架。如果对这个库不了解可以先看前面的几篇文章:

本文主要讲该库在之前实现中的一个错误,关于上下文污染的问题,本文从汇编角度比较深入的讲解了这个问题,但并不需要读者很了解汇编的内容,有兴趣的同学可以看一下。

🌟 🐕 移动前端开发和 Web 前端开发的区别是什么?

@张嘉夫:前端这门技术,从诞生发展至今不过寥寥十余年。如果说前十年是 PC 前端的时代,那后十年一定是属于移动前端的时代。特别是随着网络制式的发展,移动设备在全球范围内得到了空前的普及,在前端领域,Hybird Web、React Native、Weex、Flutter 等等一系列新的移动前端技术也如同雨后春笋般冒出来。在这篇来自阿里巴巴新零售淘系技术部的文章中,作者分享了其对于「移动前端开发和 Web 前端开发」的理解,具体包括前端发展史回顾、移动前端混合技术的前世今生以及对未来回归本源的探讨。

🌟 🐕 How the SwiftUI DSL Works

@莲叔:SwiftUI 算是 Swift 近几个大版本中最令人兴奋的 feature,虽然不少同学在试水后都得出了目前还不成熟的判断,但这并不影响其定位了未来的 UI 开发方式。本篇文章作者尝试聊了聊 SwiftUI 实现中的一些关键技术,主要描述了 function builder 机制,文章比较浅显易懂,内容不多,比较适合新手学习。

🐎 🚧 A Type-Safe FileWrapper

@xiaofei86:在 Document Based Apps 中,NSDocument 作为最重要的基类,提供了自动保存、线程安全、iCloud 冲突解决等功能。NSDocument 可以持有 Data 和 FileWrapper 两种类型的文件数据。FileWrapper 为自定义文件类型的容器,本文通过示例简单讲述了 FileWrapper 的应用,有兴趣可以阅读原文了解,也可以通过苹果 官方文档 了解更多 Document Based Apps 的开发指南。

🐎 Dealing with memory limits in iOS app extensions

@老驴:Notification extension 和 share extension 算是 iOS 中前两年比较火爆的话题了,这两年似乎热点过去,大家关注的也不多,苹果也没有在这块继续着力,framework 更新的也很少。

这位作者就在开发中遇到了内存上限问题,Notification extension 最高只能支持 24 MB 的内存占用,而 Share extension 最多支持 120 MB 的内存占用。而开发中最有可能遇到内存上限问题的就是图片或者是视频了,作者使用了一些有意思的办法来绕过这样的限制,有兴趣的不妨来看看。

🐕 How We Use Feature Flagging on iOS

@老峰:Feature Flagging (又名 Feature Toggle、Flip 等)是一种允许控制线上功能开启或者关闭的方式,通常会采取配置文件的方式来控制。本文作者以 WordPress 为例讲解了通过 配置 Build Configurations 等在 iOS 中实现 Feature Flags,WordPress-iOS 是个开源项目,感兴趣的读者可以点这里阅读源码。

🐎 Decode and Flatten JSON with Dynamic Keys Using Decodable

@四娘:有时候后端下发的 JSON 文件会采取动态 key 的形式,那在 Codable 里该如何实现呢?这篇文章就介绍了如何动态 key 的结构该如何解析以及封装的方式。

代码

🌟 InterposeKit

@EyreFree:InterposeKit 是一个可以帮助我们快速、优雅地在 Swift 中进行 Swizzle 的库,它的作者是 Peter Steinberger,你可能对这个名字没什么印象,但你可能听过他的另一个开源库 —— Aspects。InterposeKit 是用纯 Swift 5.2 编写的,有完备的文档并经过了全面的测试。它可以用于 Objective-C 实例方法和被 @objc dynamic 修饰的 Swift 函数。推荐在 Swift 中有 Swizzle 需求的同学一试,以下是一些关键点:

  • Interpose 直接修改方法的实现,这比基于 selector 的方式要好;
  • 可以通过调用 revert() 轻松实现钩子的撤销;
  • 纯 Swift 实现,而不是使用低效的 NSInvocation
  • 没有类型检查,虽然带来了一些 crash 风险但也更加灵活;
  • 必须手动指定结果类型两次,这是一种为了避免使用 NSInvocation 或汇编的折衷;
  • 当类在运行时被加载时,延迟插入。

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

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

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

说明

🚧 表示需某工具,🌟 表示编辑推荐

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