# 老司机 iOS 周报 #244 | 2023-05-15

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

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

## 新闻

### [GitHub 的 Code Scanning 正式提供 Swift 的支持](https://forums.swift.org/t/beta-testers-wanted-get-a-sneak-peek-at-github-s-code-scanning-support-for-swift/64632)

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 将依赖更新到已修复的版本。

### **增强全球定价机制** 基准调整引发涨价

苹果在 3 月时就公告会进行 [增强全球定价机制](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23236-2023.03.13.md#app-store-%E7%9A%84%E5%AE%9A%E4%BB%B7%E6%9C%BA%E5%88%B6%E5%8D%87%E7%BA%A7%E7%8E%B0%E5%B7%B2%E6%89%A9%E5%B1%95%E8%87%B3%E6%89%80%E6%9C%89%E8%B4%AD%E4%B9%B0%E7%B1%BB%E5%9E%8B) 的调整，老司机技术也提醒过大家，希望大家都可以提前根据需要选择合适的基准。5 月 9 日凌晨已准时上线，但开发者们发现虽然已经提前将基准设置为了中国大陆，但却依旧有概率 **被** 涨价，例如：原本设置为 6 元的 IAP 物品变成了 8 元。问题在上午 10 点左右陆续恢复，部分开发者早上一醒来收到部分付费用户的投诉只能含泪处理了～


## 文章

### 🐢 🌟 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g)

[@Cooper Chen](https://github.com/cjlcooper)：如何优化编译开发体验一直是开发者老生常谈的问题，而 Xcode 作为 Apple 开发者必须要使用的工具，其相对封闭的生态环境，让大多数开发者对它的编译优化都常常感到捉襟见肘。哔哩哔哩作为国内较早尝试 Bazel 作为 iOS 主力编译系统的团队，针对这些问题提出了使用 VSCode + Bazel 的方案来打造一套全新的开发环境。其中作者对编译优化最核心的思路包括：
- 尽量只使用 Code 本身，其他 Xcode 自带的例如 IB 等能力能不用则不同
- 回归编译本身，尽可能多的关闭 xcodebuild 自带的 feature
- 全面拥抱 Xcode 的衍生研发工具链

根据以上思路，作者使用的是 VSCode + rules_bis 的自研方案，在研发体验和效率上实现了较大的提升。在发文时，B 站所有 Apple 项目已经切换至 vscode(bis) / rules_xcodeproj(bwb) / 双模式下。

[@Damonwong](https://github.com/Damonvvong)：发布这篇文章的目的是一个全新的视角，希望大家可以有所了解，但是从我个人的技术判断来看，除非规模化的团队，不然 Xcode 依然是最好用的 iOS 开发工具。

规模化团队会因为团队特色、组织架构等各种原因出现不同的问题，因此团队内部配备一些对工程化有解决能力的同学是必须的，如果没有这方面的投入，一线同学会苦不堪言。

当然，也有一部分同学会考虑技术价值，但是技术价值在不同场景大小差异是不同的。

说个题外话，很多同学都喜欢搞组件化，但是不知道大家有没有考虑过，当工程能力不足的时候，组件化是否真的是一个合理的架构设计？

### 🐕 [A Swift Spelling Corrector](https://airspeedvelocity.net/2015/05/02/spelling/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这是一篇基于 Peter Norvig 的博文《How to Write a Spelling Corrector》中的 Python 代码，使用 Swift 编写的拼写纠正器，下面是代码的一些说明：

- edits1(word) 函数接受一个单词作为输入，并生成一组可能的拼写错误修正候选词
- SpellChecker 结构体是一个拼写检查器，它用于训练和纠正单词
- train(word) 方法用于训练拼写检查器，将单词添加到已知单词集合中
- knownEdits2(word) 方法返回与给定单词距离为 2 的已知单词的集合
- known(words) 方法接受一个单词序列作为输入，并返回已知单词集合中存在的单词
- correct(word) 方法接受一个单词作为输入，并返回纠正后的拼写结果

这段代码演示了如何使用 Swift 编写一个简单的拼写纠正器。它使用了一些字符串操作和集合操作，以及一些基本的 Swift 语言特性。

### 🐕 [Behind-the-Design: Meet Copilot. When the system is the product; on … | by Microsoft Design | Microsoft Design | Apr, 2023 | Medium](https://medium.com/microsoft-design/behind-the-design-meet-copilot-2c68182a0e70)

[@Barney](https://github.com/BarneyZhaoooo)：这篇文章主要探讨了人工智能产品 Copilot 的设计理念、体验框架和开发原则，以及如何通过 AI 增强人类的能力。以下是几个要点：

- **协作**：Copilot 设计以人为中心，将 AI 作为用户的协作伙伴，而非取代人的工具。
- **用户控制**：在设计中，注重用户主导地位，强调用户对 AI 的控制和理解。
- **多元体验**：Copilot 提供沉浸式、辅助和嵌入式三种体验，以满足不同的工作环境和认知需求。
- **开放和学习**：微软坚持开放设计，积极寻求反馈，持续学习和改进。

总的来说，文章阐述了微软如何通过 Copilot 展示了 AI 的协作价值，同时强调了在设计和开发过程中保持以人为本，不断学习和改进的重要性。

### 🐎 [Double Protocol Conformance](https://alexanderweiss.dev/blog/2023-04-23-double-protocol-conformance)

[@zvving](https://github.com/zvving)：双重协议一致性是指一个类型多次声明遵循某个协议。当同一个 target 中的类型多次声明遵循相同协议时，Xcode 会抛出错误并停止编译，但是在不同 target 中声明同样的协议实现时，问题就变得难以发现。

作者还分享了一个更极端的情况，当涉及到三个 target，Xcode 不再显示警告信息，导致很难发现我们在设置协议一致性方面的错误。作者建议在多模块化代码库中工作的开发团队，确保为协议一致性设置规则，避免出现类似的极端情况。

### 🐕 [iOS 客户端动图优化实践](https://mp.weixin.qq.com/s/MW14R1JfXRmQvgN2NNi3iA)

[@Smallfly](https://github.com/iostalks)：在 App 内展示动图是非常常见的需求，本文介绍了 QQ 音乐 iOS 端在使用动图时，遇到内存不足引起的各种崩溃，经过一系列的优化，在性能以及稳定性方面取得较大的提升，主要包括：

- 解决频繁崩溃问题；
- 首帧加载性能保持稳定；
- 图片内存命中率由 65% 上升至 76%；
- 对比业界开源方案，CPU 占用更少 , 内存使用更少 , 并且有更好的流畅度。

对具体优化措施感兴趣的同学可参阅原文。


### 🐎 [文件名还是顶级域，傻傻分不清](https://mp.weixin.qq.com/s/Swzt7_O3vmgG_zukfCAkVg)

[@Damien](https://github.com/ZengyiMa)：Google 五月初放出来一波新的顶级域名，包括 .dad, .phd, .prof, .esq, .foo, .zip, .mov 和 .nexus 等域名，其中 .zip 和 .mov 最让人容易误解是文件地址，基于此容易引申出了一个 MacOS 的安全漏洞，对漏洞感兴趣的同学不妨阅读。


### 🐎 [京喜 APP - 图片库优化 | 京东云技术团队](https://juejin.cn/post/7231735955794427960)

[@J_Knight_](https://github.com/knightsj)：本文介绍了京喜团队对图片框架上的两个优化方向：一方面是降低图片网络传输，提高图片加载速度。另一方面是减少图片内存消耗。在网络传输上，图片框架先对图片 URL 进行预处理，预处理包括域名统一，添加缩放参数，添加 webP 参数，添加降质参数的方式减少图片网络传输大小。在内存消耗上，使用了图片缩放以及限制缓存上限的方法来避免缓存使用过高。文章结尾还介绍了在 Flutter 中优化的几个方向。

### 🐢 [淘宝 APP 网络架构演进与弱网破障实践](https://mp.weixin.qq.com/s/NVhtEoWUJK87ADwjXC5K0w)

[@AidenRao](https://weibo.com/AidenRao)：本文将介绍淘宝 APP 统一网络库演进的过程，讲述如何围绕体验持续构建南北向（client-server 之间的流量）从监测到加速一体化的终端网络架构，通过构建 NPM 弱网诊断感知能力，落地原生多通道技术 / 多协议择优调度手段，贴合厂商赋能网络请求加速，实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡，为用户提供弱网更好、好网更优的 APP 加载浏览体验，支撑业务创造更多的可能性。

## 工具

### [AppleParty（苹果派）v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围](https://juejin.cn/post/7226327556198744122)

[@ChengzhiHuang](https://github.com/ChengzhiHuang)：苹果派是一个可以便捷地管理所有 IAP 内购项目的工具，相比在 AppStore Connect 上一个个项目操作，在苹果派里的操作更加便捷，同时还支持了 基准国家和自定价格配置、销售范围配置、批量上传 等实用功能。同时工程代码全部 [开源](https://github.com/37iOS/AppleParty)，Connect API 等调用方式也有相当的参考价值。

## 音视频

### 🐎 [微软开发者拆解 SwiftUI 优化秘籍，教你轻松提升百倍性能](https://www.bilibili.com/video/BV1uM41137An)

[@EyreFree](https://github.com/EyreFree)：作者用视频演示的方式总结了用两周时间优化公司 SwiftUI 项目得出的相关经验，其中结合了对基本 SwiftUI 控件布局和刷新机制的解释，在做 SwiftUI 开发的小伙伴们不要错过。

## 摸鱼周报

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

* 本期话题：App Store 5 月 9 日增强全球定价机制已更新
* 内容推荐：模块化架构、Deep Dish Swift 总结、TabularData 框架相关博文。
* 摸一下鱼：最近利用 AI 技术做了一些尝试，开了一个 AI 绘图的小红书账号、开发了一个总结网页内容的浏览器插件；GPT 需求设想方案汇总；一个摘要总结插件 glarity；面向开发者的 ChatGPT Prompt 编写指南

## 内推

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

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

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2021」，领取 2017/2018/2019/2020 内参**

![](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）
