# 老司机 iOS 周报 #225 | 2022-11-28

![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 - 设计开发加速器

[近期线上活动：在 iPhone 锁屏上扩展你的 App 体验](https://developer.apple.com/cn/accelerator/)

内容简介：发现如何利用 iPhone 锁屏上的特性，进一步扩展你的 App 体验。学习如何利用锁屏小组件、实时活动以及通知，为用户创造更丰富的体验。感兴趣的同学可以在 12 月 7 日前进行报名。

## 文章

### 🌟 🐢 [当谈论协程时，我们在谈论什么](https://mp.weixin.qq.com/s/IO4ynnKEfy2Rt-Me7EIeqg)

[@Leo](https://github.com/leomobiledeveloper)：一篇关于协程的优秀文章，内容由浅到深，通过一些实际例子回答了以下四个问题：

- 为什么需要协程？
- 到底什么是协程？
- 怎么实现协程 (库)？
- 使用协程时需要注意什么？

### 🐕 [双十一｜探索 KUN 的加载性能与增强体验](https://mp.weixin.qq.com/s/NWRCembLGrqPzelf7Evw-A)

[@Crazy](https://github.com/jiyan135960)：Kun 是闲鱼自研的终端渲染容器，从页面表现的结果来看已达到接近原生展开的性能。本文同时对如何处理 Kun 与 Web 兼容的问题进行了简单的阐述，并且在优化首屏模块渲染效率的问题上提出了一个完整的设计思路。本文中提到，在解决渲染速度慢的问题上，除去简单的资源预加载与接口预请求的方式外，还可以将将互动区域代码合并到页面渲染框架中来提升整体页面渲染速率。并且可以优化接口返回，实现本地与远端合并页面 ui 的方式，来达到近似于原生的加载速度。当然后面两项优化脱离不开整体 Kun 框架的帮助，对 Kun 感兴趣的同学可以更加关注 Kun 的开源动态，本文值得大家仔细阅读。

### 🐕 [淘宝拍立淘 iOS 相册架构设计小结](https://mp.weixin.qq.com/s/ldbwl9nLxWyyBmk3bgX82A)

[@zoeGuo](https://github.com/zoeGuo)：拍立淘相册作为拍立淘业务的基础功能，已经在线上运行多年。随着不断迭代发展，业务代码也不断增多，遇到了模块化能力与业务代码耦合、架构分层不清晰和一定的用户体验问题。文中详细介绍了相册整体架构的分层设计与实现：
- 接口层：相册的对外接口（适配层、API）
- 视图定制层：相册的展示链路（MVVM 架构）
- 逻辑管理层：相册的读取链路（包括读取 Asset 和获取源文件）、相册的变更链路（观察者模式）、相册的体验优化（预加载、缓存回收）


文章结尾还介绍了有关相册实现的几个细节：App 隐私报告、“ Limited Photo Library Access ” 、支持 iCloud 选取、多线程问题。文章对正在开发相册类功能或对相册类应用感兴趣的读者会有所帮助和启发。

### 🐎 [优先级反转那些事儿](https://mp.weixin.qq.com/s/kp6cdDrdQ4rhfdXH-_Q8IA)

[@Damien](https://github.com/ZengyiMa)：优先级反转，是指某同步资源被较低优先级的 进程/线程 所拥有，较高优先级的 进程/线程 竞争该同步资源未获得该资源，而使得较高优先级 进程/线程 反而推迟被调度执行的现象。本文是字节跳动终端技术团队基于线上卡死问题出发，从底层分析了出现的优先级反转的场景以及处理方案。对多线程相关感兴趣的同学值得一读。

### 🐕 [@dynamicCallable in Swift explained with code examples - SwiftLee](https://www.avanderlee.com/swift/dynamiccallable/)

[@Barney](https://github.com/BarneyZhaoooo)：本文用丰富的示例，对 @dynamicCallable in swift 进行了详细介绍。

- **Why does Swift provide dynamic interpolation?**
- **What is @dynamicCallable used for?**
- **How to implement @dynamicCallable**
- **Combining @dynamicCallable with @dynamicMemberLookup**

### 🐎 [clipped() doesn’t affect hit testing](https://oleb.net/2022/clipped-hit-testing/)
[@Smallfly](https://github.com/iostalks)：SwiftUI 提供 `clipped()` 函数对视图进行裁剪，但是该裁剪函数不会影响事件响应，被裁减区域依然支持点击。`contentShape(_:)` 用于定义视图事件响应区域，配合该函数可以屏蔽裁减区域的点击事件。

### 🐕 [Using complex gestures in a SwiftUI ScrollView](https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view)

[@享耳先森](https://github.com/iblacksun)：SwiftUI 因其高级的封装大大的简化了界面搭建复杂度，但在某些特定场景中显得能力不足。本文介绍了在 ScrollView 内部嵌套其他手势时遇到的问题以及可能的解决方案。


## 工具

### 🐎 [LaunchAtLogin: Add “ Launch at Login ” functionality to your macOS app in seconds](https://github.com/sindresorhus/LaunchAtLogin)

[@Cooper Chen](https://github.com/cjlcooper)：`LaunchAtLogin` 是一个针对 Mac 桌面应用开发者，在 macOS13 以下系统，给程序快速添加登录自启动功能的三方库。相较于系统自带的 `SMAppService` 接口，`LaunchAtLogin` 在与系统旧版本的兼容性、API 设计方面以及对 SwiftUI 支持方面都有较好的实践。

## 代码

### [Xcode 14 打包，iOS 16 ，`-[AVPlayer replaceCurrentItemWithPlayerItem:]` 崩溃](https://github.com/Baseflow/XamarinMediaManager/issues/814)

[@JonyFang](https://github.com/JonyFang): 一般使用场景是在画中画切换视频的时候需要用到（如果分辨率变了需要加一段黑屏的），适配了 ` 画中画 ` 的 APP 记得处理。对应的解决方案，可做参考。


## 摸鱼周报

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

* 本周学习：程序员如何有效提问
* 内容推荐：SwiftUI 相关的一些博客推荐
* 摸一下鱼：Combine 操作符辅助理解的图示总结；Token，Session，JWT 这些鉴权技术有哪些区别？Mac 版微信为何不断往电脑中写日志？；Github 开源两款字体；一个摸鱼小网站。

## 内推

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

[杭州] 阿里巴巴 - AliExpress -iOS/Android/FE

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