# 老司机 iOS 周报 #304 | 2024-09-02

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

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


## 文章

### 🐕 [JSON Parsing in Swift explained with code examples](https://www.avanderlee.com/swift/json-parsing-decoding/)

[@zoeGuo](https://github.com/zoeGuo)：解析 JSON 是我们在编码中常处理的问题，文章介绍了在 Swift 编码中不使用外部依赖解析 JSON。作者示例说明了如何使用 `Decodable` 协议来轻松解码 JSON，如何通过自定义映射将 JSON 关键字映射到 Swift 属性名，以及如何转换驼峰命名法和蛇形命名法，示例了如何使用自定义日期格式解码 JSON 中的日期。作者还提供了利用 AI 将 JSON 转换为 Swift 结构体的 prompt，一个以美观的格式打印 JSON 的扩展。这篇文章详细介绍了 Swift 中 JSON 解码的各个方面。

### 🐕 [SwiftUI for Mac 2024](https://troz.net/post/2024/swiftui-mac-2024/)

[@水水](https://www.xuyanlan.com/categories/iOS/)：这篇文章列举了系列示例代码来展示 WWDC 2023 和 WWDC 2024 中 SwiftUI 在 MacOS 应用程序上更新的新功能，主要包含了以下方面的内容：

- Xcode
- Previews
- Windows
- Tabs
- Charts
- Colors and Gradients
- SF Symbols

### 🐢 [Flutter Web 正式官宣弃用 HTML renderer ， Canvas 路线成为唯一](https://mp.weixin.qq.com/s/FdRMQGcZU5BDOI2N0EksiQ)

[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter Web 一直是 Flutter 团队努力攻克的一个方向 , 最初 HTML renderer 的路线最近被团队所抛弃 , 采用 CanvasKit 结合 WASM 方式；本文讲述了 Flutter Web 在 HTML renderer 到 CanvasKit 上的取舍和对比 , 可以让我们更深度的了解为何 CanvasKit 成为了唯一路线.

### 🐎 [Investigating a Dynamic Linking Crash with Xcode 16](https://pspdfkit.com/blog/2024/dynamic-linking-crash-xcode-16/)

[@Smallfly](https://github.com/iostalks)：这篇文章作者介绍了 Xcode 16 beta 导致 PSPDFKit 在 iOS 上启动崩溃的问题。该问题与动态链接 `sqlite3_threadsafe` 有关。调查发现，Xcode 的线程性能检查器默认启用，会导致 `libRPAC.dylib` 错误解析 SQLite 符号。解决方案是禁用该工具或更新 PSPDFKit 至 13.7 版本，后者允许 `libRPAC.dylib` 和 `libsqlite3.dylib` 共存，以防止崩溃。

### 🐎 [Swift Build Times and Module Verification …](https://pfandrade.me/blog/swift-build-times-and-module-verification/)

[@Cooper Chen](https://github.com/cjlcooper)：这篇文章讲述了开发 Secrets 4 时遇到的构建时间变慢的问题。作者将 Secrets 4 重构为 36 个框架，结果发现构建时间逐渐增加。主要原因是启用了 Xcode 的模块验证功能（ENABLE_MODULE_VERIFIER），该功能在构建时检查各种模块问题，虽然对框架分发有帮助，但在调试时会显著拖慢速度。作者决定在调试构建中禁用该功能，结果构建时间从 3.5 分钟减少到 52 秒。此举大大提高了开发效率，也提醒开发者定期检查构建时间以优化开发流程，这对于优化 Swift 工程的编译效率有不错的参考意义。

### 🐕 [JavaScript to Swift and back: Bridging location services in WKWebView](https://swiftlybald.com/javascript-to-swift-and-back-bridging-location-services-in-wkwebview/)

[@AidenRao](https://weibo.com/AidenRao)：这篇文章主要解决 WKWebView 访问地理位置权限，会触发两次位置授权弹窗（APP 授权 与 特定网页授权）的问题。解决方案主要是通过拦截来自浏览器的位置服务请求，在 iOS 中本地处理它们，然后在位置相关工作完成后将控制权交还给浏览器。如果你的 APP 有类似的体验问题，可以参考文章的实现原理进行优化。

### 🐎 [Send data Between iOS Apps and Extensions Using Darwin Notifications](https://ohmyswift.com/blog/2024/08/27/send-data-between-ios-apps-and-extensions-using-darwin-notifications/)

[@DylanYang](https://github.com/Dylan19Yang)：本文介绍了一种用于进程间通信的方式。在 App 内通知是一种通信的常用的手段，而有一种特殊的通知可用于进程间的通信 ———— Darwin Notifications。通常谈到进程间通信，我们会想到 Userdefaults 或者 Keychain，但是从作者看来 Darwin Notifications 会是一种更合适的方式，不过它有一个缺点是无法携带额外的信息（类似 userInfo）。作者展示了一个简单的 demo 来说明如何使用，感兴趣的读者可以阅读本文学习一下。


## 内推

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