老司机 iOS 周报 #92 | 2019.11.25

5,290 阅读5分钟

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

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

新闻

​Flutter 智能闹钟挑战赛约你来战!

@老驴:是不是学了 Flutter 却无处练手?机会来了!Google 联合 Google Assistant,联想,一起搞了这个智能闹钟挑战赛,用 Flutter 为联想智能音箱开发一个智能闹钟功能,不仅能让你练手 Flutter, 更能赢得最高大奖:一台顶配的 iMac Pro 哦。心动不如行动,赶紧点击链接参与起来!

文章

🌟 🐕 Command-line argument parsing using Swift Package Manager's SPMUtility module

@looping:本文介绍了通过使用 SPM 的 SPMUtility 模块配合解析终端命令参数,来完成编写命令行工具的任务。在列举完基本的命令参数概念和设计规则后,就开始工具编写实战,讲解过程非常详细,附带源码,入门教程必备。在文章最后,作者提到了前段时间他自己写的另一篇文章,Building a CLI tool using Swift and Vapor's Console module,使用这两个模块都能写出很好的工具,并且也有各自的设计风格,有写命令行工具需求的小伙伴可以深入了解下。

🐕 Thread Sanitizer explained: Data Races in Swift

@EyreFree:本文通过对并发编程中经典的数据竞争(Data Race)问题进行了举例、分析,由此引入和介绍了 Thread Sanitizer(也称为 TSan)的使用方法以及它的基本工作原理,并演示了如何依靠它来解决文中举出的数据竞争问题。Thread Sanitizer 是在 Xcode 8 中引入的基于 LLVM 的工具,用于审查 iOS 代码中的线程问题,能给我们的并发编程调试带来很大的便利,值得一看。

🌟 🐢 Flutter 应用性能优化最佳实践

@CrazyCoderShi:通常来说,Flutter 技术构建的应用程序在默认情况下都是高性能的。所以你只需要避开常见的陷阱,就可以获得优异的性能,而不需要使用复杂的分析工具对细节做优化. 本文总结了一些 Flutter 应用开发过程中的最佳实践, 可以有效的帮助你避开一些坑点.

🐕 自定义WKWebView显示内容(一)

@J_Knight_:本文作者结合代码与 Demo 展示分享了的如何通过 WKContentRuleList 来制定 WKWebView 的内容过滤规则(例如更改 http 请求的 URL 为 https );以及如何通过 WKURLSchemeHandler 来加载相册中图片显示到 WKWebView 中的方案。

🐎 Message-ID and Mail.app Deep Linking on iOS and macOS

@四娘:这周 NSHisper 给我们带来的是 Deep Linking 相关的内容,讲解 iOS / macOS 里 Mail.app 使用链接跳转时如何编码链接信息,避免信息泄漏。

🚧 🐎 iOS Deferred Deep Link

@老峰:Deferred Deep Link 是指用户打开一个 Web Page 的时候并没有安装对应的 App,希望用户在安装 App 以后可以 Deep Link 到对应内容,本文作者介绍了首先介绍了 Deep Link 概念以及其局限性,然后通过实例给出使用 Firebase Dynamic Links 方式实现 iOS Deferred Deep Link 的过程。

🐕 NSCopying uses in Swift

@极速男孩:和 Objective-C 中一样,在 Swift 中同样有 NSCopying 和 NSMutableCopying。本文首先介绍了 NSCopying 的用法和原理。然而在 NSMutableCopying 中,和 Objective-C 不一样,当你不需要定义一个单独的 mutable 类型的情况下,在 Swift 中只需要用 let 和 var 就可以了。

🐎 Flutter 中文文档:使用 Mockito 模拟依赖关系

@AidenRao:本篇教程介绍了 Mockito 包的基本用法,模拟 Web 服务或数据库,根据条件返回特定结果,解决直接依赖 Web 服务或数据库的以下不便:

  • 访问线上服务或数据库会拖慢测试执行效率。
  • 原本可以通过的测试可能会失败,因为 web 服务或数据库可能会返回不符合预期的结果。
  • 使用线上 web 服务或数据库来测试很难覆盖全所有可能成功或失败的场景。

工具

🐕 自动切换输入法 - Mac

@水水:Mac 上的自动切换输入法 App, 支持所有常用输入法,能够根据当前正在运行的不同的应用程序,自动切换对应的输入法,免去人工手动切换的麻烦~

代码

IBPCollectionViewCompositionalLayout

@张嘉夫:在 WWDC 2019 上 Apple 为 UIKit 增加了一个新的 UICollectionViewCompositionalLayout 类,让创建复杂的自定义 collection view 布局变得简单很多。在 iOS 12 及更早的版本中,我们只能继承 UICollectionViewLayout 来实现自定义布局,要重写很多方法,导致容易出现问题。IBPCollectionViewCompositionalLayout 这个库让 iOS 12 及之前的版本也能够支持 UICollectionViewCompositionalLayout,并且可以使用同一套 API,无需同时维护两个代码库。

MagazineLayout

@zvving:为 UICollectionView 提供易用的垂直滚动网格和列表布局。相较于 UICollectionViewFlowLayout,支持多列、高度自适应,Section 自定义背景,Section Header/Footer 跟随滚动等增强特性。

Airbnb 家出品,在其产品页面中已广泛应用,久经考验,推荐选用。

内推

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

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

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

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

关注我们

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

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

说明

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

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