# 老司机 iOS 周报 #275 | 2024-01-15

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

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

## 文章

### 🐕 [@Observable Macro performance increase over ObservableObject](https://www.avanderlee.com/swiftui/observable-macro-performance-increase-observableobject/)

[@Barney](https://github.com/BarneyZhaoooo)：这篇文章主要介绍 WWDC 2023 中首次公开的 @Observable 宏，这是一个设计精良的工具，旨在优化 SwiftUI 视图并提升应用性能。通过使用 @Observable 我们能有效地防止不必要的视图重绘 , 并更流畅地观察状态变化。尽管使用 @Observable 宏让我们无需再使用 @ObservedObject，ObservableObject 和 @Published，但为了确立模型数据来源仍需依赖 @State。

### 🐎 [Perception: A back-port of @Observable](https://www.pointfree.co/blog/posts/129-perception-a-back-port-of-observable)

[@Smallfly](https://github.com/iostalks)：Swift 5.9 引入了强大的观察者工具 @Observable 宏，但仅适用于 iOS 17、macOS 14、tvOS 17、watchOS 10 等新平台。由于少于 50% 的设备运行在 iOS 17 上，大多数开发者需要等待数年才能使用这些工具。[swift-perception](https://github.com/pointfreeco/swift-perception) 提供了在低版本中使用 @Observer 的能力，并且在高于 iOS 17 上会自动使用系统的实现。有需要的读者可以一试。

### 🐕 [Adapting your App Icon to visionOS](https://www.createwithswift.com/adapting-your-app-icon-to-visionos/)

[@享耳先森](https://github.com/iblacksun)：Apple Vision Pro 即将发售，如果你的 App 准备适配 visionOS，本文介绍了如何将现有的 App Icon 进行修改已完美匹配 visionOS 规范。

### 🐢 [iOS Availability 编译器实现机制解析](https://juejin.cn/post/7316202786173829146)

[@JonyFang](https://github.com/jonyfang): 文章探讨了 iOS 开发中的 Availability 机制，这是 iOS 编译器提供的一个用于处理不同 iOS 系统版本之间 API 兼容性问题的功能。该机制允许开发人员声明 API 的版本约束，并进行可用性检查来防止在旧版 iOS 系统上调用不存在的新 API，从而避免应用崩溃。然而，作者通过研究 Clang 和 Swift 编译器源码指出，Availability 的检查只局限于方法内部的直接调用，不能保证完全的运行时安全性。

### 🐕 [Encrypted Portals between Macs – built in Swift and Rust](https://github.com/build-trust/ockam/blob/develop/examples/app/portals/README.md)
[@水水](https://www.xuyanlan.com/)：Portals 是一款 Swift 开发的 Mac 应用程序。它使用 Ockam Rust 库在 Mac 上与任何人、任何地方私下共享服务。该服务通过端到端加密的 Ockam 门户进行安全共享。你的朋友将可以在他们的本地主机上访问它！


## 代码

### 🐎 [Missing compiler warning](https://github.com/apple/swift/issues/70630)

[@Cooper Chen](https://github.com/cjlcooper)：在 Swift 中，当 override 函数 / 方法具有相同名称但有更多参数，并且这些参数获得默认值时，理论上编译器会对这样的写法产生一个 waring，但是实际开发中并没有出现预期的警告，这个 issue 解释了以上行为的 root cause，并且提出可以使用 `let _ = Printable.init(from:as:)("Sebastian")` 这样的写法，同时也可以对 init 方法增加 `@_disfavoredOverload` 关键字的写法，但需要提醒的是，并不推荐这样的用法，但这为有类似 case 的开发者提供很好的思路。


## 内推

重新开始更新「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）
