# 老司机 iOS 周报 #310 | 2024-11-04

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

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

## 新闻

### [TestFlight 增强功能助你吸引测试员](https://developer.apple.com/cn/news/?id=fps422ld)

TestFlight 分发功能迎来了加强，新增对测试员的招募标准，例如指定 OS 版本，方便在在 1w 的名额内，尽可能按 app 实际要求暴露问题，例如鼓励低 OS 的用户加入测试。同时还提供了公开链接的转化情况看板等新功能。总体是一次满足开发者们痛点的更新。

## 文章

### 🐕 [How to build a Safari extension with SwiftUI](https://www.polpiella.dev/safari-extensions-swiftui/)

[@Barney](https://github.com/BarneyZhaoooo)：Polpiella 在博客中分享了如何使用 SwiftUI 构建 Safari 扩展的步骤。首先，在 Xcode 中创建 Safari 扩展目标并修改 Info.plist 文件，设置工具栏项和网站访问权限。接着，利用 SFSafariExtensionHandler 创建 SwiftUI 视图，并通过 PopoverViewController 展示。最后，运行应用即可在 Safari 中安装并测试扩展。

### 🐎 [Phase Animator Behavior](https://chris.eidhof.nl/post/phase-animator/)

[@AidenRao](https://weibo.com/AidenRao)：在这篇文章中，Chris Eidhof 探讨了 PhaseAnimator 的工作原理。当视图的位置从 -100 更改为 -100 时，更新前后的节点完全相同，并不会产生任何动画，当没有具体的动画时，会立即调用动画的完成处理程序。换句话说，我们马上就进入了下一个阶段。

### 🐎 [Swift Macro 在业务开发中的探索与实践](https://juejin.cn/post/7428200842229055529)

[@JonyFang](https://github.com/jonyfang): 结合模块化场景及曝光场景下的应用，通过模块宏能解决模块化通用模版定义的繁琐， 通过曝光宏能降低整个曝光体系接入的复杂度，本质上都是让 Swift Macro 帮助我们减少重复样板代码的编写，提供快速接入的能力。接入 Swift Macro 可以玩出很多花样，增加了代码的趣味性和可读性，降低了维护成本。

### [App development on iPad](https://mutatingfunc.github.io/blog/2024-10-12-app-development-on-ipad/)

[@Kyle-Ye](https://github.com/Kyle-Ye): 作者在过去一年里，全面投入到使用 iPad 进行应用程序开发。这篇文章介绍了在 iPad 上使用 Swift Playgrounds 进行 iOS 应用程序开发的可能性和局限性（缺乏 Xcode 的某些功能，如断点调试和模拟器支持）。虽然还存在一些局限性，但通过一些创新的解决方案，这些问题都可以得到缓解。

### 🐎 [Vapor and Swift Testing: Running tests in parallel](https://www.avanderlee.com/swift-testing/vapor-and-swift-testing-running-tests-in-parallel/)

[@Smallfly](https://github.com/iostalks)：这篇文章探讨了在 Swift 和 Vapor 框架中如何进行并行测试。它解释了 Swift Testing 与 XCTest 的不同，并提出了使用 Repository Pattern 来避免测试中的数据库查询，以实现测试的并行执行。同时还介绍了如何配置和使用内存中的仓库进行测试，并重写代码以通过仓库访问数据，从而提高开发效率和测试稳定性。推荐对 Swift 服务端开发和测试的同学阅读。

### 🐎 [Reminder: Apple Watches use 32 bit pointers](https://jeffverkoeyen.com/blog/2024/10/02/arm64_32-PSA/)

[@极速男孩](https://github.com/ztlyyznf001)：Apple Watch 从 Series 4 起采用 arm64_32 架构，虽为 64 位系统，但用 32 位指针。开发者在 watchOS 模拟器中测试时 Int 为 64 位，而在实际硬件上 Int 为 32 位，导致模拟器运行正常的代码在硬件上可能崩溃。例如，处理时间戳的代码可能在 Apple Watch 上失败。所以要在处理 Int 和 CGFloat 时需注意这种差异，确保代码在硬件上也稳定运行。

### 🐎 [Flutter Color 大调整，需适配迁移，颜色不再是 0-255，而是 0-1.0，支持更大色域](https://mp.weixin.qq.com/s/imRQnDJgHTdrcuD5rYQApg)

[@Crazy](https://github.com/jiyan135960)：本文主要介绍了 Flutter 在 3.10 版本里进行的颜色体系更改，首先介绍了 sRGB 和 P3 两种颜色体系的在色域上的区别，从肉眼上看 P3 的颜色更加鲜艳。紧接着文章便介绍了新版本的颜色体系，其中主要对颜色位数做了对比讲解，并且对源码也进行了分析。文章的最后作者更是对现有 API 的现状进行分析，更是对之后的 API 发展情况进行了介绍。

## 内推

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