# 老司机 iOS 周报 #284 | 2024-04-08

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

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

## 文章

### 🐎 [Generate and read analytics reports from the App Store Connect API](https://www.polpiella.dev/analytics-reports-api-app-store-connect)

[@Smallfly](https://github.com/iostalks)：这篇文章介绍了苹果公司最近推出的 50 多种新的分析报告，这些报告包括应用商店参与度、应用商店商务、应用使用情况、框架使用情况和性能等方面的数据。虽然这些新数据提供了很多洞察力，非常有价值，但它们仅通过 App Store Connect API 独家提供，而且获取数据的方式并不直观。文章中介绍了如何使用 App Store Connect Swift SDK 来访问这些新的指标。如果对该方式感兴趣，值得一读。

### 🐕 [Swift Isolation Intuition](https://www.massicotte.org/isolation-intuition)

[@DylanYang](https://github.com/Dylan19Yang)：本文详细介绍了 Swift 并发框架中的隔离（Isolation）概念，作者通过一系列的例子阐述了如何判断当前代码上下文的隔离状态。关于隔离，作者总结了三条规律：
1. 隔离状态是在方法、数据结构、变量等声明时就确定的 
2. 隔离状态只会被 async 改变 
3. protocal 也可以声明隔离状态

同时应当牢记隔离状态是一个编译时的声明，运行时的状态并不重要，即使一段代码在运行时只会跑在主线程上也不代表它是一段主线程隔离（MainActor-isolated）的代码。

本文在书写过程中假设读者已经对 swift 并发的基础概念（Actor、Task 等）有了一些了解，建议未接触过 Swift 并发的读者可以简单了解下这几个概念后再阅读此文。

### 🐢 [Near real-time UI code generation on iPad](https://otaku.codes/uni/dissertation/dissertation.pdf)

[@BluesJiang](https://github.com/BluesJiang): 本论文展示了如何利用 YOLO 模型实现从草图到 SwiftUI 代码的流程。详细说明了从数据收集处理、模型训练以及利用 CoreML 实现单机完成部署投放。这里利用 iPad 强大的绘画、机器学习、SwiftPlayground 的能力，可以充分的展示这种可能性。具体展示的效果可以查看 [Demo 视频](https://www.youtube.com/watch?v=SKGdZ3H9eyY)。这篇论文很好的展示了机器学习实践的完整流程，值得学习。

### [理解 C++ 的六种 Memory Order](https://lancern.xyz/2021/07/07/cpp-memory-order/)

[@老驴](https://weibo.com/u/6090610445)：本文详细介绍了 C++11 中引入的六种内存顺序（memory order）的概念，目的是解决多线程环境下的数据一致性和可见性问题。内存顺序包括：

Relaxed：不保证顺序性的最宽松内存顺序。
Consume：保证读操作能看到数据依赖的写操作。
Acquire：确保读操作可以看到在相应 release 操作之前的所有写操作。
Release：确保写操作之前的所有操作对其他线程可见。
Acquire-Release：同时包含 acquire 和 release 语义。
Sequential Consistent：所有线程看到一致顺序操作的最严格内存顺序。

想要了解 C++ 内存的话，值得一读。

### 🐕 [Using @_silgen_name to forward declare functions in Swift and improve build times](https://swiftrocks.com/using-silgenname-to-call-private-swift-code)

[@Cooper Chen](https://github.com/cjlcooper)：文章介绍了使用 `@_silgen_name` 属性在 Swift 中前向声明函数以及改善构建时间的方法。作者强调了谨慎使用这一技巧的重要性，并解释了其工作原理和潜在风险。通过示例和技术细节，文章展示了如何使用该属性来提高 Swift 应用程序的构建效率，尽管牺牲了一些类型安全性。最后，作者呼吁 Swift 支持更多类似的功能，以满足开发者对更多控制和灵活性的需求。这对于需要提升 Swfift 编译速度相关内容的开发者有一定的参考价值。

### 🐕 [lldb remove randomness](https://bryce.co/lldb-remove-randomness/)

[@极速男孩](https://github.com/ztlyyznf001)：这篇文章介绍了如何使用 LLDB 调试器去除调试第三方应用时的随机性。通过一个示例程序，演示了生成随机数据并打印出来的过程。文章重点在于展示如何通过设置 LLDB 断点和特定命令，强制 randomData 函数返回固定长度和内容的数据，从而消除随机性。作者分步骤说明了如何先返回固定大小的数据，然后是动态大小但固定数据，最终是动态大小且看似随机但实际一致的数据。这一技巧在需要调试包含随机元素的程序时非常有用，能够提高调试的效率和准确性。


## 内推

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