Skip to content

老司机 iOS 周报 #202 | 2022-05-16

Choose a tag to compare

@Damonvvong Damonvvong released this 17 May 03:53
· 2331 commits to master since this release
f1b3524

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

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

新闻

🌟 🐢 Flutter 3.0 发布

@CrazyCoderShi: 前两天的 Google I/O 上 Flutter 3.0 已经发布,主要包括 Flutter 对 macOS 和 Linux 正式版支持、进一步的性能改进、手机端和 Web 端相关的更新等等。此外还有关于减少对旧版本 Windows 的支持,以及一些 breaking changes 列表。国内外的相关技术咨询上有诸多讲解,这里小编就简单为大家汇总一下,方便同学们阅读学习:

 Developer - 设计开发加速器

通过服务器处理 App 内购买和提供用户支持

2022 年 5 月 17 日(报名截止 5 月 16 日)

了解如何使用 App Store 服务器 API 和 App Store 服务器通知处理 App 内购买,为您的客户提供支持和退款处理。报名预计开放时间:5月12日

音频类 App 专场:为你的音频类 App 提升体验

2022 年 5 月 25 日至 26 日(报名截止 5 月 24 日)

欢迎参加为期两天的音频类 App 专场活动!通过本次活动,您将全方位了解 Apple 的相关技术针对在“音频”领域不同使用场景如音乐、K 歌、有声书以及播客类场景中的最佳实施性等,包括物理音频空间化引擎工作原理和使用,音频识别和分类的智能构建等,以及如何利用 watchOS 打造更好的音频类 watchOS App 等等。期待您的加入和我们一起探索音频领域的空间!

156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f

文章

🐕 西瓜视频 iOS Voice Over 无障碍适配实践

@ChengzhiHuang:无障碍的适配既是工信部的要求,也是企业社会责任感的体现。本文介绍了苹果原生无障碍相关的 API 使用以及业务渗透较高场景的适配实践。如有相关适配需求可以借鉴对应场景中的交互方式。文章内容集中于解决如下问题:

  • 焦点相关问题:信息缺失/冗余/错误、顺序错乱、停留不当 等
  • 浮窗问题 / 焦点被覆盖时仍可访问
  • 嵌套容器 ScrollView 无法跟随滚动

🐕 MachO 文件编译链接常见的三大认知误区

@AidenRao《iOS15动态链接fixup chain原理详解》 对 iOS15+ 动态链接过程性能优化的深度解析,引发了字节跳动 APM 团队对 MachO 文件的编译链接过程探索的兴趣。在学习的过程中,初学者常常会因为对该领域的不熟悉而陷入误区。本文整理了初学者比较容易犯的三大认知误区,避免大家重蹈覆辙。

🐢 Swift 首次调试断点慢的问题解法

@享耳先森:在 Swift 项目开发过程中,相信大家最近两年都深受「首次断点调试启动慢」问题困扰,根据项目大小和结构不同,首次调试时间从十几秒到几分钟不等,最近中文社区对此问题进行深入研究。

优酷团队发文 Swift 首次调试断点慢的问题解法 通过以下命令优化 LLVM 配置:

settings set target.memory-module-load-level minimal
settings set symbols.use-swift-clangimporter false

字节团队发文 Swift 调试性能的优化方案 通过自定义 LLDB 及配置更细致的解决调试断点慢问题,实测效果更加明显。

需要说明的是,以上方案与主工程项目结构有关,依赖的二进制库越多,效果越明显。

🐕 Detecting Xcode Previews

@Damien:在 SwiftUI 中想区分当前运行环境是在 Preview 中还是虚拟机中吗?来看看这篇文章吧,作者提供了从 ProcessInfo 中通过 XCODE_RUNNING_FOR_PREVIEWS 获取当前的运行环境的信息的思路,从而可以让我们识别运行环境是在 Preview 还是虚拟机。

🐕 Jenga - 基于 Swift ResultBuilder 优雅的构建 UITableView

@老峰:Jenga 是一个基于 ResultBuilder 封装的类 SwiftUI 使用声明式语法构建 UITableView 开源库,提供了 State 和 Binding 特性,代码简洁,可读性强,感兴趣的同学不妨一试。

🐕 Flutter 状态管理框架 Provider 和 Get 分析

@极速男孩:Flutter 作为一个声明式的 UI 框架状态管理是一个让人头疼的问题,没有状态管理会导致难以复用/单元测试,跨页面无法传递数据,setState 方法会过度刷新的问题。本文主要介绍了 Get 与 Provider 的状态管理的原理,并且如何利用他们去实现 MVP 模式,并且对比了两者的优缺点。

🐢 Flutter 深入探索混合开发的技术演进

@邦Ben: 本文梳理了 Flutter 中 PlatformView 的演进过程,也就是从直接通过 channel 打开一个 WebviewController 到 Virtual Displays 到 Flutter Hybrid Composition 的过程,文中通过各种例子说明原理以及也指明了优缺点,在使用 Flutter 的同学建议一看。同时上周推荐的 UC 团队做的进一步优化进行是下一步演进方向,也可以一并看看。

参考链接:
U4 内核技术 - Flutter PlatformView 优化

🐕 深入理解 OC/C++ 闭包

@xuyafei:ObjC 编译器允许用户在同一个源文件里自由地混合使用 C++ 和 ObjC,相对于其它语言与 C++ 的文件隔离和架桥通信(Kotlin 使用 JNI,Dart 使用 FFI),Objective-C++ 的同文件混编方式无疑是令人舒畅的。虽然 Objective-C++ 没有为 ObjC 和 C++ 类增加功能,类的体系结构也互相独立,类之间不能互相继承,但有时二者也会相互把自己的魔杖伸向对方领域,从而会引发一些比较费解的问题。本文就从两种语言闭包混合捕获的原理出发,了解其混编方式背后机制的冰山一角,也帮助大家写出更好的 ObjC/C++ 混编代码。

代码

老司机技术沙龙

不知不觉,已经联合举办了 6 场开发者活动了。我们对过去几场活动重新做了一次梳理,把所有可公开的资料都上传到了这里,后续的活动也会同步更新到这里。需要的朋友移步自取哈

image

摸鱼周报

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

  • 话题:远程工作正在成为趋势
  • 面试模块:CRC 实践应用:理论推导
  • 优秀博客:App Extension
  • 学习资料:一个大学生的学习计划
  • 开发工具:适用于 macOS 的现代媒体播放器,IINA 由开源媒体播放器 mpv 提供支持,几乎可以播放您拥有的所有媒体文件。

内推

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:https://www.yuque.com/iosalliance/article/bhutav

如果你想招人,点这里:https://www.yuque.com/iosalliance/article/ycyhf3

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

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

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

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

说明

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

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