老司机 iOS 周报 #211 | 2022-08-01

语言: CN / TW / HK

ios-weekly 老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

TestFlight 更新:支持上传使用 Xcode 14 beta 4 打包的 App

2022 年 7 月 29 日,TestFlight 可以上传 Xcode 14 beta 4 打包的 APP 以供开发者进行分发测试,已支持的新特性有 WeatherKit、CloudKit、PushToTalk 等,但目前 Background Assets 还未获得支持。

Live Activities 文档放出

今年 WWDC22 上苹果有放出 Live Activities 相关信息,Slack 上也有众多开发者咨询,但当时苹果表示还没有更多可以放出的消息。目前已放出了示例代码与 API。需要注意的是,目前苹果已确认在 iOS 16 的第一个正式版中不会包含相关功能,真正使用上还需时日。

文章

🐢 深入浅出依赖注入及其在抖音直播中的应用

@AidenRao:在软件工程中,依赖注入(dependency injection)的意思为:给予调用方它所需要的事物。本文试图从原理入手,讲清楚什么是依赖,什么是反转,依赖反转与控制反转的关系又是什么?一个依赖注入框架应该具备哪些能力?抖音直播又是如何通过依赖注入优雅的实现模块间的解耦?通过对依赖注入架构优缺点的分析,能对其能有更全面的了解,为后续的架构设计工作带来更多的灵感。

🐕 Swift 中的 JSON 反序列化

@Smallfly:JSON 反序列化是非常基础的需求,本文对比了业界的几种方案,分析了它们的不足之处。同样,Swift 4.0 之后官方 Codable 也无法满足云音乐团队灵活定制的需求,最终推出了基于 Codable 扩展的自研方案,满足如下的场景需求:

  1. 支持默认值
  2. 类型互相兼容,如 JSON 中的 int 类型可以被正确的解析为 Model 中的 String 类型
  3. 解码失败允许返回 nil ,而不是直接判定解码过程失败
  4. 支持 key 映射
  5. 支持自定义解码逻辑

🌟 🐢 从零开始理解 JSC 中的 GC

@Damien:在 JavaScript 语言中是依靠垃圾回收 (GC) 来回收内存的,你是否会对其中的 GC 的是如何实现的感兴趣?本篇文章来自斯坦福大学博士生,作者深入的探索了在 WebKit 中是如何实现 GC 内存回收的,本文会涉及较多的底层实现和原理,给你一个独特的视角从零开始了解 WebKit 中 GC 的实现细节,对相关话题感兴趣的同学请不要错过。

🐢 LLVM New Pass Manager

@kemchenj:LLVM 13 修改了默认的 PassManager,新的 PassManager 最大的改变是将 Pass 和 Analysis 拆分开。

更加合理的架构除了让逻辑变得更加清晰,也让性能得到了提升,Rust 编译器在迁移到新的 API 之后观测到了 5-20% 的性能提升,Swift 近日也开始迁移到新的 API

如果你好奇什么样的修改可以让性能有如此大的提升,那就一定不要错过,这一系列文章详细讲解了新 API 的设计和使用方式,以及与之前 API 的对比。

🐎 AssociatedObject 源码分析:如何实现线程安全?

@JonyFang: 本文通过 AssociatedObject 与 Property 的对比,探究他们是如何设计线程安全的。AssociatedObject 也是老八股了,推荐想对线程安全实现了解的同学阅读。

🐕 幸福里 C 端 iOS 编译优化实践 - 优化 40% 耗时

@红纸:本文是一篇 iOS 编译优化实践,作者从以下几个方面对工程进行优化

  1. dolphin 分布式编译缓存:字节 app infra 团队通过 hook LLVM Clang,将编译文件和依赖哈希成唯一 key,编译结果 .o 则根据 key 存储在本地或者云端
  2. 资源优化:移动主工程的图片资源文件至 POD 仓库内,降低主工程资源的编译耗时。在 POD 仓库内则可采用 resource_bundles 的形式引入,来降低资源的编译耗时
  3. 链接优化:使用基于 ld64 优化的 zld 来编译优化项目,zld 在 ld64 的基础上增加了并发数、并且使用效率更高的数据结构

🐕 iOS 不必现崩溃的点对点解析以及治理

@J_Knight_:本文介绍了用多种工具排查崩溃的时候,如 Bugly,崩溃日志解析等遇到的各种问题以及解决方案,并将该方案以开源工具的方式分享出来,感兴趣的读者可以找到文章末尾的 github 链接查看详情。

工具

开源一款苹果 macOS 工具 - AppleParty(苹果派)

@红纸:AppleParty 是 37 手游 iOS 团队研发,实现快速操作 App Store Connect 后台的自动化 macOS 工具。当前实现了以下几个功能:

  1. 内购项目管理(批量创建和更新)
  2. 批量商店图和预览视频上传和更新
  3. 数据报表批量下载
  4. 邮件发送工具
  5. 二维码扫描和生成工具

腾讯柠檬清理

@EyreFree:腾讯柠檬清理是针对 macOS 系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能,对上百款软件提供定制化的清理方案,提供专业的清理建议,帮助用户轻松完成一键式清理。此仓库为官方开源的 macOS 代码,对本软件内部实现感兴趣的朋友可以自行研究。

摸鱼周报

@摸鱼周报 #62:第 62 期摸鱼周报来了,一起来看下本期概要:

  • 开发资讯:Live Activity 上线 iOS 16 Beta 4; App Store 专家会面交流; Google 发布 Carbon 语言
  • 本周学习:iOS 使用 Pod 在现有项目上集成 React Native
  • 内容推荐:性能优化文件以及 WWDC22 优秀内容推荐
  • 摸一下鱼:Flowful 用程序生成氛围音乐;柠檬清理开源;网页版便携小空调带给你夏季清凉

关注我们

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

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

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

说明

🚧 表示需某工具,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)