# 老司机 iOS 周报 #251 | 2023-07-10

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

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

## 新闻

### [Swift Package Index Supporting visionOS](https://blog.swiftpackageindex.com/posts/supporting-visionos/)

Swift Package Index 宣布添加 visionOS 的支持，所有在这上面发布的库都会运行兼容性测试，并且在网站上展示：

![visionos-build-results~light](https://github.com/SwiftOldDriver/iOS-Weekly/assets/11192474/c40e94dc-6060-47e2-88cd-65f9d4379754)

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

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

> 关注老司机技术公众号，回复「2023」，领取 2023 及往年内参

### 🌟 [WWDC23 10123 - 把你的游戏移植到 Mac 上（一）](https://xiaozhuanlan.com/topic/7036984215)

JPlay：苹果今年在游戏上下了大力气，不仅提供了 Game Porting Toolkit 和 Metal Shader Converter 这样的重量级工具，让开发者更有动力来移植游戏，更是花了三篇篇幅来帮助开发者移植游戏。这背后体现了苹果怎样的布局呢？本文试图一一为您分析。

### 🌟 [WWDC23 10137 - Cinematic API 助你成为电影大师](https://xiaozhuanlan.com/topic/0691783452)

bq：通过本文你将详细介绍电影效果模式以及最新的 Cinematic API，让电影效果模式的播放和编辑能力也能集成在你的 App 中。本文可配合官方 [Demo](https://developer.apple.com/documentation/cinematic/playing_and_editing_cinematic_mode_video) 一起阅读。

### 🌟 [WWDC23 10170 - Swift 结构化并发进阶](https://xiaozhuanlan.com/topic/3249081765)

MiG：本文将基于 Swift 并发的取消和优先级传递，TaskLocal 绑定值，全链路并发性能调优等方面讨论结构化并发任务的各种优势。

### 🌟 [WWDC23 10149 - Discover Observation in SwiftUI](https://xiaozhuanlan.com/topic/5023861974)

万圣(Khala-wan)：Observation 是基于 Swift 5.9 宏系统推出的全新特性，它可以帮助开发者简化数据模型并提高应用程序性能，让 SwiftUI 的数据驱动 UI 体验更加出色。本文将介绍 Observation 的基础知识和实现原理，并通过一些案例来感受 Observation 的实际应用体验，以及了解如何将现有的 `ObservableObject` 迁移到 `@Observable`。


## 文章

### 🐕 [SwiftUI Data Flow 2023](https://troz.net/post/2023/swiftui-data-flow-2023/)
  
[@AidenRao](https://weibo.com/AidenRao)：WWDC 2023 引入 Swift 宏，这使得 SwiftUI 团队能够减少数据驱动的属性封装器的数量，并删除大量模板代码。在本文中，作者将之前的 SwiftUI 数据驱动示例代码，使用宏进行重写，读者可以通过阅读新的示例，来了解 SwiftUI 管理数据流的变化。

### 🐎 [用 ChatGPT 搭建代码知识库，提升开发效率](https://mp.weixin.qq.com/s/MpF9xBHYjgnCHNkFn1AsOA)

[@EyreFree](https://github.com/EyreFree)：本文介绍了通过搭建搭建代码知识库，从而借助 ChatGPT 的自然语言生成能力快速检索代码信息，使程序员们能更加专注于业务逻辑的实现和优化的方法。从知识库搭建的需求分析，到方案选型对比，实施以及进一步迭代优化，向大家展示了整个项目开发过程，并进行了效果展示，正确率和可用率都满足了需求，同时从数据质量、测试评估方式、多维度和长篇幅知识整合、模型效果维护、数据安全等几个角度进行了一些思考。

### 🐕 [企业微信大规模组织架构性能优化实践](https://mp.weixin.qq.com/s/eK47AzCSSf8-W3wZdjrXXQ)

[@Barney](https://github.com/BarneyZhaoooo)：本文讲述了企业微信面临大规模组织架构性能问题的解决方法：

- 问题：大规模组织架构处理耗时长，更新节点信息性能瓶颈。
- 方案：
	* 预加载优化：实行“本单位 + 骨架”的预加载，减少初始化加载时间。
	* 架构优化：引入大架构模块，用户只加载相关单位数据。
	* 双 DB 切换：采用新的数据库切换方式，提升响应速度。
- 结果：耗时、CPU 和内存占用减少，用户体验显著提升。

### 🐕 [Monorepo 解决方案 — Bazel 在头条 iOS 的实践](https://mp.weixin.qq.com/s/ajkOP7yeSYCcE0MoUUmUZA)

[@xuyafei86](https://github.com/xiaofei86)：2015 年 Google 发布了其构建系统 Bazel，如今在其支持下 Google 的主仓库早已超过千亿行代码。不管是 Bazel 和 Buck，Google，Facebook，Twitter, Airbnb，Uber，Snapchat 等外企早已全面拥抱 monorepo，而国内客户端的工程实践则更多倾向于多仓库模式。

Bilibili 早在 2018 就已落地 Bazel，近期也分享了其 [最新实践](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g)。本周，头条也继续分享其 monorepo 实践。其在完成组件化后，迁移过程先后经历了业务组件源码化，podspec 到 BUILD 文件转换等过程，感兴趣的同学可以阅读原文了解其实现细节。

需要注意的是，国外对 monorepo 的应用可能来自于其对构建系统使用的延续性，以及 IDE 在线化的趋势。无端地引入复杂的工程架构，只会将糟糕的代码变成糟糕的基础设施。在学习前一定要参考其背景和动机，结合自己的业务现状，避免走向过度工程化的深渊。

### 🐕 [An In-depth Look at C++ Keyword: static](https://mp.weixin.qq.com/s/GEBi8sEjRLWeUlYu4kgDAA)

[@老驴](https://weibo.com/u/6090610445)：C++ 中的 static 关键词算是个挺复杂的概念，在不同的语境下有不同的含义。网上也比较难找到全面介绍 static 关键词的中文文章，但是这篇算是个不错的总结文章，基本涵盖了 static 的方方面面，值得一读。

### 🐕 [Weak 变量在对象释放时到底发生了什么？](https://juejin.cn/post/7252869090549628986)

[@老峰](https://github.com/gesantung)：作者结合实例通过汇编及源码一步步探究了访问 Weak 变量过程； objc_loadWeakRetained、rootRetain 源码分析；Dealloc 内部调用链路及机制，本文较深入的分析了 Weak 变量内存机制，感兴趣读者推荐阅读。

### 🐢 [Embracing CloudKit: Contents](https://dev.shoppingukapp.com/2023/05/01/embracing-cloudkit-for-data-sharing-contents.html)

[@anotheren](https://github.com/anotheren)：一个关于应用 CloudKit 的系列文章，主要包括了如何通过 CloudKit 在 iCloud 账号间进行数据共享以及可能遇到的问题。

### 🐎 [iOS 多语言解决方案全面指南](https://juejin.cn/post/7248811984748462141)

[@J_Knight_](https://github.com/knightsj)：文章介绍了一个可以实现多语言支持、语言切换以及翻译后文案处理的组件化库 HDTranslateModule 。这个库除了可以支持多语言配置以外，还支持在运行时切换语言，也支持翻译后的文案处理，以及扩展新的语言配置等等。文章中还介绍了如何搜索整个项目的中文字符串，生成语言配置文件以及如何编写使用谷歌翻译的 API 来批量翻译字符串的方法等等。

## 工具

### 🐎 [Little big improvements in Xcode 15](https://sarunw.com/posts/little-big-improvements-xcode15/)

[@zoeGuo](https://github.com/zoeGuo)：Xcode 15 有很多不错的改进。文章主要举例介绍了以下几个：
 - 快速找到你想要的方法：当你要使用的方法在键入关键字后任有很多选择时，提供了更多的快捷键操作来帮助我们快速找到想要的方法。
 - 上下文感知：在你输入的时候，会结合上下文提供建议，相较 Xcode 14 更智能的改进体现在：不会再建议使用相同的修饰语。
 - 文档预览：代码注释会快速生成我们的代码文档，Xcode 15 在 Assistant panel 中提供了可以直接预览文档的入口，可以在编写代码注释时可即时看到文档效果。
 - 快速指令查找：Xcode 提供了很多快捷键操作，但是找不到或者不记得快捷键就成了另一个问题，Xcode 15 中使用 `command + shift + A` 快捷键，唤起 Quick Action 搜索框，键入关键字就能快速操作了。
 - 书签：这是 Xcode 15 引入的新的概念，借助对代码添加书签，可以快速帮你再定位到对应代码。
 - 代码格式化：Xcode 15 提供了快速将将一行含有多个参数的代码格式化为多行的快捷方式。

 以上改进都非常实用，可以浏览原文详细了解具体使用方式。

## WWDC23 内参更新

### 🌟 [WWDC23 10159 - Beyond scroll views](https://xiaozhuanlan.com/topic/5138027649)

喵星人：学习如何使用 SwiftUI 的最新 API，将滚动视图提升到一个全新的水平。本文会展示一些前所未有的自定义滚动视图的方法，包括如何处理安全区域和滚动视图边距之间的关系、如何与滚动视图的内容偏移进行交互、如何通过滚动来为内容添加炫酷的效果。

### 🌟 [WWDC23 10124 - 把你的游戏移植到 Mac 上（二）：编译 Shaders](https://xiaozhuanlan.com/topic/0289537416)

Andy Jiao：本文将重点介绍如何利用 Metal 编译器和 Metal 着色器转换器将着色器转换到 Mac 平台，并提高着色器的灵活性和速度。包括如何将着色器转换为 Metal IR 以及如何在游戏构建过程中通过 GPU 二进制文件避免设备上的编译。详细介绍了 Metal 着色器转换器的功能和使用步骤。

### 🌟 [WWDC23 10244 - 使用 Swift-DocC 构建丰富的文档](https://xiaozhuanlan.com/topic/5976024813)

叶絮雷：通过 Xcode 15 提供的文档预览界面，我们可以更加方便的在 Xcode 15 中编写并预览文档。同时我们也可以通过 DocC 主题配置和指令功能，为文档添加更多的自定义内容，使文档更加丰富多彩。

### 🌟 [WWDC23 10107 - 在 App 中接入照片选择器](https://xiaozhuanlan.com/topic/5964728310)

nuomi1：在 App 中使用 MVVM 架构接入照片选择器，对比 UIKit 与 SwiftUI 在实现上的异同点。

## 摸鱼周报

[@摸鱼周报 #99](https://mp.weixin.qq.com/s/0r-ni--4jEN4pnIHVajHqg)：第 99 期摸鱼周报来了，一起来看下本期概要：

* 本期话题：macOS Sonoma 体验，三大功能：新屏保、web app、桌面小组件
* 内容推荐：Swift 宏、Core Data 新特性、SwiftData 介绍、自动生成 RESTful APIs、iOS 应用保护等内容
* 摸一下鱼：Public Apple Frameworks；微软提供的面相前端初学者的课程；苹果 M2 Ultra：AI 大模型的新希望；AI 生成的艺术二维码

## 内推

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