# 老司机 iOS 周报 #250 | 2023-07-03

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

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

## 新闻

### [GitHub 的 Dependency Graph, Dependabot Alerts 和 Advisory Database 现在正式提供 Swift 的支持](https://github.blog/changelog/2023-06-19-dependency-graph-dependabot-alerts-and-advisory-database-now-support-swift-advisories)

[@kemchenj](https://kemchenj.github.io)：之前[在 244 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%23244)里曾经提到过 GitHub 的代码扫描功能计划提供 Swift 的支持，现在这个功能已经正式上线了，感兴趣的朋友可以赶紧去尝试一下。

> GitHub 的 Code Scanning 会扫描和索引项目的 Dependency 信息，并且提供：
> 
> - **Dependency Graph**。
>   - 这意味着开发者可以在 GitHub 上看到有哪些项目依赖了自己的 Swift 库。
>   - 可以使用 [Dependabot](https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts)，在依赖库更新时，自动提交 Pull Request 更新依赖库版本。
> - **安全漏洞警告**。如果一个代码库出现安全漏洞时，它可以在发布修复版本后使用 GitHub 内建的功能进行记录，此时 GitHub 就会通知所有依赖了这个库的下游项目，并且自动提交 Pull Request 将依赖更新到已修复的版本。 

需要注意的是，这个功能只支持 SwiftPM，不支持 Cocoapods。

## WWDC23 内参

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

### 🌟 [WWDC23 10013 - Meet StoreKit for SwiftUI](https://xiaozhuanlan.com/topic/0579631284)

Rickey：内购（IAP）的实现一直是一个复杂棘手的问题。不过最新的 StoreKit 为 SwiftUI 提供了一种非常简洁优雅的实现方式，本文将以实战为基础，由浅入深地进行介绍。
如果你对 IAP 感兴趣，在做相关的工作，或者是独立开发者，那么都非常推荐你详细了解本文的内容。

### 🌟 [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130)

Layer：通过 SwiftUI 的 ImmersiveSpace，我们能够轻松的在 visionOS 上创造完全沉浸式的体验。在 Space 中，我们可以使用 `RealityView` 、`Model3D` 等展示内容，可以使用 `scenePhase`、`GeometryReader3D`、`ImmersionStyle`等更好的管理 Space，此外，还有一些自定义功能也值得我们探索。

### 🌟 [WWDC23 10262 - 重新探索 Safari 开发者功能](https://xiaozhuanlan.com/topic/0356874192)

Style 月月：本文主要是介绍 Safari 开发者功能及更新点，第一部分是介绍 Web Insepector 常规用法和新功能；第二部分介绍响应式设计模式的使用，并支持模拟器调试；第三部分是 xrOS 与 Mac 的配对杨演示；第四部分演示 WebDriver 实现自动化测试；第五部分介绍 Feature Flags 功能，方便开发者提前了解 Web 的未来发展方向。

### 🌟 [WWDC23 10184 - Meet ActivityKit/相遇实时小组件](https://xiaozhuanlan.com/topic/3186527094)

小杰瑞：本文基于 Session 10184 的内容梳理，主要内容包含 Live Activities 是什么以及简要阐述它的生命周期，并辅以一个直播比分类的实时小组件来说明。并针对部分核心代码和实现方式做了代码说明。


## 文章

### 🐕 [AppIntents for Widgets](https://alexanderweiss.dev/blog/2023-06-10-appintents-for-widgets)

[@享耳先森](https://github.com/iblacksun)：`AppIntents` 是 iOS 16 推出的 Swift only framework，用于开发 `App Shortcut` 以简化之前复杂的配置项。从 iOS 17 开始，`AppIntents` 也可用于 Widgets 开发了。

### 🐕 [Apple's Linker & Deterministic Builds](https://milen.me/writings/apple-linker-ld64-deterministic-builds-oso-prefix/)
[@AidenRao](https://weibo.com/AidenRao)：[通用确定性构建](http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html)使构建更稳定，提升你对构建和测试过程的信心，能降低持续集成成本。本篇文章主要帮助你解决 OSO 绝对路径、 OSO 时间戳产生的值不确定性问题。

### 🐕 [Understanding mergeable libraries](https://www.polpiella.dev/understanding-mergeable-libraries/)

[@Cooper Chen](https://github.com/cjlcooper)：Mergeable libraries 作为今年 WWDC 较为重要的一项变革，在 Xcode15 引入了一种全新的库类型。它结合了动态库和静态库的优点，既不会过多的消耗构建时间，也不会影响启动速度，使得开发者在开发过程有能够高效的构建和调试自己的程序。本文针对 WWDC2023 的 session 10268 介绍了 mergeable libraries 的简单原理以及使用、调试等内容，能够为开发者快速上手这一新特性提供帮助。

### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/)

[@Smallfly](https://github.com/iostalks)：WWDC NOTES 收集了开发者观看 WWDC 视频后整理的笔记，能够帮助你快速了解视频的内容，目前已经有数十篇 WWDC23 的相关文章。

### 🐢 [快手主播稳定性 - Mach Port 超限问题治理](https://mp.weixin.qq.com/s/hzKQZjQEp7Gpv6Uhl1xVSA)

[@EyreFree](https://github.com/EyreFree)：这篇文章分享的是快手客户端团队处理应用程序稳定性问题的经验，主要关注的是 Mach Port 超限问题，这是一个导致应用程序在 iOS 系统上出现异常退出的常见问题。本文首先介绍了 Mach 及 Mach Port 的基础知识，然后分析了 Mach Port 超限问题的两个主要原因：系统限制和 Port 泄漏。接下来讲述了如何通过获取 Port 信息、线上监控、线下监控、线下 Debug、阅读源码等手段逐步定位和解决问题的过程。

### 🐢 [How to Avoid Repeating SwiftUI View Updates](https://mobileappcircular.com/how-to-avoid-repeating-swiftui-view-updates-dcf0a65d3758)

[@极速男孩](https://github.com/ztlyyznf001)：这篇文章介绍了如何优化 SwiftUI 视图更新以提高应用性能。文章讨论了视图状态的构成，解释了驱动视图更新的"真理之源"，包括使用属性包装器（如 @State 和 @StateObject ）声明的变量、视图类型的构造参数和事件源等。深入讲解了符合 DynamicProperty 协议的属性包装器的工作原理，比如 @StateObject 和 @ObservedObject ，并指出理解这个协议对优化重复计算至关重要。文章还强调了避免不必要的声明，因为这会导致视图的不必要刷新。

### 🐢 [CADisplayLink 前世今生](https://mp.weixin.qq.com/s/I1fDj1GBHEr4x4Jg2u_GXA)

[@老峰](https://github.com/gesantung)：CADisplayLink 是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。本文介绍了 CADisplayLink 概念，常用属性 & 接口；CADisplayLink 与 NSTimer 使用区别以及 iOS 15 系统下底层驱动方式的变化。


### 🐕 [Xcode Bookmarks: Save code landmarks & organize tasks](https://www.avanderlee.com/xcode/bookmarks-navigator/)

@[水水](https://www.xuyanlan.com/)：Xcode Bookmarks 是在 WWDC2023 中 Xcode 15 版本的一个重要的引入。 它是一项新功能，允许您保存要重新访问的代码的快速链接，这样做可以保存代码里程碑并组织必须完成的任务。本文详细介绍了 Xcode Bookmarks 的使用方法和效果示例，感兴趣的读者可以尝试。

### 🐢 [重要升级！btrace 2.0 技术原理大揭秘](https://mp.weixin.qq.com/s/WZ5JxCFv_FSOLqR-sRremA)

[@Crazy](https://github.com/jiyan135960)：应用开发中永远避不开的一个问题就是性能优化，而在想要进行性能优化，就一定要做好应用的数据采集与监控，字节团队开发的 btrace 2.0 很好的解决了 Android 端所需的数据采集与监控问题。btrace 2.0 相较于上一版本简化了用户操作，优化了内存，并增加了 synchronized 锁信息的记录。btrace 主要的工作流程依然是编译时插桩，运行时采集信息并通过 mmap 记录，最后配合桌面脚本将 apptrace 与 atrace 数据进行编码，并将它们与 ftrace 进行合并。btrace 2.0 的使用相对上一个版本简化了非常多，现在只需要 java 与 adb 环境就可以进行开发。并且当前版本还支持了精准插桩，大大减少了插桩量。该版本除了以前的基础监控外还增加了四种新的监控类型：渲染监控、Binder 监控、阻塞监控与线程创建监控。最后最重要的是源码已经开源，可以在字节的 GitHub 下找到。

## 代码

### [Swift-Macros](https://github.com/krzysztofzablocki/Swift-Macros)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Swift 宏带来了新一波的可能性 , 这个项目整理了社区创建的和宏相关的学习资源。

## 内推

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

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

## 摸鱼周报

[@摸鱼周报 #98](https://mp.weixin.qq.com/s/PNEYW71BfkQ2Y3n7uRdxsQ)：第 98 期摸鱼周报来了，一起来看下本期概要：

* 本期话题：visionOS 模拟器体验；Safari Technology Preview 173 发布
* 本周学习：React Hooks 相关的几个概念介绍
* 内容推荐：mergeable libraries、Swift on Server、Observation 框架、通过 ReviewKit 获得更多好评、Apple AR 技术全景等博客推荐。
* 摸一下鱼：Diffusion Bee 2 发布，支持视频制作，致力于打造 Mac 端最优秀的 StableDiffusion 开源工具；GPT Engineer 项目来让 AI 来充当软件工程师；「三五环」一期关于投资、创业的播客分享


## 关注我们

我们是「老司机技术周报」，一个持续追求精品 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）
