# 老司机 iOS 周报 #232 | 2023-02-13

![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) 提出。

## 新闻

### [Swift 5.7 在 iOS 16 以下的系统创建 Task 时可能会发生 Bad access](https://github.com/apple/swift/issues/63420)

Swift 团队在迭代的过程中删去了 Concurrency 相关代码的一个字段，内存布局产生变化，导致 iOS 16 以下的系统在创建 Task 时，部分情况下内存访问会出错，导致崩溃。

目前已经在主线分支完成修复，按照去年的发布节奏，可能会在三月份发布的 Xcode 里带上这个修复。遇到这个问题的同学如果着急的话，可以先回退到 Xcode 13.x 版本。

##  Developer - 设计开发加速器

### [在 App 或游戏内创造无障碍体验](https://developer.apple.com/cn/accelerator/)

通过 Apple 操作系统内置的辅助功能、辅助功能 API 和开发者工具，开发者们可以为每个用户创建绝佳的无障碍体验。了解如何通过视觉设计和辅助功能技术适配，让你的 App 或游戏对每个人可用。报名截止 2 月 20 日。

## 新手推荐

### 🐎 [如何实现 iOS 16 带来的 Depth Effect 图片效果](https://mp.weixin.qq.com/s/9ITEbW1_EGu_2vrVfrZ9lA)

[@zoeGuo](https://github.com/zoeGuo): iOS 16 系统为我们带来了比较惊艳的桌面锁屏效果：Depth Effect。它可以使用一张普通图片当背景，同时可以在适当的地方遮拦住部分桌面组件，形成一种景深的效果。那么我们可以在自己的 App 实现类似的效果吗？文章介绍了如何使用[苹果机器学习官网](https://developer.apple.com/machine-learning/models/)提供的机器学习模型 DeeplabV3 一步步实现 Depth Effect 效果的。虽然 DeeplabV3 模型在具体应用中还有一定的局限性，但作为尝鲜体验也是非常不错的～

## 文章

### 🐕 🌟 [夸克 iOS Top1 JSC 崩溃攻克之旅](https://mp.weixin.qq.com/s/0DidXWLDeqXpsjGBv69ITQ)

[@Leo](https://github.com/leomobiledeveloper)：Top Crash 的排查一直是 iOS 开发中的一个难点，尤其是内存相关的问题，往往会崩溃到系统符号里，排查起来经常一头雾水。这篇文章是夸克团队在排查 JSC 崩溃的实践，涵盖了 Crash 分析的整体思路、工具建设和崩溃原理，文章质量较高，推荐阅读。

### 🌟  🐢 [The evolution of Facebook’s iOS app architecture](https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Facebook for iOS (FBIOS) 是 Meta 最古老的移动代码库。自 2012 年该应用程序被重写以来，它已经由数千名工程师共同开发并交付给数十亿用户，它可以支持数百名工程师同时对其进行迭代。经过多年的迭代，Facebook 代码库已经不像典型的 iOS 代码库了，本文将阐明演变背后的技术决策及其历史背景：
- 2014，建立自己的移动框架：React
- 2015，减轻和改进启动所需的更改
- 2016，动态库和模块化
- 2017，重新思考 FBIOS 架构 
- 2018，生成代码的激增
- 2020，Swift 和语言架构
- 2022，架构演变完成了 1%，未来仍将继续

### 🐕 [iOS APP 虚拟内存用量初探](https://juejin.cn/post/7196931784328626234)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：作者先通过对不同设备测试 task_vm_info 中具体值发现了规律：

- 同一种机型 max_address 是固定的，而 min_address 和 aslr 的偏移保持一致
- 不同机型(内存容量)的 max_address 有所不同

接着通过对 XNU 代码的阅读证实了以上的结论，并进一步探讨了 `` 设置虚拟内存范围时机 ``，``Reserved region``，`` 虚拟内存总大小 `` 等内容。最后验证了开启 虚拟内存扩容（com.apple.developer.kernel.extended-virtual-addressing） 后虚拟内存的变化。阅读后会对虚拟内存有一个更加直观的了解。

一个应用场景就是当需要判断某一个指针是否为 malloc 出来的合法指针，除了可以用 ``malloc_zone_from_ptr`` ，还可以前置判断地址是否在 ``task_vm_info.min_address ~ task_vm_info.max_address`` 之间来提升效率。

### 🐎 [Prevent copy & paste into other iOS apps](https://blog.eidinger.info/prevent-copy-paste-into-other-ios-apps)

[@Smallfly](https://github.com/iostalks)：iOS 系统的封闭性给不同 App 之间的通信增加了门槛，而剪切板是为数不多的跨应用通信方案。为了保护用户的隐私，在 iOS 14 之后应用读取剪切板需要用户的授权，但在低系统或者用户误操作的情况下，依然存在剪切板数据被窃取的可能性。

本文介绍了两种保护剪切板数据安全的方法，一种是在 App 进入后台时，清空剪切板内容；另一种是强制使用 `custom pasteboard`，具体实现方案可参阅原文。

### 🐕 [Flutter 3.7 之快速理解 toImageSync 是什么？能做什么？](https://mp.weixin.qq.com/s/ziOCR-sudMGbE0iW3MKewQ)

[@Crazy](https://github.com/jiyan135960)：作者从 toImageSync 方法入手，详细的描述了 toImageSync 性能上带来的优势与副作用。 toImageSync 优势是生成的图像会在 GPU 中常驻，所以它的绘制速度会更快，并且可以重复利用，提高效率。并且 toImageSync 为同步方法，在方法调用上更加自由。作者更是通过对 Flutter 中 SnapshotWidget 的调用方式来详细分析 toImageSync 与标准动画的差别，并通过对比明显展示了 toImageSync 的副作用：“冻结” child 控件。

最后作者更是通过源码对比以及各版本之间的命名差异分析 toImageSync 的设计初衷与作用，这种对源码分析的严谨与执着更是值得开发者的学习。

## 摸鱼周报

[@摸鱼周报 #83](https://mp.weixin.qq.com/s/Ty95hGBIevHaJQ5TU774aQ)：第 83 期摸鱼周报来了，一起来看下本期概要：

* 本期话题：各大搜索引擎开始接入类 ChatGPT 功能

* 本周学习：Python 中的匿名函数与闭包

* 内容推荐：iOS 越狱检测、获取虚拟内存状态、使用 KeyChain 进行持久化等内容

* 摸一下鱼：Stable Diffusion 功能尝鲜；关于技术规划的思考；大厂复盘文档

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 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）
