转载 今日头条 iOS 安装包大小优化 - 新阶段、新实践

原文地址

前言

今日头条 iOS 端从 2016 年起就关注到了安装包大小的问题,并启动了包大小优化。2017 年,我们将当时的经验发表为技术文章 《干货|今日头条iOS端安装包大小优化—思路与实践》[1]。

如今三年过去了。今日头条在继续探索包大小优化时实践了更多思路,包括构建配置、图片压缩、__TEXT 段迁移、二进制段压缩等。这些优化项在业务入侵较少的前提下给今日头条带来了显著的包大小收益。同时,整个业界在包大小优化上也产出了更多方案。因此我们更新文章,期待与大家共同交流包大小优化这件事。

阅读全文 »

[转载] iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践

原文地址

不同于 Android 系统中的卡死(ANR)问题,目前业界对 iOS 系统中 App 发生的卡死崩溃问题并无成熟的解决方案,主要原因是:

  1. 通常 App 卡死时间超过 20s 之后会触发操作系统的保护机制,发生崩溃,此时在用户的设备中能找到操作系统生成的卡死崩溃日志,但是因为 iOS 系统封闭生态的关系,App 层面没有权限拿到卡死崩溃的日志。

  2. 一般而言用户遇到卡死问题的时候并没有耐心等待那么久的时间,可能在卡住 5s 时就已经失去耐心,直接手动关闭应用或者直接将应用退到后台,因此这两种场景下系统也就不会生成卡死崩溃日志。

由于上面提到的两个原因,目前业界 iOS 生产环境中的卡死监控方案其实主要是基于卡顿监控,即当用户在使用 App 的过程中页面响应时间超过一定的卡顿的阈值(一般是几百 ms)之后判定为一次卡顿,然后抓取到当时现场的调用栈并且上报到后台分析。这种方案的缺陷主要体现在:

阅读全文 »

[转载] 抖音 iOS 工程架构演进

原文地址

前言介绍

2016.09.26,抖音版本 1.0.0 上线,随后不断迭代优化和丰富产品,截止目前,抖音日活跃用户突破 6 亿,短短 4 年间,抖音从零爆发性增长。

快速的业务发展也对技术支撑提出了更高的要求,为了保障敏捷的业务开发,提升跨团队的协同合作效率,提高本地研发和 CI/CD 效率,抖音 iOS App 工程架构在不同的阶段进行了不同的技术方案的改进,满足合理的架构演化,同时又不影响正常的业务迭代速度。

阅读全文 »

[转载] 抖音iOS最复杂功能的重构之路–播放器交互区重构实践

原文地址

背景介绍

本文以抖音中最为复杂的功能,也是最重要的功能之一的交互区为例,和大家分享一下此次重构过程中的思考和方法,主要侧重在架构、结构方面。

交互区简介

交互区是指播放页面中可以操作的区域,简单理解就是除视频播放器外附着的功能,如下图红色区域中的作者名称、描述文案、头像、点赞、评论、分享按钮、蒙层、弹出面板等等,几乎是用户看到、用到最多的功能,也是最主要的流量入口。

阅读全文 »

无埋点核心技术:iOS Hook在字节的实践经验

原文地址

前言

众所周知,精确的推荐离不开大量埋点,常见的埋点采集方案是在响应用户行为操作的路径上进行埋点。但是由于 App 通常会有比较多界面和操作路径,主动埋点的维护成本就会非常大。所以行业的做法是无埋点,而无埋点实现需要 AOP 编程。

一个常见的场景,比如想在UIViewController出现和消失的时刻分别记录时间戳用于统计页面展现的时长。要达到这个目标有很多种方法,但是 AOP 无疑是最简单有效的方法。Objective-C 的 Hook 其实也有很多种方式,这里以 Method Swizzle 给个示例。

阅读全文 »

[转载] 探索 iOS 编码对包大小的影响

原文地址

本文讲述的技术点属于比较极致和新颖的包大小优化技术,文章会从二进制、汇编指令的层面来分析 oc 代码对包大小的影响。接下来会从以下三个方面进行讲述:

  1. 二进制层面分析 oc 代码对包大小的影响

  2. 编码上优化包大小的 tips

  3. 总结各种 tips 的收益

阅读全文 »

[转载] iOS 高刷屏监控 + 优化:从理论到实践全面解析

原文链接

背景

Apple 在今年推出了支持 ProMotion 屏幕的 iPhone 设备,让 App 在 iPhone 13 Pro 和 iPhone 13 Pro Max 上的最大刷新帧率可到达 120Hz,极大优化了应用滑动/动画的流畅度体验。

ProMotion 并不是一个新的概念,早在 2017 年,Apple 推出的第二代 iPad Pro 便搭载了这一刷新率最高可达 120Hz 的屏幕。在 iPad 上,高刷新率默认对所有 App 启用。而也许是出于能耗的考虑,在 iPhone 上,Apple 并未将这个能力自动对所有 App 启用,而是需要开发者手动添加配置项来进行适配。

近期有消息指出 iOS 15.4 beta 修正了这一行为,经过笔者验证额外的配置项依然是需要的,并且本文内容依然适用。

本文介绍了在 iPhone 上对 ProMotion 动态帧率的适配时观察到的现象和遇到的问题,尝试推测了背后的原理,并探讨了解决问题的可能思路,最终基于调研结果在国际化短视频业务上线优化方案,取得了核心业务指标的收益。

阅读全文 »

Mac 快速重启某个应用

之前在文章 M1 Mac 外接屏幕 开启 HiDPI 方法 介绍了怎么使用免费版本的 BetterDisplay 来开启 M 系列芯片 Mac 外接屏幕的 HiDPI, 但是有个问题是每次拔插 HDMI 数据线或者是 Mac 休眠再激活, 外接屏幕会开始闪, 不知道是不是免费版才有的问题, 我试着重启 BetterDisplay 就好了. 但是每次点击 BetterDisplay 退出, 再找到 BetterDisplay 打开也挺费时间的 (估计在 10 秒左右吧), 一天弄几次影响心情. 我使用 Raycast 写了个脚本, 快速重启 BetterDisplay, 缓解这个问题.

阅读全文 »