# 老司机 iOS 周报 #255 | 2023-08-07

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

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

## 文章

### 🐕 [Bad practice: capturing a method reference](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4137)

[@AidenRao](https://weibo.com/AidenRao)：这篇文章讨论了在 Swift 中捕获方法引用的不良实践。文章指出，尽管在将方法引用作为参数传递给函数时不需要显式地使用 self 关键字，但实际上编译器会自动捕获对 self 的强引用，从而可能导致循环引用的问题，且编译器不会对此发出警告。

### 🐕 [Objective-C Internals](https://alwaysprocessing.blog/series/objc-internals)
[@Smallfly](https://github.com/iostalks)：虽然 Swift 已经成为官方默认的编程语言，但在国内大部分大型应用依然由 Objective-C 主导，并且熟练掌握 Objective-C 对理解底层系统实现有较大的帮助。该博客分享了一系列剖析 Objective-C 内部实现的文章，涉及到类的实现、isa 指针、实例变量、以及内存管理等等。每一篇文章简短又不失深度，有需要的同学可以查漏补缺。

### 🐕 [How to Create Callback-like Behavior Using AsyncStream in Swift](https://swiftsenpai.com/swift/asyncstream-callback)

[@Barney](https://github.com/BarneyZhaoooo)：文章详细探讨了如何在 Swift 中使用 AsyncStream 实现类似回调的行为，尤其聚焦于跟踪下载操作。

* **Swift Concurrency Revolution**：概述了 AsyncStream 是如何革新异步代码处理的。
* **Replacing Old Methods & Creating Example**：通过模拟下载操作示例，演示了 AsyncStream 如何替换基于闭包的传统方法。
* **AsyncStream Implementation & Considerations**：深入解释了 AsyncStream 的实现细节，并强调了调用 finish() 方法的重要性。
* **User Interface Integration**：描述了如何将下载进度与用户界面集成，并分享了完整代码的链接。

### 🐎 [Xcode 14 如何调试 iOS 17](https://mp.weixin.qq.com/s/9K6gH-owQC_Oi6ZzRo2cRQ)

[@EyreFree](https://github.com/EyreFree)：这篇文章记录了作者尝试使用 Xcode 14 调试 iOS 17 的过程，并最终给出了解决方案，作者亲测 Xcode 14.3 有效，有需要适配最新操作系统的同学可以看看。

### 🐎 [Smart Open Xcode](https://christianselig.com/2023/08/smartly-open-xcode/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：本文分享了如何在 macOS 上智能打开多个版本的 Xcode。作者习惯将 Caps Lock 键映射为超级键，用于快速切换到 Xcode。然而，由于不同版本的 Xcode 可能会导致硬编码的热键打开错误的应用程序，作者介绍了一个名为 Hammerspoon 的小型 Lua 脚本实用程序，以解决这个问题。另外，作者还分享了一个附加内容，允许将脚本扩展到模拟器。这样可以在需要时快速切换到模拟器，并在模拟器和 Xcode 之间进行便捷切换。

### 🐎 [​系统自带日志框架 os.Logger](https://mp.weixin.qq.com/s/On3vVRu_gQwT9eT7Do62BQ)

[@Cooper Chen](https://github.com/cjlcooper)：OSLog 是 Apple 在 WWDC2016 推出的一套日志系统，而在今年的 WWDC23 上 Apple 将其进行更新，本文介绍了统一日志框架的基本情况，以及在使用、隐私和日志导的具体使用场景，重点也提到了今年对 OSLog 的更新，为开发者在调试阶段提供了更多的便利。

### 🐕 [百度 APP iOS 端包体积 50M 优化实践(五) HEIC 图片和无用类优化实践](https://mp.weixin.qq.com/s/PU5rC0U0XZ1VYqLWSUBWLQ)

[@xuyafei86](https://github.com/xiaofei86)：在之前的百度 APP 的包大小优化系列文章中，介绍了图片优化和代码优化的几种方式，本篇文章重点介绍 HEIC 图片和无用类检测的优化实践。  
HEIC 是 High Efficiency Image Format（高效图像格式）的缩写，是一种新的图像文件格式，它是 2017 年苹果公司在 iOS 11 中引入，用于代替 JPEG 图像格式，以更高效地压缩图像并减少存储空间占用。HEIC 支持多帧图像、透明度和 16 位深度色彩，使得它成为高质量图像和动画的理想选择。  
本文重点探究 HEIC 图片在百度 APP 中使用的可行性和包体积收益，验证 HEIC 图片在 Bundle 和 Asset Catalog 的兼容性，重点研究了 Asset Catalog 管理图片的机制，记录了验证过程中发现的特殊问题和解决思路。无用类则是详细介绍了如何用静态分析和动态分析相结合的方式，精简代码体积。感兴趣的同学可以阅读原文了解。


## 代码

### [TipKit-Examples](https://github.com/jordibruin/TipKit-Examples)

[@zoeGuo](https://github.com/zoeGuo)：TipKit 是 WWDC23 上发布的新的 UI 组件库：[Make features discoverable with TipKit](https://developer.apple.com/videos/play/wwdc2023/10229/)，[TipKit-Examples](https://github.com/jordibruin/TipKit-Examples) 是一个不错的使用 TipKit 的示例代码，感兴趣的读者可以自行阅读源码。

## 设计

### 🐎 [A WWDC Design Lab Made My App So Much Better](https://chriswu.com/posts/wwdc/designlab2023/)
[@水水](https://www.xuyanlan.com/)：WWDC Design Lab 可以与苹果工程师、设计师和专家进行交流，本文作者介绍了他在 WWDC Design Lab 中和苹果设计师一起就他的天气应用 App 进行了非常友好的交流，苹果设计师提供了一些非常好的建议和反馈，作者也非常用心的进行了改进，可以看出最后的改进结果很令人满意。

## 内推

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

[北京 / 杭州] - 抖音投屏 - Android/iOS

[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师

[广州] 微信支付 - 客户端开发 - iOS/Android

[上海] B 站 - iOS 开发

[上海] 百度输入法 - 客户端开发 - iOS

[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发

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

## 关注我们

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

**关注有礼，关注【老司机技术周报】，回复「2023」，领取 2023 及往年内参**

![](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）
