老司机 iOS 周报 #129 | 2020-09-21
老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
WWDC20
本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩!
新闻
Swift 5.3 正式发布
@Parsifal:继 3 月底发布 Swift 5.2 后,Swift 5.3 终于也官宣发布了~苹果继续围绕编码体验、Swift 运行时性能和更多平台支持进行改善和优化。小集团队也为我们翻译了官方的更新概要 - 一图读懂 Swift 5.3,下载更新 Xcode 12 即可体验 Swift 5.3。
苹果更新 App Store 审核指南
@Parsifal:随着 iOS 14 的发布,以及正在路上的 macOS Big Sur,苹果对 App Store 审核指南也进行了一波更新。Apple Hub 做了中文翻译,不过建议大家还是以官方为主,译文为辅 - 苹果更新 App Store 审核指南,可以给苹果爸爸的审核条款提建议了。
文章
🌟 🐢 系列文章:用 Swift 实现一个 Swift Runtime
@享耳先森:这个系列的文章来自于今年愚人节的一个项目,作者让 Mac OS 9 支持运行 Swift 程序,其中 Swift Runtime 没有将 C++ 的实现迁移过来,而是使用 Swift 实现了一套,文章里就分享了具体的实现细节,包含了大量的 Swift 指针操作技巧。
通过阅读系列文章,你应该对 Swift Runtime 会有更深的理解,推荐阅读。 belkadan.com/blog/2020/0… belkadan.com/blog/2020/0… belkadan.com/blog/2020/0…
作者 Jordan Rose 之前是 Swift 团队的一员,负责 bugs.swift.org 相关的工作,在去年离职。
@Damien:本文从 Mach-O 的概念出发,深度解析了 Mach-O 的内部结构以及加载 Mach-O 的步骤,最后作者也给出了通过分析 Mach-O 之后可以应用的使用场景,对于想理解 iOS 系统底层实现原理的同学是个很好的文章。
🌟 🐢 Flutter 包大小治理上的探索与实践
@CrazyCoderShi: Flutter 作为一种全新的响应式、跨平台、高性能的移动开发框架,在性能、稳定性和多端体验一致上都有着较好的表现。引入 Flutter 带来的包体积问题,一直以来都是个热门话题,本文详细 讲述了美团在处理 Flutter 包体积问题上的思考及相关的建设。
🌟 🐕 今日头条品质优化 - 图文详情页秒开实践
@JonyFang:本篇总结了头条详情页(WebView)加载优化的思路和实践。内容总结如下:
- 数据建立
- 确定优化效果的度量为:页面加载时间
- 白屏检测方案:WebView 快照 -> 缩放 -> 非白色像素点检测
- 确定用户刷头条时真实体验的指标:95 分位值
- 模板优化
- 模板拆分
- 公共样式 CSS 和逻辑 JS 抽离为独立模板,内置到客户端中
- 客户端请求接口拿到正文数据,并通过 JS 脚本注入页面完成展示
- 用户进入详情页加载本地模板,并行请求详情页数据并注入模板
- 通过一定策略预加载数据并暂存
- 模板预热
- 全流程离线化后,进行本地模板加载优化
- 模板合并。将 JS、CSS、图片内联到一个文件以减少加载模板时的 IO 操作
- 模板简化。非必要样式和 JS 异步拉取
- 在合适的时机在后台创建 WebView 并预加载模板,用户进入详情页时使用加载好模板的 WebView 并将内容数据通过 JS 注入页面,收到数据后前端渲染
- 模板复用
- 详情页使用同一个模板,当用户退出页面时把正文数据清空,在进入喜爱个页面时复用这个 WebView 重新注入对应正文数据
- 模板拆分
- 网络优化
- CDN 加速
- 详情页请求特点:流量大、数据属性基本不变、用户分布广、接口数据大
- 将正文、标题、作者栏等主要又基本不变的内容托管到 CND
- 容灾
- 多域名备份。服务端下发多个 CDN 链接,某个访问异常时可以快速切换
- 快速访问。设计了详情页请求的快速动态超时策略(因子 1.5,min = 1s,max = 4s),保证在网络或服务异常时,用户快速感知到自身网络问题。
- CDN 加速
- 渲染优化
- 服务端预渲染
- 详情页首屏内容在服务端就把所有正文的 HTML 数据组装好,服务端直出内容给客户端 WebView 渲染。
- 客户端渲染
- WebView 中非文字内容(图片、视频)通过原生组件渲染
- Feed 页智能加载详情页需要的多图
- 服务端预渲染
- 白屏优化
- 网络导致的页面白屏问题,通过前面的优化策略已解决
- 非网络原因的白屏(WebView 占用内存过大发生的白屏),先判断是否存在数据注入,若没有进行请求重试,接着重新加载模板并注入数据。
🐕 一位 iOS 开发者的进阶之旅
iOS 开发早已经过了会写两个页面就可以拿到高薪的时代了,于是,出于兴趣也好,出于生计也罢,越来越多的 iOSer 该意识到,需要提高自己的技术能力了,毕竟面试也越来越难了不是。 那如何提高呢?本文其实是 v2ex 上面的一个帖子: "iOS 开发有什么国人写的比较好的书籍推荐?"。里面的内容大多来源于 lujie2012
以及其他人的一些回答,回答的内容已经不仅仅是推介书了,还包含了很多关于 iOS 学习上的问题。虽然里面个别回答或观点笔者并不是完全认同,但还是希望对这方面有困扰的同学有一点点帮助。
🐕 闲鱼对 Flutter-Native 混合工程解耦的探索
@含笑饮砒霜:闲鱼是国内第一个使用 Flutter 混合开发的大型应用,但是目前面临如下几个痛点:
- Flutter 侧混合编译速度慢,Android 首次编译 10min+,iOS 首次编译 20min+
- 混合栈编程中历史包袱导致 iOS/Android 双端返回给 Flutter 侧的数据可能存在不一致性
- 集成模块开发效率相比模块开发较低,单模块页面测试性能数据无法展开
面对这些痛点,闲鱼技术团队做了如下尝试:
- 模块化开发
- 跨进程开发
尽管两个方案都可以解决编译运行时间长的问题,但通过对比分析,方案一拆分模块和维护模块时都有很高的成本,方案二拆分成本和维护成本都相对较低,但对运行环境要求苛刻。综合来看,方案二虽然有一定缺陷,却可以解决很多问题。
🐕 4. Podfile 的解析逻辑
@JonyFang:内容主要分三部分。第一部分,简介 Podfile 配置所围绕的 Xcode 工程结构(Workspace、Project、Target 及 Build Setting)。第二部分,介绍 CocoaPods 中 CocoaPods-Core 对配置文件的解析,配置文件包括 Podfile、Podspec 及解析后的依赖锁存文件(如 Podfile.lock)。第三部分,演示在 Podfile 中对 Target 进行的嵌套使用。
文章目录结构如下:
- Xcode 工程结构
- Target
- Project
- Workspace
- Scheme
- CocoaPods-Core
- CocoaPods-Core 的文件结构
- Podfile 的主要数据结构
- Specification
- TargetDefinition
- Podfile
- Lockfile
- Podfile 内容加载
- Podfile 文件类型
- Podfile 文件读取
- Ruby 格式的 Podfile 加载
- YAML 格式的 Podfile 加载
- Podfile 内容解析
- Podfile targets 配置
- Target 的嵌套使用
- Abstract Target 的应用演示
🐎 The State of SwiftUI
@zvving:SwiftUI 被寄予一统 iOS macOS iPadOS tvOS 全平台界面实现的厚望。然愿望美好,现实骨感:笔者使用 SwiftUI 过程中就碰到一系列状态同步 + Crash + 卡顿问题。
如果要上线 SwiftUI,可以从 iOS 平台 Widget 等较稳定的场景入手,而 macOS tvOS 跨平台场景问题多多,建议先谨慎观望。
工具
🐎 GitHub CLI 1.0 is now available
@J_Knight_:GitHub CLI 1.0 版本已发布。使用 GitHub CLI 可以:
- 从终端运行你的整个 GitHub 工作流
- 调用 GitHub API 来编写几乎所有操作的脚本,也可以为所有命令设置一个自定义别名
- 连接 GitHub Enterprise Server 而不只是 GitHub.com
本文结合实例介绍了从 issue 到 release 工作流的使用方法,也讲解了如何使用 gh alias set 为命令创建别名;而且这些自定义的命令也可以自由组合。
内推
老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。
如果你想找工作,点这里:www.yuque.com/iosalliance…
如果你想招人,点这里:www.yuque.com/iosalliance…
当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。
关注我们
我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。
同时也支持了 RSS 订阅:github.com/SwiftOldDri… 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
转载自:https://juejin.cn/post/6874818350313275405