老司机 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
Uh oh!
There was an error while loading. Please reload this page.
-
老司机 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