# 老司机 iOS 周报 #253 | 2023-07-24

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

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

## 新闻

### [Unity support for visionOS: What you need to know](https://blog.unity.com/engine-platform/unity-support-for-visionos)

Unity 提供 visionOS 支持的 Beta 版本已经放出了[申请链接](https://create.unity.com/spatial)，感兴趣的同学可以自行申请。

WWDC23 内参中也已经放出了多篇相关的内容，大家感兴趣的话可以自行查看：
 - [WWDC23 10080 - 使用 RealityKit 构建空间体验](https://xiaozhuanlan.com/topic/8296735401)
 - [WWDC23 10191 - 在 iOS 上使用 Object Capture](https://xiaozhuanlan.com/topic/8741092356)
- [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130)

## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23)

本周我们又更新了 6 篇内参，每篇质量都非常高，由于篇幅问题，开头先推荐三篇可能大家更感兴趣的，其他的放到周报最后了 ~

### 🌟 [WWDC23 10164 - What's new in Swift](https://xiaozhuanlan.com/topic/7306192458)

冬瓜：这个 Session 涉及了 Swift 的新语法特性和 Swift Macro 的话题，这些功能对于编写更加灵活和健壮的 API 以及高质量代码起到了很大的帮助。此外，也深入探讨了在受限环境下使用 Swift 的优势，并讨论了 Swift 在适配多种平台设备和语言方面的灵活性。

### 🌟 [WWDC23 10167 - 初见 Swift 宏](https://xiaozhuanlan.com/topic/1403528796)

方舟(WAMaker)：Swift 宏是今年 Swift 5.9 的新特性，本文偏重于 Swift 宏基本概念的介绍，以及在使用方面需要注意的内容。

### 🌟 [WWDC23 10117 - App Store Connect 的新特性](https://xiaozhuanlan.com/topic/5304186279)

iHTCboy：本文介绍了 App Store Connect 的新特性，包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中，仅限内部测试人员访问的 TestFlight 测试更早安全可控；按地区预购可以为现有 App 拓展新的市场；通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能，优化产品页面，激发用户的兴趣，获取更多用户。

## 文章

### 🐢 [Android 视角谈 Bazel 与 Gradle 构建系统](https://mp.weixin.qq.com/s/4AI7H428oSc4fWgcK3KOpQ)

[@Crazy](https://github.com/jiyan135960)：本文从构建系统对比的角度出发，从各个角度对比了 Bazel 与 Gradle 两种构建系统的差别。首先从理念上对比，对比了 Bazel 与 Gradle 产物的不同点，从而引出两者的并发能力对比，得出结论并发能力上 Bazel 的实现更为简单方便。接着从快速增量对比，引出二者在 DAG 设计上的差别，Bazel 的 DAG 设计在增量与配置阶段都要优于 Gradle 的设计。最后是对分布式编译与依赖管理两种能力的对比，Bazel 的分布式编译是他的核心能力，但对于 Java/Android 的编译来说，分布式编译并没有什么明显提升，而在 Java/Android 的依赖管理上 Gradle 可谓是占尽优势。作者在最后更是利用飞书的两种构建进行了对比，首次编译 Gradle 优势极其明显，而有缓存编译也没有落后 Bazel 很多。作者在整篇文章中尽可能的保持客观的态度为 Bazel 与 Gradle 在做着对比，为大家提供了选择的思路，是值得大家一看文章。

### 🐎 [How to Use Swift Package Manager to Save Gigabytes of Network Traffic and Disk Space](https://betterprogramming.pub/how-to-use-swift-package-manager-saving-gigabytes-of-network-traffic-and-disk-space-998bd148ad56)

[@Smallfly](https://github.com/iostalks)：这篇文章介绍了如何使用 Swift Package Manager(SPM) 将依赖关系存储在项目的代码库中。这样可以避免在每次切换分支时重新下载和解决依赖。作者创建了一个本地 package，并通过脚本将所需依赖最少文件复制到项目中。这样做减小了文件大小，优化了依赖的使用。最终，拷贝的文件目录大小仅需 4.7 MB，比 `.build` 目录小了 211 倍。文章提供了实现的示例代码，有兴趣请参阅原文。

### 🐎 [Bad practice: testing if a String is empty](https://www.swiftwithvincent.com/blog/bad-practice-testing-if-a-string-is-empty)

[@JonyFang](https://github.com/JonyFang): 本篇主要讨论在 Swift 中通过使用 `string.count > 0` 来检测字符串是否为空的问题，并提出了更好的替代方法。

使用 `string.count > 0` 的问题在于 `count` 属性需要遍历整个字符串来计算可见字符的数量，因此对于长字符串或包含大量字符串的情况，执行时间会很长。如果想要执行速度快且不受字符串长度的影响，可以使用 `string.isEmpty` 来检测字符串是否为空。差异在于 `string.isEmpty` 只需要检查字符串是否包含至少一个字符。

日常开发过程中，尽量避免长字符串判空通过 `count > 0` 的方式，避免不必要的性能损耗。

### 🐎 [Convenience Property Wrappers vs Custom Data Access Layer in SwiftUI](https://azamsharp.com/2023/07/15/property-wrappers-vs-data-access-layer.html)

[@AidenRao](https://weibo.com/AidenRao)：作者以一个待办事项应用为例，分析使用 SwiftUI 的 `@Query` 属性包装器和自定义数据访问层的优缺点。若追求便利，可选择 `@Query` 属性包装器；若需要更大的灵活性，以便于未来更换数据访问层，那么自定义数据访问层更为合适。

## 工具

### [Developer Duck AI for Xcode](https://apps.apple.com/app/id1662283032)

[@EyreFree](https://github.com/EyreFree)：Developer Duck 是一款人工智能编程助手，可帮助完成包括代码建议、分析和重构等编程任务。

支持以下功能 & 特性：
- Xcode 集成和聊天窗口
- 命令行支持
- 支持包括 Swift 在内的 15 种编程语言
- 将文档注释添加到文件
- 粘贴代码块并快速重构
- 通过聊天生成 MermaidJS 流程图

感兴趣的朋友可以试试。

## 代码

### 🐕 [DeckKit](https://github.com/danielsaidi/deckkit)
[@邦Ben](https://weibo.com/linwenbang/)：DeckKit 是一个开源库，旨在帮助开发者在 SwiftUI 中创建基于卡片（Deck）的应用程序。DeckKit 可以自定义卡片的外观和行为，并提供了一些方便的功能，如卡片重排、卡片拖拽等。

- 创建和管理卡片
- 自定义卡片的外观和行为
- 支持卡片拖拽、重排等交互
- 提供 Demo 应用程序以供参考

## 设计

### 🐕 [Invisible Details of Interaction Design](https://rauno.me/craft/interaction-design)

[@水水](https://www.xuyanlan.com/)：好的交互设计会让产品感觉像是我们自身行为的自然延伸，如何在形式和功能之间取得整体平衡、如何让用户根据上下文预测产品交互意图？本文通过 iOS 的一些交互设计来介绍优秀的交互设计是如何隐喻用户进行操作的。对交互或者设计感兴趣的朋友不防看看，也许会有收获哦 ~

## WWDC23 内参更新

### 🌟 [WWDC23 10156 & 10157 - SwiftUI 动画篇](https://xiaozhuanlan.com/topic/3165078924)

zddhub(张东东)：本文先以 SwiftUI 动画的基础知识为起点，逐步剖析了支撑 SwiftUI 动画效果的三大核心组成部分：Animation、Animatable 和 Transaction。同时，结合 SwiftUI 的视图渲染机制，旨在帮助读者更深刻地理解和有效地应用 SwiftUI 的动画功能。在文章的尾声，我们会介绍 SwiftUI 最新加入的两个高级动画功能。一起开启探索之旅吧！

### 🌟 [WWDC23 10122 - 探索适用于现代 Web 的媒体格式](https://xiaozhuanlan.com/topic/1823954706)

夏天：本文将介绍 Safari 支持的媒体格式，包括图像和视频，并介绍了 Safari 17 中的新技术。文章还会讨论网站视频演变历程和最新技术 Managed Media Source API，实现自适应流媒体视频，提供更好的控制和更高效的性能。

### 🌟 [WWDC23 10053 - What's new in privacy](https://xiaozhuanlan.com/topic/9504861273)

胡军（Hummer）：本文以概述的形式讲述了过去一年 Apple 在隐私方面的努力成果。主要涵盖三大方向：

- 1.以隐私为中心设计的新的工具和 API ；
- 2.各平台与隐私相关的更新；
- 3.Vision Pro 平台的隐私保护设计范式。


## 内推

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