# 老司机 iOS 周报 #234 | 2023-02-27

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

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

### [设计挑战（亚太） 演讲：探索卓越的导航流程设计](https://developer.apple.com/events/view/R67PUKP9H9/dashboard)

与 Apple 设计布道师一起学习重要设计原理的实践方式，并在两项设计挑战当中展示您的设计技能。探索如何运用优秀的导航设计模式来创建更符合直觉的 App，并注册一对一咨询来和 Apple 设计布道师讨论您的设计概念与想法。

在挑战活动的最后，您还有机会和其他参与挑战的开发者进行交流，并与 Apple 设计布道师一起分享各自的想法、设计案例和洞见。

## 文章

### 🌟 🐕 [云音乐 iOS 跨端缓存库 - NEMichelinCache](https://mp.weixin.qq.com/s/jZ6QEuc0qoAn27lYzN1Yfw)

[@JonyFang](https://github.com/jonyfang): 跨端缓存方案类似操作系统缓存模式中的回写模式，在缓存库方案设计过程中需要着重解决回写的缺点，如保证内存缓存、引擎、磁盘缓存数据一致性。基于目标做对应的方案设计，侧重如下几点：

1. 业务接口层。减少接入的难度，还需使接口可控，不让业务方随意访问磁盘等；
2. 责任链模块。为后续日志模块、错误模块设计做准备；
3. 责任链 Runner。支持优先级队列能力、支持优先级高的链插队；
4. 解压 / 合并模块。可自定义配置解压缩库能力，同时减少对三方库依赖（可替换）；
5. 数据库升级；
6. 多版本并存；
7. 本地 Bundle 缓存清理机制；

新缓存框架设计整体的切入点和侧重关注点可供参考，也期待网易云后续放出 `NEMichelinCache` 对应的开源。

### 🐕 [Safely pinning SPM dependencies to exact versions](https://www.polpiella.dev/safely-pinning-spm-depedencies-to-exact-versions/)

[@kemchenj](https://kemchenj.github.io)：使用 Cocoapods 集成依赖时，我们通常会将 Podfile.lock 也加入到 Git 的文件追踪列表里，保证在每次运行 `pod install` 后就能能够导入一样的依赖库版本，让所有人都在同样的环境下开发。

但 Xcode 项目直接集成 Swift Package 时情况会稍微不同，它不会根据 lock 文件来决定导入的 Package 版本，而是会在**版本约束的范围内升级到最高版本**。

例如说 Xcode 项目里 Alamofire 的版本约束是 `2.0.0 - Next Major`（`~> 2.0`），我们在开发时本地使用了 2.0 版本，传到 CI 上打包时刚好 2.1 版本发布了，就会自动升级到 2.1，导致 CI 打出来的包跟本地不同。

这篇文章就介绍了相关的情况以及他们的解决方法，如果大家在工作中也遇到了类似的问题，可以参考这篇文章进行解决。

### 🐎 [Electron 的 GUI 和 Ruby 的 CLI 的一种交互实践](https://mp.weixin.qq.com/s/UmzeZip3KtHH44dkiijujg)

[@红纸](https://github.com/nianran)：本文探索了跨语言进程间的通信方案的实现，总结出文件、Unix Domain Socket 和管道这 3 种通信方式，并将其应用在基于 Ruby 的 CLI 和基于 Electron 的 GUI 在实际开发过程中，最后给出了开发调试的一些实用分析和建议。

### 🐕 [FlutterEngine 桌面端架构浅析](https://mp.weixin.qq.com/s/iKAHo8chgE85zix3ktHfUQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi)：Flutter 作为一个跨端开发框架，在移动端可谓是遍地开花，其本身是完全支持桌面端开发的，但 Flutter 桌面端的资料相对少很多。本篇由钉钉开发团队在落地 Flutter 桌面端的同时对 Flutter 桌面端架构的研究，层层递进，对相关架构的同学可以深入学习。

### 🐕 [云音乐 Android 内存监控探索篇](https://mp.weixin.qq.com/s/tHndnmpxeDihYTIZmsafbg)

[@Crazy](https://github.com/jiyan135960)：内存泄漏问题一直是 Android 开发者最头疼的问题，本文介绍了网易云音乐技术团队在内存泄漏监控方案的探索与实践的思路。作者结合了 Android 主流的内存泄漏监控框架 LeakCanary 与 Koom 的功能，并针对自己软件的实际情况，设计了一套线上线下结合的内存泄漏监控框架。作者更是针对 Android 大图监控（分为线上大图监控与本地图片资源监控）与内存大小监控（分别为启动内存、运行内存和 Java 内存监控与线程监控）进行了详细的介绍，可以给在做内存优化的同学提供一个切实有效的思考方向。

### 🐕 [How to use macOS Assistive Technologies to test in the Simulator](https://www.basbroek.nl/cheating-the-system-for-fun-and-profit)

[@EyreFree](https://github.com/EyreFree): 本文介绍了如何在无需处理 Accessibility Inspector 的情况下使用 macOS 的辅助技术，如 VoiceOver、Voice Control 以及 Hover Text 来更容易地在模拟器中检查和测试某些辅助功能（Accessibility），作者通过视频演示了相应测试方法，并且同时也提示应该始终以真机测试的结果为准，有需要的朋友可以看看。


### 🐕 [使用 RoomPlan 扫描创建参数化三维室内场景](https://mp.weixin.qq.com/s/HCvy7MJJcBUANXt5y47mkA)

[@ZibYang](https://github.com/ZibYang): 本文将主要聚焦于 Apple 的 AR/MR 新 API：RoomPlan 。全文共分为 3 个部分：

- 第一部分是 Apple 的 AR/MR 技术发展回顾，以及 RoomPlan 和 Object Capture 技术背后的原理简介。
- 第二部分是对于 RoomPlan 技术的介绍，包括如何使用官方 API 快速在相关 App 中使用 RoomPlan，以及如何通过数据 API 自定义 RoomPlan 的使用。
- 最后一部分是关于 AR/MR 应用设计的相关建议。

### 🐢 [利用 Xcode 和设备上的检测工具排查卡顿](https://mp.weixin.qq.com/s/5sIJKDozsD1LSOh38hHYTg)

[@WessonWu](https://github.com/WessonWu): 今年 Apple 在开发全链路过程中对于卡顿问题的排查分析工具上做了一次相对较完整的更新，借此机会笔者想将结合本次 WWDC22 的更新内容与大家一同探讨下日常卡顿的治理思路。本文篇幅有点长，大家可以先浏览下文章的思维导图，能够帮助大家提前梳理本文的主体脉络。
![思维导图](https://mmbiz.qpic.cn/mmbiz_jpg/deSLfic6WeGV1vjuiaOVezFaosibTAdxcZ6FeHJ0N9CicGgPSJJI5kMSvBE4Q6Qk08o8OoI2ib00kiaNfppvZGfMjuFw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)


## 内推

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

- [上海] 小红书 - 社区客户端团队 - 基础体验方向 - iOS/Android
- [深圳] AirBrush - 美图海外事业部 - iOS 高级工程师
- [上海] 七猫小说 - iOS / Android/ 前端 / go / 大数据 高级、资深工程师

具体信息请移步：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）
