老司机 iOS 周报 #211 | 2022-08-01
老司机 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 扩展的自研方案,满足如下的场景需求:
- 支持默认值
- 类型互相兼容,如 JSON 中的 int 类型可以被正确的解析为 Model 中的 String 类型
- 解码失败允许返回 nil ,而不是直接判定解码过程失败
- 支持 key 映射
- 支持自定义解码逻辑
🌟 🐢 从零开始理解 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 的对比。
- LLVM Pass 其零:新的 Pass 机制
- LLVM Pass 其一:PassManager
- LLVM Pass 其二:Analysis 与 AnalysisManager
- LLVM Pass 其三:PassBuilder
- LLVM Pass 其四:PassManager 的改进与迁移现状
🐎 AssociatedObject 源码分析:如何实现线程安全?
@JonyFang: 本文通过 AssociatedObject 与 Property 的对比,探究他们是如何设计线程安全的。AssociatedObject 也是老八股了,推荐想对线程安全实现了解的同学阅读。
🐕 幸福里 C 端 iOS 编译优化实践 - 优化 40% 耗时
@红纸:本文是一篇 iOS 编译优化实践,作者从以下几个方面对工程进行优化
- dolphin 分布式编译缓存:字节 app infra 团队通过 hook LLVM Clang,将编译文件和依赖哈希成唯一 key,编译结果 .o 则根据 key 存储在本地或者云端
- 资源优化:移动主工程的图片资源文件至 POD 仓库内,降低主工程资源的编译耗时。在 POD 仓库内则可采用 resource_bundles 的形式引入,来降低资源的编译耗时
- 链接优化:使用基于 ld64 优化的 zld 来编译优化项目,zld 在 ld64 的基础上增加了并发数、并且使用效率更高的数据结构
🐕 iOS 不必现崩溃的点对点解析以及治理
@J_Knight_:本文介绍了用多种工具排查崩溃的时候,如 Bugly,崩溃日志解析等遇到的各种问题以及解决方案,并将该方案以开源工具的方式分享出来,感兴趣的读者可以找到文章末尾的 github 链接查看详情。
工具
开源一款苹果 macOS 工具 - AppleParty(苹果派)
@红纸:AppleParty 是 37 手游 iOS 团队研发,实现快速操作 App Store Connect 后台的自动化 macOS 工具。当前实现了以下几个功能:
- 内购项目管理(批量创建和更新)
- 批量商店图和预览视频上传和更新
- 数据报表批量下载
- 邮件发送工具
- 二维码扫描和生成工具
腾讯柠檬清理
@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 订阅:http://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
- 老司机 iOS 周报 #217 | 2022-09-19
- 老司机 iOS 周报 #210 | 2022-07-25
- 老司机 iOS 周报 #216 | 2022-09-05
- 老司机 iOS 周报 #211 | 2022-08-01
- 老司机 iOS 周报 #209 | 2022-07-18
- 老司机 iOS 周报 #208 | 2022-07-11
- 老司机 iOS 周报 #207 | 2022-07-04
- 【老司机精选】基于隐私保护的广告归因
- 老司机 iOS 周报 #206 | 2022-06-27
- 【老司机精选】Swift 并发编程:原理探究
- 老司机 iOS 周报 #205 | 2022-06-20
- 【老司机精选】基于苹果芯片的图像处理
- 【老司机精选】一文看完「WWDC22」174 个 Session
- 【老司机精选】SwiftUI 技术内幕
- 【老司机精选】相机拍摄新变化
- 老司机 iOS 周报 #204 | 2022-05-30
- 【老司机精选】探索 WKWebView 新增功能
- 老司机 iOS 周报 #203 | 2022-05-23
- 【老司机精选】APP 性能优化终极求生指南
- 老司机 iOS 周报 #202 | 2022-05-16