# 老司机 iOS 周报 #210 | 2022-07-25

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。


## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22)

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

### 🌟 [【WWDC22 110363】App 包大小优化和 Runtime 上的性能提升](https://xiaozhuanlan.com/topic/4675012938)

今年 Apple 在 Objective-C 运行时和链接器底层做了重大优化，包括 Swift 协议检查、Objective-C 消息发送、Retain 和 Release 底层优化以及 Autorelease 自动省略优化。以往开发者往往需要使用各种奇淫技巧来优化包大小，而在 2022 年的当下，Apple 从汇编代码以及编译器、链接器层面做出的优化，就能自动让 App 的包体积得到减小。

### 🌟 [【WWDC22 10026】沟通影像世界的新桥梁——实况文本 API 介绍](https://xiaozhuanlan.com/topic/2861437095)

实况文本（Live Text）是 Apple 为 iOS 15 和 iPadOS 15 新增的实用功能之一，简单来说，实况文本是一个系统级的 OCR 工具，它能够帮助我们把照片、相机界面当中的文字转化为可交互的文本。在 iOS 16 系统中更是开放了一系列封装好的实况文本 API，让我们可以方便在应用中集成实况文本功能。

### 🌟 [【WWDC22 10110】如何搭建一个国际化的应用](https://xiaozhuanlan.com/topic/6498107253)

随着苹果的服务遍布全球，开发者的应用也被世界各地的用户使用。在这样的背景下，开发者们应该如何将自己的应用完成本地化呢？

### 🌟 [【WWDC22 110368/110369】Swift-DocC 新特性](https://xiaozhuanlan.com/topic/3658492071)

去年 Swift-DocC 一经发布就在社区引起了不小的反响，而开源更是为它带来了更强的社区支持。让我们一起看看这一年，这个官方力推的文档工具有哪些方面的进化，一起探索 Swift-DocC 背后的实现原理。

### 🌟 [【WWDC22 110364】揭开 Xcode 构建并行化的神秘面纱](https://xiaozhuanlan.com/topic/0389142657)

本文会从 Xcode 构建的核心概念开始，让读者对构建过程有个初步了解，并提出一个强有力的新工具——构建时间轴（Build Timeline）。最后从 Target 内部的并行优化和 Target 之间的并行优化两方面介绍本次主题。

## 新闻

### [Upcoming transition from the XML feed to the App Store Connect API](https://developer.apple.com/news/?id=yqf4kgwb)

苹果预计将在 2022 年 11 月下线 XML Feed 的请求，苹果提供了 App Store Connect REST API 来进行代替。新的 REST API 可以支持对 IAP、订阅状态、元数据、定价 等功能的自动管理。XML Feed 将继续对现有的 Game Center 管理提供支持。

关于 App Store Connect REST API 的进一步具体使用与介绍可以查看我们今年的内参：[【WWDC22 10043/10044/110404】App Store Connect 中的新特性及最佳实践](https://xiaozhuanlan.com/topic/1502478369)。


## 文章

### 🐕 [StoreKit2 实际接入时候的踩坑与解决实录](https://juejin.cn/post/7122458652945956878)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：本文主要内容如下
- lipo 裁剪拼接，32 位（armv7）环境下也可以在同一个 framework 内集成 StoreKit2
- 通过 md5/pkcs7 等方式处理用户凭证为 uuid，同时兼容 applicationUsername(Original StoreKit) 与 appAccountToken(StoreKit2) 以获得订单与用户的关联
- 介绍兼容新旧两套的交易通知的验证逻辑，减少用户掉单的情况

### 🐎 [UIPasteBoard's privacy change in iOS 16](https://sarunw.com/posts/uipasteboard-privacy-change-ios16/)

[@张嘉夫](https://github.com/josephchang10)：在 iOS 16 中，用户可以在某个 app 尝试读取剪切板数据之前允许或拒绝读取权限。和位置等其他隐私权限类似，在 app 尝试访问剪切板数据时，会向用户显示一个警告弹窗。但在当前的 beta 版本中，`UIPasteBoard` 的隐私权限与其他权限在行为上存在几处不同之处，例如用户做出的选择在 app 重新构建之后不会被记忆，以及该权限不会在 app 的隐私设置中显示，以致用户在允许之后无法再进行更改等。此外，作者还提供了三种方式来避免在访问剪切板数据时显示权限弹窗：

- 用户通过选项菜单主动粘贴
- 用户使用键盘快捷键（Command+V）进行粘贴
- 使用 iOS 16 新增加的 `UIPasteControl`

### 🐕 [MemoryThrashing：抖音直播解决内存抖动实践](https://mp.weixin.qq.com/s/KSSWuk6y3A6qL7WPL9irvA)

[@Leo](https://github.com/leomobiledeveloper)：内存有较大波动的时候往往会导致峰值过高或者驻留对象过多，进而直接或者间接造成 OOM。本文是抖音直播基础技术团队提出的 iOS MemoryThrashing 解决方案，通过采样多个时刻的内存（主要监控 class 的实例个数）， diff 出内存信息找出 top 增长，达到归因的目的。


### 🐕 [一键释放iOS 64位App潜力](https://www.toutiao.com/article/7116717500678570507)

[@红纸](https://github.com/nianran)：本文主要讲述一个冷门知识，利用两个配置可以扩大虚拟内存的申请上限（com.apple.developer.kernel.increased-memory-limit、com.apple.developer.kernel.extended-virtual-addressing）。遇到申请虚拟内存失败导致 Crash 的可以试下。

### 🐕 [04 - 探究 iOS 底层原理 | ARM64 汇编](https://juejin.cn/post/7115302848270696485)

[@AidenRao](https://weibo.com/AidenRao)：在探究底层原理过程中，我们必须掌握一定的前知识，才具备探究底层原理的手段。因此，作者分享了 iOS 系统真机环境下，ARM64 硬件架构的相关汇编知识。浅显易懂，值得阅读。


## 工具

### 🐎 [抢先体验! 在浏览器里写 Flutter 是一种什么体验？](https://mp.weixin.qq.com/s/BZgc2VWWqOvUjZyo1FS3nw)

[@极速男孩](https://github.com/ztlyyznf001)：Zapp 是一款由 Invertase 公司提供的在浏览器中构建 Flutter 应用的服务。提供了和桌面端类似的高亮语法、自动完成、调试、Git 代码管理、测试等功能，让我们在 iPad 上写 Flutter 成为了可能。具体可以在 [Zapp 应用主页](https://zapp.run) 了解。

### 🐕 [iOS 為多語系字串買份保險吧！. 確保 Localizable.strings 文字檔不被意外改壞 | by ZhgChgLi | ZRealm Dev. | Jul, 2022 | Medium](https://medium.com/p/48a8526c1300)

[@Barney](https://github.com/BarneyZhaoooo)：本文主要介绍了使用 SwifGen & UnitTest 来确保多语言的安全。
Localizable.strings 这样的纯文字经常会漏掉或者改错，又或者是 key 直接展示给用户，这些都是很不好的体验。

解决方案
- 使用 swift 编写完整的检查工具
- Xcode13 内建 Build Time 检查 Localizable.strings 的正确性
- 使用 SwiftGen 取代原始 NSLocalizedString String Base 存取方式
- UnitTest 检查


### 🐎 [妈妈再也不用担心我找不到 iOS 学习资料啦](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247485043&idx=1&sn=d19ea1c32495eb40c78d6356819aa5e3&chksm=ceea4bd3f99dc2c55c8d8f8abf3071dd9aeca1a59cd4e764ac2b886ed785e81a661e441ad414&token=2062691669&lang=zh_CN#rd)

[@J_Knight_](https://github.com/knightsj)：本文分享了 iOS 相关的学习资料，包括 iOS 相关的在线学习资料（Awesome iOS），书籍以及公众号，另外也附上了 WWDC 和 Human Interface Guidelines 等官方资源。

## WWDC22 内参更新

### 🌟 [【WWDC22 10116】初见 CKTool JS](https://xiaozhuanlan.com/topic/8235470691)

本文将带你了解如何使用 CKTool JS 自动化管理 iCloud 容器。展示如何配置 CKTool JS 来管理容器、修改记录以及操作数据。我们还将探讨如何将 CKTool JS 集成到自动化工作流程中。为了更好地理解，建议先了解 CloudKit、JavaScript 和 npm。

### 🌟 [【WWDC22 10097】What's new in App Clips](https://xiaozhuanlan.com/topic/6739528410)

在今年的 session 中，iOS 16 将 App Clip 的包体积大小提升到了 15 MB，给了工程师更多的空间来创造更多天马行空的功能。App Clip 诊断工具也帮助工程师更好地解决 App Clip 链接配置问题。CloudKit 和 keychain 让我们可以更大程度地复用 App 中的代码来让 App Clip 的开发变得轻松。App Clip experiences API 可自动化管理你的 advanced App Clip experiences。

### 🌟 [【WWDC22 10038】SKAdNetwork 4.0 新特性](https://xiaozhuanlan.com/topic/3468519720)

SKAdNetwork 是苹果于 2018 年推出的 App 安装归因框架，主要目标是在保护用户隐私的前提下，将归因数据发送给广告商，帮助广告主衡量广告的投放效果。在 WWDC 2022 上，苹果介绍了最新版本 4.0 的新特性，让我们一起来看看吧！

### 🌟 [【WWDC22 10113/10114/110565】在 iOS 上探索 EDR](https://xiaozhuanlan.com/topic/1874509623)

EDR（Extended Dynamic Range 扩展动态范围），是 Apple 的 HDR 渲染和像素表示技术，能更好地表示图像的亮暗细节，还原更真实的世界。2021 年 WWDC 苹果给不支持 HDR 的 Mac 带来了 HDR 的“支持”，今年苹果给不支持 HDR 的 iOS 也带来了 HDR 的“支持” -- iOS EDR 渲染技术。

### 🌟 [【WWDC22 10148】Meet Apple Music API & MusicKit](https://xiaozhuanlan.com/topic/1625743890)

本文简要介绍了 MusicKit & Apple MusicAPI 的背景和能力，并通过一个简单的需求，详细介绍了在播放列表、搜索等场景下 Apple MusicAPI 的使用过程。

### 🌟 [【WWDC22 10162】使用网格着色器处理几何变换](https://xiaozhuanlan.com/topic/0723561894)

本文主要讲述 Metal 3 新推出的网格渲染管线，其中包括对象着色器（Object Shader）和网格着色器（Mesh Shader），文章分为三个部分：
- 第一部分，新旧渲染管线对比，对网格渲染管线有个初步认识
- 第二部分，通过两个具体的例子，更深入地感受网格渲染管线
- 第三部分，网格渲染管线的一些限制，包括着色器限制以及运行新管线的设备要求

### 🌟 [【WWDC22 10157/10158】SF Symbols 4 使用指南](https://xiaozhuanlan.com/topic/8712590364)

本文基于 WWDC 2022 Session 10157 和 Session 10158 梳理。本文从 SF Symbols 4 的新特性切入，讨论 SF Symbols 这款由系统字体支持的符号库有哪些优点以及该如何使用。在这次 WWDC 2022 中，除了符号的数量的增加到了 4000+ 之外，还有自动渲染模式、可变符号等新特性推出，让 SF Symbols 这把利器变得又更加趁手和锋利了。

### 🌟 [【WWDC22 10039】Xcode StoreKit 测试的新功能](https://xiaozhuanlan.com/topic/5842093617)

本文主要聚焦于 In-App Purchase 内购商品的测试。在 Xcode 12 之前，App 内购买项目是不能在 Xcode 模拟器中进行购买，只能使用真机进行测试内购充值，因为模拟器无法连接到 App Store 服务器进行交易。苹果在 WWDC20 推出了 StoreKit Testing，通过 Xcode 12 创建 StoreKit 配置文件和搭建本地测试环境，实现本地 App 内购买和验证收据等测试流程，而无需依赖 App Store 服务器。而今年的 WDC22 苹果对 StoreKit 测试流程改进完善，包含 Xcode 14 中测试功能的优化，支持订阅商品更多场景的测试，还有 StoreKit 配置文件通过 App Store Connect 自动同步等等。

### 🌟 [【WWDC22 10096】What’s new in Privacy](https://xiaozhuanlan.com/topic/9482017536)

苹果近几年一直致力于用户隐私保护方向的构建和优化，在技术的不断更新中，同时也给开发者们带来更加复杂的的交互，但是这无疑是增加了我们每个人保护隐私的意识。今年在 UIKit 框架中优化了对用户更加友好的使用后台定位 App 提示，Safety Check、PassKey 等等，这一篇文章更多的是给我们展示了关于隐私架构相关的概况，更多原理相关内容，可以根据文中链接尽情的阅读吧！愿我们的互联网环境的隐私越来越美好。

### 🌟 [【WWDC22 10117】“对讲机”的体验提升](https://xiaozhuanlan.com/topic/2863915470)

本文主要是通过分析业内 app 中“对讲机”这类产品的功能痛点，结合 Session 10117：Enhance voice communication with Push to Talk 的内容，解析了 iOS 16 在解决这些痛点时的新增技术要点，并结合这些技术升级了“对讲机”的技术方案，最后讲述了 PushToTalk.framework 的如何集成、代码上如何使用，以及开发要点。

### 🌟 [【WWDC22 10126】Discover ARKit 6](https://xiaozhuanlan.com/topic/2439056187)

本文将分两部分介绍 ARKit 相关的内容，第一部分是 ARKit6 相关的特性，第二部分是对 ARKit 历史版本从跟踪、理解、渲染三个角度进行梳理和归类。内容不深，应该容易读懂，感谢品尝。


## 摸鱼周报

[@摸鱼周报 #61](https://mp.weixin.qq.com/s/WfwqRhC-9-isUanv8ZnvMQ)：第 61 期摸鱼周报来了，来看下本期概要有没有你感兴趣的内容：

* 本期话题： Developer 设计开发加速器｜探索 Create ML Components
* 本周学习：解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题
* 内容推荐：SwiftUI 相关的几篇博文
* 摸一下鱼：几个摸鱼网站推荐

## 关注我们

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

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

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

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

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
