# 老司机 iOS 周报 #331 | 2025-04-14

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

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

## 新手推荐

### 🐎 [Building a dependency injection framework](https://tanaschita.com/dependency-injection-building-lightweight-container/)

[@阿权](https://github.com/bqlin)：文章介绍了在 Swift 中如何从零到一搭建轻量级级依赖注入（DI）容器，内容包括：

1. DI 容器设计：实现注册（`register`）和解析（`resolve`）依赖的基本功能，通过字典存储类型与工厂函数的映射。
2. 生命周期管理：使用枚举 `DependencyLifetime` 区分瞬态（每次解析创建新实例）和单例（首次解析创建并缓存），通过单独的字典存储单例实例。
3. 属性包装器 `@Injected`：简化依赖注入，声明属性时自动从容器解析依赖，提升代码简洁性。
4. 实战示例：通过协议定义、容器配置和 SwiftUI 集成演示完整流程。

文章中的实现覆盖了 DI 的核心机制，有了这篇文章的基础，推荐大家再去阅读 [Swinject](https://github.com/Swinject/Swinject) 的实现，会对 DI 的实现有更深刻的理解。

## 文章

### 🐎 [注意，暂时不要升级 MacOS ，Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」被拒绝](https://mp.weixin.qq.com/s/s9fJWOJNhOf9Beu60VDQUA)

[@david-clang](https://github.com/david-clang)：macOS 15.4 会导致 Flutter/RN 构建产物新增无效文件夹 `.Symbols` ，提交 App Store 审核会被拒。虽然文章还提供了临时解决办法，但还是建议非必要先不升级，因为调试 Flutter iOS 模拟器时会遇到 `flutter attach` 失效，无法 hot reload ([#166333](https://github.com/flutter/flutter/issues/166333))，该问题还没好的解决办法，可用真机调试先绕过。

### 🐕 [New in Swift 6.1: Test Scoping Traits](https://www.pointfree.co/blog/posts/169-new-in-swift-6-1-test-scoping-traits)

[@Cooper Chen](https://github.com/cjlcooper)：这篇文章介绍了 Swift 6.1 引入的 Test Scoping Traits 新特性，它彻底改变了测试代码的编写方式。通过自定义 TestTrait，开发者可以更优雅地管理测试上下文和全局状态，特别适合依赖注入和快照测试等场景。
新特性主要优势包括：
1. 简化测试代码：用 @Test(.trait) 替代复杂的闭包嵌套
2. 支持并发安全：完美适配 Swift Testing 的并行测试
3. 三大流行库已适配：Dependencies、SnapshotTesting 和 MacroTesting 都支持新特性

现在升级到最新版本即可体验这些改进，让测试代码更简洁高效。

### 🐕 [Swiftdata Architecture Patterns And Practices](https://azamsharp.com/2025/03/28/swiftdata-architecture-patterns-and-practices.html)

[@Barney](https://github.com/BarneyZhaoooo)：本文以预算管理为例，展示了 Swift 原生框架下数据驱动的开发范式。主要介绍了苹果专为 `SwiftUI` 设计的 `SwiftData`。
核心特性包括：
**1** **声明式建模** ：`@Model` 宏简化模型定义，支持 `Codable` 类型与唯一性约束；
**2** **深度 SwiftUI 整合** ：`@Query` 动态追踪数据变化，视图自动刷新；
**3** **业务逻辑内聚** ：模型类直接嵌入唯一性验证、金额计算等规则；
**4** **灵活架构** ：可选协议抽象数据层，适配长期维护或框架迁移；
**5** **云同步与预览** ：默认 `CloudKit` 私有库同步，`PreviewModifier` 快速注入测试数据。

## 工具

### 🐎 [Introducing swiftly 1.0](https://www.swift.org/blog/introducing-swiftly_10/)

[@DylanYang](https://github.com/Dylan19Yang)：Swift 正式发布了它的工具链版本管理工具 swiftly，它可以帮助开发者更方便的在不同的平台上下载、安装指定版本的 Swift。借助 swiftly 的版本申明，可以更简单的在团队开发或者 CI/CD 环境中保持 Swift 的版本一致性。swiftly 一大亮点是它自身是由 Swift 开发而成的，因此它可以直接使用 Swift 内的标准库处理 HTTP 请求和文件系统读写等场景，它也利用可以和 C 桥接的特性使用了 C 的压缩库。对具体的使用方式感兴趣的同学可以阅读文章做进一步的了解。

## 音视频

### 🐢 [Spatial Rendering for Apple Vision Pro with ARKit, Metal, and Compositor Services by Warren Moore](https://www.youtube.com/watch?v=vO0M4c9mb2E)

[@BluesJiang](https://github.com/BluesJiang): 《Metal by Example》的作者亲自亲自视频授课。这个视频介绍了 Vision Pro 上做 3D 内容所涵盖的所有知识点，包括 ARKit 渲染，Metal 渲染，自定义渲染器，空间手势，手部追踪，物理等，内容覆盖的很全面，适合想了解 VisionOS 在 3D 渲染方面如何切入的读者。视频作者的书也很值得跟着学一学。


## 内推

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

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

## 关注我们

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

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

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