老司机 iOS 周报 #236 | 2023-03-13 #3896
ChengzhiHuang
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
老司机 iOS 周报,只为你呈现有价值的信息。
你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。
新闻
App Store 的定价机制升级现已扩展至所有购买类型
增强全球定价机制
的推出:在 5 月 9 日还未选择定价机制的 App ,默认会按照“全球定价”并以美元进行结算。开发者也可以即日起主动进行调整。由此,通过汇率差或者切区充值的方式成为历史,如果开发者未选择上架的地区,用户即使通过切换地区也无法进行支付。
Developer - 设计开发加速器
在 iPad App 中支持多窗口
多任务处理是让你的 iPad App 更加强大的方式。本次课程你可以学习如何轻松支持多窗口功能,了解如何创建、刷新和关闭窗口。你还可以了解如何利用高级手势创造更加出色的体验。报名时间截止 2023 年 3 月 15 日。
文章
🐕 SwiftUI + Core Data App 的内存占用优化之旅
@Cooper Chen:本文主要介绍了 SwiftUI 在图文混排等复杂应用视图情况下,如何进行内存占用进行优化的方案。通过视图 body 值优化、托管对象回归惰性状态、私有上下文、不持有托管对象等方式,大大提高了 SwiftUI 在复杂视图情况下的内存占用情况,为相关开发同学提供了许多优秀的建议,值得一读。
🐎 Swift 5.7 / Xcode 14 incremental build time 10x slower than Swift 5.6 / Xcode 13
@zvving:如果你的项目在升级 Xcode14 后碰到增量编译时间大幅劣化的情况,大概率是 Swift 新版集成驱动的问题,不妨试试配置
SWIFT_USE_INTEGRATED_DRIVER
->NO
,可能会有很好的效果。(配置后需要手动清空构建文件夹CMD+Shift+K
)🐎 Xcode 编译加速之 Compile Asset Catalog
@anotheren: 在项目规模变大后,资源文件也会不可避免的增多,导致生成 Asset.car 时占用大量时间进行图片压缩。这在 Release 时是必须的,但是在 Debug 时,我们可以跳过这个过程以优化编译时间。来看看具体如何操作。
🐎 苹果:为了安全让 M2 吃灰
@kemchenj:macOS 本身有一个安全机制来防止恶意程序运行,在程序或脚本首次运行时会上传 checksum 到苹果服务器,与现有的恶意程序名单进行比对,如果没问题才会放行让程序执行,导致首次启动时需要较长的时间。
但在我们的日常开发中,可能会需要大量生成和运行一次性的程序,例如修改代码之后编译运行的程序,每次都是全新,意味着程序每次都需要到苹果服务器进行一次校验。
当程序达到一定数量的时候就会造成性能问题,例如文中提到的 rust 测试原本只需要 1 分 30 秒左右,受到这个安全机制的影响执行时间被拉长到 10 分钟,对于日常开发体验影响非常大。
文章观点可能有点偏激,但使用 macOS 的开发者确实有必要意识到这件事情,并且这个问题可以通过一些设置来解决,可以在系统设置里将开发用的 App 加入到白名单里绕过这个验证(例如 Xcode, VSCode, Iterm2 等等),解决上述的性能问题。
🐎 iOS 底层之类的 cache 分析
@J_Knight_:本文详细介绍了类结构体中的 cache 字段:具体从 cache 的数据结构、bucket_t 类型以及关键方法 insert 的源码讲解了缓存插入的逻辑,也介绍了缓存扩容的逻辑。最后在结尾处提供了 cache_t 的工作原理流程图,可以更直观地看到 cache_t 的机制。
🐕 通过 Bazel 构建 iOS 应用
@JonyFang: Bazel 是 Google 推出的一款开源的工程编译工具,类似于 Make、Maven 和 Gradle。Bazel 主要负责处理代码构建相关问题,如:大规模数据构建问题,共享代码库问题,从源代码构建的软件的相关问题。Bazel 支持多种语言并且跨平台,还支持自动化测试和部署、具有再现性(Reproducibility)和规模化等特征。这里主要是介绍通过 Bazel 构建 iOS 应用。
🐎 迈向卓越 - 闲鱼终端场景 CI 能力体系化建设
@xuyafei86:“闲鱼从 2014 年创立,到 2022 年已经走过了 8 个年头,闲鱼 APP 也随之逐渐复杂。在这其中,我们也面临着大型 APP 共性的一些通病,例如:团队规模变大带来的研发效能瓶颈的问题,大量历史代码带来的代码腐化问题等。从解决实际问题出发,闲鱼终端团队和质量团队一起协作在 2022 财年进行了 CI 能力体系化建设,并已经通过在单测,代码质量,自动化测试 & 回归等方面的建设,形成了一整套的能力沉淀。通过这些能力,我们成功在闲鱼终端研发场景下实现了代码质量的稳步的提升,并在部分仓库现了向类主干开发模式的切换。本文将分享整个能力建设的过程以及我们在其中的思考,希望能给大家带去一些借鉴。”
🐕 这代码居然有差别?CPU 友好的代码该这样写
@Crazy:本文作者从循环效率入手,向大家简单的讲解了 CPU 的缓存机制,以及怎样写出优秀循环。作者通过一个矩阵相乘的三种不同的循环写法,用看似相同的代码,得到相同的结果,并计算这三种循环的效率。最后的结果却让人震惊,这三种循环方式其中的效率能够相差百倍之多。其中最大的问题就在于 CPU 的缓存命中率,利用先从左到右,再从上到下的循环方式读取数据,可以提升百倍效率。本文为开发者提供了一个少见却高效的性能优化的方向,了解一些硬件原理,顺应硬件的处理规则,才能写出更加行之有效的软件代码。
工具
ZMarkupParser
@红纸:这个纯 Swift 的 GitHub 仓库使用正则表达式解析 HTML,并自动修正标签错误。它支持高度定制的 HTML 标签样式,比传统的 NSAttributedString.DocumentType.html 更高效,不依赖任何解析库。它的实现原理是使用 Tokenization 将 HTML 转换成抽象语法树,并使用 Visitor Pattern 将 HTML Tag 与抽象样式对应,得到最终的 NSAttributedString 结果。如果你需要一款快速、高效、准确的 HTML 解析器,这个仓库是一个不错的选择。
Swift Evolution proposals in Alfred
@zoeGuo: Swift Evolution 记录了 Swift 主要或者次要版本的目标以及开发者对 Swift 的更改建议,还记录了这些想法是如何被提出、讨论、审查,并最终被接受到即将发布的版本中的。阅读 Swift Evolution proposals 可能在我们理解、使用 Swift 时起到关键性作用。那么 Alfred 就是一个能够帮助我们快速查找 Swift Evolution proposals 的工具,可以使用关键字或者 proposal id 搜索快速获取到对应文档的连接和相关 proposal 的状态等。之前已经用过的读者也可以去更新最新的 v2.1.0 版本获得更好的体验。
代码
buildbuddy-io / rules_xcodeproj
@含笑饮砒霜:这个存储库包含了 Bazel 的规则,可以用来从工作空间中的目标生成 Xcode 项目。它包含了全面的 Bazel 规则支持、需要最少的配置等诸多特性,目前已有多个项目使用 rules_xcodeproj,可以根据使用指南进行构建。
摸鱼周报
@摸鱼周报 #86:第 86 期摸鱼周报来了,一起来看下本期概要:
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参
同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。
说明
🚧 表示需某工具,🌟 表示编辑推荐
预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)
This discussion was created from the release 老司机 iOS 周报 #236 | 2023-03-13.
Beta Was this translation helpful? Give feedback.
All reactions