老司机 iOS 周报 #114 | 2020-05-25

5,150 阅读8分钟

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

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

新手推荐

🐕 CS193p Spring 2020 (Developing Applications for iOS using SwiftUI) 开始更新

@极速男孩:斯坦福大学的 CS193p 课程是针对 iOS 开发所推出的一个基础教程。在2020年春季的更新中,加入了在去年 WWDC 中推出的 SwiftUI 的内容。更多的内容可以看这里

文章

🐕 一波 N 折的携程酒店 Swift-Objc 混编实践

@含笑饮砒霜:在 WWDC2019 大会上,随着 Swift5.0 发布之后,沉寂多年的 Swift 终于走上了快速发展的道路。iOS 开发语言的重心已经在悄悄倒向 Swift,本文即在讲述携程酒店在引入 Swift 混编带来的各种问题及解决方案,可供开发者们借鉴参考。

🐕 The Future of Swift on the Server

@莲叔:自从 IBM 在 Swift 上打了退堂鼓后,Server-side Swift 社区受到了不小的打击。大家纷纷猜测会不会这个命题已经不再成立。这篇文章带来了不少的好消息,甚至认为 2020 将会是 Server-side Swift 的利好年,其中最主要就是 Swift6 的 feature 中绝大多数都直接或间接的和 Server-side 有关或者利好。还有 Swift 的核心团队迎来了 Tom Doron 和 Saleem Abdulrasool, 一个是 SwiftNIO 的负责人,一个在尝试把 Swift 移植到 Windows,这些迹象都说明 Swift 的核心团队对于让 Swift 跳出 Apple 生态的决心。其他还有不少令人振奋人心的消息,具体建议大家直接看文章。

🐕 Building a Design System for iOS

@张嘉夫:为了便于设计师和工程师之间的沟通协作,作者为 iOS App 构建了一个设计系统,并在这个系列文章中介绍了他的经验,包括排版、颜色和动画等部分。设计系统能够定义产品的设计语言,包含可重用的组件,有明确的设计标准,可以将它们组合在一起来构建任意一款 app。采用设计系统的优势是可以提高设计的一致性、提高团队工作效率、方便辅助功能的开发,此外组件的可重用性还扩大了设计的应用范围。

🐕 更方便、更强大: Flutter package 生态系统更新

@邦Ben:Flutter 这类新技术出现,最大的缺陷之一就是配套生态弱。近期,Google 为了提升 Flutter package 生态系统的可信度,增加了发布者认证和评分。根据各项指标评选出 270 个项目赋予 Favorite 徽章。这意味着,有 Favorite 徽章的三方库,你可以相对放心的使用。同时,Flutter 团队和英国的 Invertase 合作进行推进 Google Flutter 插件的优化(例如 firebase)。综上,这意味着 Flutter 生态会进一步得到改善,随着参与人数的日益增多,将会越来越好。

🐕 Implementing design system components on iOS

@享耳先森:Native View 如何进行组件化抽象并复用一直是个难题,作者通过一个实例介绍他的思路,并提供了 demo 项目。作者将可能复用的 View 抽取成 components,并提供对应的 ViewModel,同时,ViewModel 可以组合实现不同的 Protocol 完成诸如选中等事件分发。

🐕 Fish-Lottie:纯 Dart 如何实现一个高性能动画框架?

@CrazyCoderShi:Lottie 是一个由 Airbnb 开源的横跨 Android,iOS,Web 等多端的一个动画方案,它以 JSON 的方式解决了开发者对复杂动画实现的开发成本问题。最近闲鱼开发团队在 Flutter 端实现了 Lottie - fish-lottie 。本文详细地介绍了 Lottie 架构以及 fish-lottie 实现思路👍。

🐎 Verge — Start “store-pattern” state management before beginning Flux in UIKit iOS app development — preparation starting SwiftUI

@zvving:本文是 Verge 上手指南:从一个数据驱动页面的小型业务场景出发,介绍如何引入 Verge 提供良好的业务代码隔离。

Verge 是 Flux 架构的又一 iOS 实现,设计与 Vuex 基本一致,View 同时兼容 UIKit 及 SwiftUI,事件绑定支持 RxSwift 及 Combine。 更多内容请参考 Verge-Docs

🐢 震惊!生产力提效 300% 的秘诀全公开

@JimQ:工作要高效,方法很重要,这是一篇写给技术人的个人工作学习管理的方法论。如果你对精力管理、多层次的工作/学习计划、番茄工作法、定额工作法、批处理、多任务并行、图层工作法这些概念一知半解,快到碗里来吧。值得一提的是,本文不只讲方法其然,还讲其所以然,逻辑体例清晰,排版重点突出,配上作者本人真实场景的思维导图,是一篇深度好文,不是标题党。

🐢 iOS Rendering 渲染全解析(长文干货)

离屏渲染使用不当常常会导致屏幕卡顿,造成不好的用户体验,所以通常我们会尽量避免使用离屏渲染,例如减少圆角剪裁。但除了减少圆角剪裁,还有什么方式可以避免离屏渲染?以及离屏渲染使用过多为什么会造成卡顿?本文从计算机的渲染原理开始介绍,分析了屏幕成像和卡顿,然后讲到 iOS 中的渲染框架,最后引入离屏渲染这一问题,非常系统地让我们 iOS 的渲染原理有个比较深入的认知。

🐕 大话 Socket

@水水:要了解Socket首先要了解 TCP,而 Socket 是抽象出来的使用 TCP/UDP 的概念模型,屏蔽掉了晦涩的底层协议的实现,是一个接口。文本以图文趣味的方式带读者了解 TCP 的三次握手和四次挥手。相信你读完会让你对 TCP 有更好的理解。

工具

Introducing Piranha: An Open Source Tool to Automatically Delete Stale Code

@xiaofei86:最近,Uber 开源了可自动删除无用代码的工具 Piranha。Uber 使用特性标记(Feature Flags)来做 A/B Test 和灰度发布,当这些功能完成测试或发布后就产生大量的无用代码,从而为项目带来技术债务。Piranha 通过扫描源代码来删除无用功能标志相关的代码,从而使代码库更干净,更安全,性能更高且更易于维护。Uber 已经在 Android 和 iOS 中使用 Piranha,并已使用它删除了大约两千个过时的功能标记及相关代码。感兴趣的读者可以阅读原文了解 Piranha 的实现,遇到的困难,以及在 Uber 自动化流程中的应用。

代码

Nuke 9

@老峰:Nuke 9 是一个 Swift 版的图片加载库,Github 拥有近 5k Star,它有详细的文档,简洁的 API,支持更多的图片格式,使用全新的图片处理图形解码协议,支持图片预加载,更重要的是有高效的性能,比较遗憾的是目前仅支持 iOS 11+。

SwiftCoroutine

@四娘:一个 Swift 协程的第三方库实现,提供了 Future 和 Channel 等功能:

// 在主线程执行协程
DispatchQueue.main.startCoroutine {
    
    // 返回 CoFuture<(data: Data, response: URLResponse)>
    let dataFuture = URLSession.shared.dataTaskFuture(for: imageURL)
    
    // 挂起协程 await CoFuture 的结果,并且不会阻塞线程
    let data: Data = try dataFuture.await().data

    // 把 data 转成 UIImage
    guard let image = UIImage(data: data) else { return }
    
    // 在 global queue 执行耗时任务,在不阻塞线程的同时 await 结果
    let thumbnail: UIImage = try DispatchQueue.global().await { image.makeThumbnail() }

    // 在主线程将 image 设置给 UIImageView
    self.imageView.image = thumbnail
}

音视频

macOS 10.15: Slow by Design

@老驴:在379 期的 ATP 中讨论了他们在升级了 macOS 10.15 之后明显感觉系统变慢。本文的作者就根据这个去排查问题的根源,找出解决方案,并记录下其中的每一步。

不知道有多少人感知到了这个问题的存在,如果你对系统底层感兴趣的话,不妨来看看这些作者们是怎么一步一步发现问题根源并解决问题的。

内推

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

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

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

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

关注我们

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

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

说明

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

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