老司机 iOS 周报 #207 | 2022-07-04

3,534 阅读13分钟

ios-weekly.png

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

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

《WWDC22 内参》

上周一共更新了 19 篇文章,目前总共已经更新了 34 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~

🌟 【WWDC22 10078】降低网络延迟:让你的 App 变得更快

如何让 App 变得更快,对于开发者来说是一个永恒的课题。2021 年,苹果给大家分享了许多网络延迟优化相关的理论知识,而今年,苹果在去年的基础上,又为我们带来了这一篇颇具实战指导意义的分享,从客户端侧、服务端侧、网络协议侧三个方面入手提供了一系列行之有效的建议,帮助开发者们更好的分析和改善应用的网络延迟状况,从而让你的 App 变得更快。

🌟 【WWDC22 110427】What's new in Xcode

本文主要从 Xcode 14 功能上的更新以及体积性能的改进入手,通过简单 Demo 的演示,分享此次 Xcode 令人振奋的一些更新。本文将主要聚焦 Xcode 本身的性能优化提升、开发者效率提升以及其他新增功能这几个角度,通过对这些更新的了解,相信会对大家的日常工作开发有很大的帮助。

🌟 【WWDC22 110362】快速链接:提高构建和启动耗时

本 session 是由苹果链接器团队的首席工程师 Nick Kledzik 带来的关于如何实现快速链接的分享。主要介绍了苹果近期在静态链接和动态链接方面的一系列优化,同时帮助大家理解链接过程中的底层细节,让大家可以提升自己 App 的静态和动态链接性能。

🌟 【WWDC22 110355】Meet Swift Async Algorithms

本文通过阅读源码的方式,来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为三部分:

  • 第一部分介绍对于多个输入情况下,处理输入/输出结果的逻辑
  • 第二部分介绍 Clock 协议,以及相关的使用方式和效果
  • 第三部分介绍在 Clock 协议上实现的两个算法
  • 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架

🌟 【WWDC22 110351】使用 Swift 并发消除数据竞争

本文主要回顾了在 Swift 5.5 中引入的 Sendable 协议和用法,同时介绍了 Swift 5.7 编译器中基于 Sendable 协议实现的边界检查,防止在任务切换或者 Actor 切换时造成的数据竞争。探讨了低级数据竞争( low-level data race ),也探讨了如何通过在 Swift 并发中实现事务原子性从而防止高级数据竞争( high-level data race ),同时讲述了如何在安全的并发环境中保持代码逻辑的执行顺序。

新手推荐

🐕 iOS内存分析之Memory Graph

@老驴:Memory Graph 是 iOS 开发中经常用到的非常好用的工具。对于一些比较难 debug 的内存泄露类型的 bug 来说,可以做到事半功倍的效果。这篇文章介绍了怎么样使用 Memory Graph,也包括了内存泄露的分析的基础分析方法,如果你是刚接触 iOS 开发的话,不妨来读一读。

文章

🐎 What Apple might do with distributed computing

@Smallfly:本文针对 Swift 不断迭代的并发模型,提出了对苹果在分布式计算领域的发展设想。作者期望苹果系统的跨进程通信能力,能复用在跨设备通信上,来提高苹果设备的协作性。并例举了分布式计算能解决的两个现存问题,一个是 Siri 唤起多设备,设备不能统一化决策问题;另一个是 HomeKit 数据共享问题。

🐎 Existential any in Swift explained with code examples

@享耳先森:在 Swift 5.6 中,SE-335 引入了 existential any,Swift 5.7 对其进行了增强。本文详细介绍了 any 关键词具体用法、和 some 的差异及对性能的影响。

🐕 如何持续突破性能表现?DX 性能优化策略详解

@Barney 本文介绍淘宝乃至整个阿里集团内广泛使用的 Native 动态化方案 DinamicX,一步步带我们揭开它的神秘面纱,文章干货比较密集,需要仔细品读。

  • DX 现状
  • 管线优化
  • 渲染优化
  • 离屏资源管控框架

🐢 使用 LLVM

@anotheren:来自戴铭的 LLVM 系列文章,目前已更新至代码真实使用情况的篇章,介绍了如何使用 LLVM 低成本地检查代码使用情况。如果你也需要检查代码的新陈代谢来控制包体积,不妨看看这篇文章。

🐎 Some keyword in Swift: Opaque types explained with code examples

@Damien: some 关键词是 Swift 5.1 的新特性,它的作用是允许你在不定义具体类型的情况下描述预期的返回类型,在 Swift 中可帮助简化代码并提高可读性。同时在 Swift 5.7 也引入了许多改进并且编译器也可以进行代码优化,本文作者细心整理了使用 some 的例子和注意事项,想必看了本文之后能对 some 的理解和使用更上一层楼。

🐎 Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”

@老峰:本文主要介绍一下钉钉 Flutter 业务灰度过程中,在桌面端遇到并处理过的几个 FlutterEngine 层面的 Bug。具体包含以下内容:

Mac 端:

  • FlutterEngine 退出之后内存泄漏问题;

  • FlutterEngine shutdown 阶段死锁问题;

  • 低版本 macOS OpenGL 析构阶段 Crash 问题;

Windows 端:

  • Win7 设备渲染模块「Crash + 残影」问题;

  • FlutterPlugin 注册阶段野指针 Crash;

  • Flutter Window 可见性变化之后页面白屏。

《Dutter 系列文章》分享了钉钉在跨四端方框架的技术实践与踩坑经验,共分为上、下两篇,上篇内容可点击《钉钉 Flutter 跨四端方案设计与技术实践》,感兴趣的小伙伴建议阅读。

🐕 Flutter 渲染性能问题分析

@EyreFree:Flutter 有很多优点,虽然它在渲染性能上有不少缺陷,但是某种程度上,某些缺陷也是为了实现更高层次的设计目标而不得不承受的结果。这篇文章就是对比 Web (Chromium) 和 Native (Android),对 Flutter 的渲染性能问题进行深入分析,特别是分析惯性滚动性能糟糕的原因。并且提供了一些优化思路和优化结果的分析数据,对 Flutter 性能优化感兴趣的朋友不要错过。

🐎 信息安全 | 互联网时代,如何建立信任?

文章从信息安全是什么说起,到为什么,到怎么做,脉络清晰,层层递进,最后还聊了一些相关的应用加深理解。

通过文章可以让读者回答并理解以下问题:

  1. 信息传输一般使用对称加密+非对称加密,为什么?不能只使用其中一种吗?
  2. 信息安全为什么需要数字签名?
  3. 为什么签名前需要做哈希操作?
  4. 信息安全为什么需要数字证书?

文章的终极目标是:当我们在遇到密码学相关问题时,不再恐惧和迷惑。

推荐人:doubleLLL3(公众号 Bo2SS)

工具

Git 相关

@红纸: lazygit 是一款 GUI 化的 Git 终端交互工具,其界面简洁,通过快捷键就能触达各个指令功能,实属是键盘控的福音了~

约定式提交提供了一种提交 git commit message 的规范化里面,旨在提供「一种用于给提交信息增加人机可读含义的规范」,举例用 "feat(Person): Submit new parameters" 来提供人机可读的交互,feat 代表新功能 (Person) 则代表 Person 作用域,后面则是具体的提交说明。使用约定式提交,我们还可以利用 CI/CD 来自动化生成 CHANGELOG,包括我们 SDK 的 Release Note 都可以这么去做。git-cz 则是一款非常优秀的引导使用约定式提交工具。

WWDC22 内参更新

🌟 【WWDC22 10074】AppKit 框架的新特性

AppKit 是 macOS 应用的核心框架之一。WWDC22 对 AppKit 框架的更新包括对设计语言的完善和平台一致性相关的演进。本文将介绍 AppKit 在 WWDC22 上的新特性和开发者的适配要点。

🌟 【WWDC22 110344/10109】 Developer Mode 与 Notarization

苹果作为隐私安全方面的先行者,一直致力于让用户能够下载到可靠和安全的应用,并确保用户和开发者的使用体验,试图在安全性和易用性上达到一个良好的平衡。 本文介绍的 iOS 方向的 developer mode 和 macOS 方向的 notarization 都是苹果基于这些原则的最新实践。

🌟 【WWDC22 10041】Wallet 和 Apple Pay 的新功能

本文通过回顾 WWDC 2022 了解 WalletApple Pay 常规更新和新增的功能。其中常规更新包含:无接触支付Mac 同步 Apple Pay 功能SwiftUI 新增 API等功能,新增功能包含:多商户支付自动支付订单跟踪身份验证等功能。最后更新了交通卡支持 Apple Pay 的城市和地区以及目前支持的设备,并提供相关 Demo 以供大家测试。

🌟 【WWDC22 10003】初见 WeatherKit

本文将介绍 Apple 新推出的 WeatherKit 天气服务。全文共分为四个部分:第一部分是介绍 Apple 平台中的天气 app。第二部分是介绍支持查询的天气数据集的具体指标。第三部分是介绍如何使用 Swift 和 Python 3 进行接入及接入注意事项。第四部分是总结和展望。

🌟 【WWDC22 10075】结合使用 SwiftUI 和 AppKit

本文以 macOS 版本的快捷指令应用(Shortcuts)为例,介绍把 SwiftUI 和 AppKit 结合使用的一些方式和注意事项。

🌟 【WWDC 110371】 使用 Xcode 进行多平台开发的那些事

本文将配合 Xcode 14 从以下几个方面讲述多平台项目从开发到上线的过程。

🌟 【WWDC22 110345】 使用 Endpoint Security 保护 Mac 安全

本文将主要聚焦于 Mac 的 EndPoint Security 功能的新特性。全文共分为 3 个部分:第一部分是介绍端点安全将取代之前的 kAuth 等 API 。第二部分是对 Muting 技术的介绍,包括如何使用官方 API 。最后一部分是关于 eslogger 可以提供更加丰富的端点安全事件。

🌟 【WWDC22 10076】 将你的 iOS 应用搬到 Mac 上

SwiftUI 可以跨整个苹果生态,Flutter 可以跨大多数主流平台,为什么我还要选 Mac Catalyst ?假如有一套已经基于 UIKit 实现的 iPad 代码想要迁移到 Mac 上的话,Mac Catalyst 将是你的不二之选。本文将为你介绍 iOS 应用迁移到 Mac 上的几种方式,并且展示了新系统中的新接口。

🌟 【WWDC22 10007】 IAP 新特性

本文结合 WWDC21 IAP 相关能力,对 WWDC22 IAP 相关新特性进行了梳理回顾。本年度苹果虽无 WWDC21 的大拆大建,但却进行了大量的小修小补。苹果对基础能力的补充,让 StoreKit 2 从可用变成好用。阅读本文,与我们一同探讨优化 StoreKit 2、App Store Server API 及 App Store Noitfications V2 的相关策略!

🌟 【WWDC22 10155】ScreenCaptureKit:MacOS 上的高性能屏幕录制框架

屏幕录制一直以来都是一个桌面系统需要提供的基本能力,可以应用到很多场景,例如:视频会议中的桌面共享、电脑游戏直播、远程桌面控制等。 今年的 WWDC 苹果新推出了一个 MacOS 上的高性能屏幕录制框架 ScreenCaptureKit。 ScreenCaptureKit 不仅通过提供更加易于理解的 API 来简化开发成本,还大大提升了屏幕录制的性能,以便 MacOS 用户可以获得更佳的使用体验。

🌟 【WWDC22 10089】 What's new in PDFKit

本文基于 WWDC17 Introducing PDFKit on iOS 以及 WWDC22 What's new in PDFKit 两个 Session 的内容梳理,先后介绍了 PDF 的简介、苹果在 PDF 处理中的发展历史、PDFKit 的基本内容以及 PDFKit 最新的特性。

🌟 【WWDC22 10120】进化你的 Core Data Schema

数据迁移是数据库绕不开的话题。在 Core Data 中,轻量迁移更是每一个使用者的必修课。本文将由浅入深的介绍 Core Data 轻量迁移的功能、局限与最佳实践以及迁移在 CloudKit 中的注意事项。

🌟 【WWDC22 10077】验证码的替代者—私有访问凭证

验证码技术一直被用于真实流量识别,虽然比较有效但是也给用户带来了一些不便,于是一些平台尝试收集用户隐私信息来精准识别用户。一向注重保护用户隐私的苹果则认为这种做法不可取,于是苹果带来了新的认证技术:Private Access Token。

🌟 【WWDC22 10061】将多窗口引入 SwiftUI 应用

本文将围绕构建 SwiftUI app 的多窗口进行讨论。 共分为 4 个部分:

  1. 介绍 SwiftUI 生命周期中的各种 scene types,包括几个新引入的 Window 和 MenuBarExtra;
  2. 通过添加auxiliary scenes的方式将这些 scene types 组合在一起;
  3. 介绍一些为特定 scenes 打开窗口的新 API; 4.介绍一些在 app 中自定义 scene 的方法。

摸鱼周报

@摸鱼周报 #58:第 58 期摸鱼周报来了,一起看下本期概要:

  • 本期话题:在您的 App 中提供帐户删除选项
  • 本周学习:如何配置合适的 ATS
  • 内容推荐:WWDC22 推出的新技术和新内容(二番)
  • 摸一下鱼:开启真·摸鱼模式,在线养金鱼;极客风的听歌网站,纯文字的音乐播放器;网页设计博物馆;Stack Overflow 年度调查。

内推

老司机周报团队联合知识小集和 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)