老司机 iOS 周报 #201 | 2022-05-09

10,222 阅读8分钟

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

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

新闻

阐明 App Store 改善流程的标准和新的限期延长

过去几年,苹果为了保证贯彻在安全和隐私方面的最新改革,陆续下架了 280 万个 App。同时还强调了,在过去三年内从未更新且未达到最低下载量 (即该 App 在连续 12 个月内完全没有或只有极低的下载量) 时,其开发者将会收到电子邮件,告知该 App 已被识别并可能从 App Store 中被移除。具体细节请参照:App Store 改善的支持页面

SSWG 2021 Annual Update

Swift 服务端工作组发布了 2021 年的工作总结:

以及 2022 年的目标:

  • 继续扩大生态圈
  • 继续加强 Concurrency 的支持
  • 拓展工具链
  • 缩短编译构建时间
  • 提升 Swift 服务端的使用率

 Developer - 设计开发加速器

电商购物类 App 专场:为你的电商购物 App 提升体验

2022 年 5 月 10 日至 11 日(报名截止 5 月 09 日)

此活动将全面讲述 Apple 的相关最新技术在电商和购物领域不同使用场景中的最佳实施性,以及推荐的设计理念等,同时,也希望和行业从业者一起探讨目前遇到的问题、机遇和挑战。

案例学习:为 iPad 设计卓越的 App

2022 年 5 月 12 日(报名截止 5 月 11 日)

通过理论讲座与案例分析,学习如何充分利用 iPad 的大屏幕提供更高效的导航机制和更有效的设计模式,如何利用 iPad 多样的输入能力提供更加丰富的交互方式,以及如何面向全新的超大尺寸小组件进行设计。

156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f

文章

🐢 iOS StoreKit 2 新特性解析

@ChengzhiHuang:StoreKit 2 距离发布已经快一年了,本文对整体的 Client/Server API 使用、抉择升级与否等问题,做出了完整的介绍与阐述。适合有内购开发需求的同学阅读。

🐕 Mutex vs Semaphore: What’s the Difference?

@Damien:在多线程我们常用互斥锁和信号量来保证线程安全,在本文中会基于:

  • 什么是互斥锁?
  • 信号量的使用
  • 互斥锁的使用
  • 信号量与互斥锁之间的区别
  • 关于互斥锁和信号量的常见误解
  • 信号量的优点
  • 互斥锁的优点
  • 信号量的缺点
  • 互斥锁的缺点

几个角度来带读者深入理解互斥锁和信号量。对于 iOS 开发者来说,值得一读。

🐕 淘宝小程序体验优化:数据分析和优化实践

@Barney: 本文介绍了淘宝小程序的体验优化,重点介绍了指标的定义和数据实践的探索,并且取得了不错的业务效果。

  • 写在前面:如何定义好的体验
  • 数据采集
  • 数据分析和优化实践
  • 工具和平台
  • 数据效果

🐕 Flutter PlatformView 优化

@邦Ben: UC 的 U4 内核团队针对 Flutter 上的 PlatformView 做了深入的研究,并且做了一下优化 PR(部分合入到官方中),主要是针对 Android 的场景,目前官方提供的 Virtual displays 和 Hybrid composition 都存在一些问题,Virtual displays 存在功能性问题,Hybrid composition 存在因为线程合并带来的性能问题,以及死锁风险,且在 Android Q 以下因为内存拷贝导致性能变差。在之前的 Hummer 引擎中实现了挖洞模式,并且通过移植 Roger 大神在 U4 浏览器内核中实现的 Embed Surface 方案,来进一步优化。并且 Embed Surface 方案被合入到主线,后续会逐渐弃用 Hybrid composition。因此可以期待最新的 release 版本。

最终得到的结论:

  • 「挖洞模式」的性能仍然是最好的。在挖洞模式能满足的场景下,请考虑优先使用挖洞;
  • Embed Surface 除了仅支持 Android 6.0 及以上外,没有明显短板,其帧率在大多数场景下可以与挖洞模式持平;
  • 从测试数据看,不合并线程的 HybridComposition 的帧率波动比较大,并不比 Embed Surface 有优势。另外,因为不能完全避免 Android Q 以下的内存拷贝,同时还需要处理部分场景下的同步问题,所以我们不会继续优化该方案。

参考: Hummer 引擎优化系列

🐎 AVPlayer 播放器对远端缺失 Content-Range 功能的本地支持和处理

@JonyFang: 通常来说 H264/HEVC 编码可以通过 AVPlayer 直接播放,但是相对弱些的后台路由,在定位文件的时候并不支持 Content-Range 和系列相关报头,则会导致无法播放。本篇主要针对这类 case,通过 WebServer 的方式来解决该类问题。

🐕 Binary targets in modern Swift packages

@AidenRao:本文总结了 2022 年在 Swift 包中使用二进制文件的最佳实践:

  • 如果你需要为 iOS/macOS 项目添加预编译库或可执行文件,你应该使用 XCFramework, 并为 iOS 设备、macOS 设备和 iOS 模拟器包含单独的二进制文件。

  • 如果你需要创建一个插件并运行一个可执行文件,你应该将其嵌入为一个 Artifact Bundles,其中包含适用于不同支持架构的二进制文件。

🐢 Flutter 新一代图形渲染器 Impeller

@CrazyCoderShi: Flutter在2022年的Roadmap中提出需要重新考虑着色器的使用方式,计划重写图像渲染后端。最近该渲染后端 Impeller(叶轮)初见端倪,本文就从 Flutter 图形渲染优化历史讲起,一步步带你了解 Flutter 下图形渲染的优化,以及最新开发中的 Impeller ,详细带你了解 Impeller 的方方面面

🐢Locking in WebKit

@水水:WebKit 团队在 2015 年 8 月用新的 WTF::Lock(WWeb Template Framework)替换了WebKit中所有的自旋锁和操作系统提供的互斥锁,统一了 Lock 的实现,与操作系统提供的锁(如pthread_mutex)相比,WTF::Lock 小64倍、快180倍。与操作系统提供的 pthread_cond 等条件变量相比,WTF::condition 要小64倍。本文首先介绍了一些关于锁的背景知识,重点介绍了如何构建 WTF::Lock 和 WTF::Condition。

🐎 macOS 进化史

@红纸:作为 iOS 的开发人员,我们每天都在使用着 macOS,你对这个系统的历史了解有多少呢?本文将带你了解 macOS 的发展历史,从早期系统不成熟的 Mac OS Classic 到融合优秀特性 NeXTSTEP 后成为 MacOSX。了解 Darwin、XNU、Mach、BSD 的基础概念以及其之间联系、Darwin 的开源之路。

🐕 Use Dependency Injection to Unit Test a ViewModel in Swift

@含笑饮砒霜:依赖注入是一种将一个或多个依赖对象传递给另一个对象的技术。本文将基于 Weather App 在初始化时将天气服务传递给天气 ViewModel。这将允许使用模拟天气服务在单元测试中测试 ViewModel,而无需访问 OpenWeather 或任何网络调用。依赖注入使类或结构独立于它所依赖的对象的创建,有助于创建松散耦合的应用程序。

代码

GRDBQuery

@anotheren:GRDBQuery 是一个为 GRDB.swift(一个 Swift 版本的 SQLite 工具库)准备的扩展,提供了 @Query 的 property wrapper,简化了数据同步。 它类似于 SwiftUI 中为 CoreData 提供的 @FetchRequest

内推

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

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

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

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

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参

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

说明

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

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