老司机 iOS 周报 #232 | 2023-02-13

956 阅读6分钟

ios-weekly.png

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

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

新闻

Swift 5.7 在 iOS 16 以下的系统创建 Task 时可能会发生 Bad access

Swift 团队在迭代的过程中删去了 Concurrency 相关代码的一个字段,内存布局产生变化,导致 iOS 16 以下的系统在创建 Task 时,部分情况下内存访问会出错,导致崩溃。

目前已经在主线分支完成修复,按照去年的发布节奏,可能会在三月份发布的 Xcode 里带上这个修复。遇到这个问题的同学如果着急的话,可以先回退到 Xcode 13.x 版本。

 Developer - 设计开发加速器

在 App 或游戏内创造无障碍体验

通过 Apple 操作系统内置的辅助功能、辅助功能 API 和开发者工具,开发者们可以为每个用户创建绝佳的无障碍体验。了解如何通过视觉设计和辅助功能技术适配,让你的 App 或游戏对每个人可用。报名截止 2 月 20 日。

新手推荐

🐎 如何实现 iOS 16 带来的 Depth Effect 图片效果

@zoeGuo: iOS 16 系统为我们带来了比较惊艳的桌面锁屏效果:Depth Effect。它可以使用一张普通图片当背景,同时可以在适当的地方遮拦住部分桌面组件,形成一种景深的效果。那么我们可以在自己的 App 实现类似的效果吗?文章介绍了如何使用苹果机器学习官网提供的机器学习模型 DeeplabV3 一步步实现 Depth Effect 效果的。虽然 DeeplabV3 模型在具体应用中还有一定的局限性,但作为尝鲜体验也是非常不错的~

文章

🐕 🌟 夸克 iOS Top1 JSC 崩溃攻克之旅

@Leo:Top Crash 的排查一直是 iOS 开发中的一个难点,尤其是内存相关的问题,往往会崩溃到系统符号里,排查起来经常一头雾水。这篇文章是夸克团队在排查 JSC 崩溃的实践,涵盖了 Crash 分析的整体思路、工具建设和崩溃原理,文章质量较高,推荐阅读。

🌟 🐢 The evolution of Facebook’s iOS app architecture

@含笑饮砒霜:Facebook for iOS (FBIOS) 是 Meta 最古老的移动代码库。自 2012 年该应用程序被重写以来,它已经由数千名工程师共同开发并交付给数十亿用户,它可以支持数百名工程师同时对其进行迭代。经过多年的迭代,Facebook 代码库已经不像典型的 iOS 代码库了,本文将阐明演变背后的技术决策及其历史背景:

  • 2014,建立自己的移动框架:React
  • 2015,减轻和改进启动所需的更改
  • 2016,动态库和模块化
  • 2017,重新思考 FBIOS 架构
  • 2018,生成代码的激增
  • 2020,Swift 和语言架构
  • 2022,架构演变完成了 1%,未来仍将继续

🐕 iOS APP 虚拟内存用量初探

@ChengzhiHuang:作者先通过对不同设备测试 task_vm_info 中具体值发现了规律:

  • 同一种机型 max_address 是固定的,而 min_address 和 aslr 的偏移保持一致
  • 不同机型(内存容量)的 max_address 有所不同

接着通过对 XNU 代码的阅读证实了以上的结论,并进一步探讨了 设置虚拟内存范围时机Reserved region虚拟内存总大小 等内容。最后验证了开启 虚拟内存扩容(com.apple.developer.kernel.extended-virtual-addressing) 后虚拟内存的变化。阅读后会对虚拟内存有一个更加直观的了解。

一个应用场景就是当需要判断某一个指针是否为 malloc 出来的合法指针,除了可以用 malloc_zone_from_ptr ,还可以前置判断地址是否在 task_vm_info.min_address ~ task_vm_info.max_address 之间来提升效率。

🐎 Prevent copy & paste into other iOS apps

@Smallfly:iOS 系统的封闭性给不同 App 之间的通信增加了门槛,而剪切板是为数不多的跨应用通信方案。为了保护用户的隐私,在 iOS 14 之后应用读取剪切板需要用户的授权,但在低系统或者用户误操作的情况下,依然存在剪切板数据被窃取的可能性。

本文介绍了两种保护剪切板数据安全的方法,一种是在 App 进入后台时,清空剪切板内容;另一种是强制使用 custom pasteboard,具体实现方案可参阅原文。

🐕 Flutter 3.7 之快速理解 toImageSync 是什么?能做什么?

@Crazy:作者从 toImageSync 方法入手,详细的描述了 toImageSync 性能上带来的优势与副作用。 toImageSync 优势是生成的图像会在 GPU 中常驻,所以它的绘制速度会更快,并且可以重复利用,提高效率。并且 toImageSync 为同步方法,在方法调用上更加自由。作者更是通过对 Flutter 中 SnapshotWidget 的调用方式来详细分析 toImageSync 与标准动画的差别,并通过对比明显展示了 toImageSync 的副作用:“冻结” child 控件。

最后作者更是通过源码对比以及各版本之间的命名差异分析 toImageSync 的设计初衷与作用,这种对源码分析的严谨与执着更是值得开发者的学习。

摸鱼周报

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

  • 本期话题:各大搜索引擎开始接入类 ChatGPT 功能

  • 本周学习:Python 中的匿名函数与闭包

  • 内容推荐:iOS 越狱检测、获取虚拟内存状态、使用 KeyChain 进行持久化等内容

  • 摸一下鱼:Stable Diffusion 功能尝鲜;关于技术规划的思考;大厂复盘文档

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:www.yuque.com/iosalliance… 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

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

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

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

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

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