老司机 iOS 周报 #322 | 2025-02-10 #4891
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 提出。
周报编辑组又来新人啦~
欢迎 zhangferry 加入老司机技术!ferry 是我们的老朋友了,作为摸鱼周报的主编输出了大量优质内容,同时也深度参与了历年 WWDC 内参担任审核。目前 ferry 在抖音基础技术团队从事代码分析相关工作,对 LLM 与 Stable Diffusion 也有涉猎。
希望 ferry 的加入也能为大家带来更多元化的内容输出!
新闻
Apple 开源 Xcode 底层构建引擎
@kemchenj:Apple 近日开源了 swift-build,它是 Xcode、Swift Playground 底层使用的构建引擎(在 Xcode 里名为 XCBBuildService)。
目前 Swift Package Manager 使用的是另一套单独编写的构建引擎,同时维护两套除了行为不同会让用户困惑,并且维护成本也很高,所以后续 SPM 也会改为使用 swift-build,统一构建系统。
这样也给了我们机会一窥 Xcode 里的构建逻辑,以往很多问题都可以直接在这个库里找到答案,对于 Xcode 构建逻辑感兴趣的你千万别错过。
不再依赖 CallKit,iOS 微信使用新方案实现通话弹窗接听
苹果上线了新的 LiveCommunicationKit 作为在中国大陆替代 CallKit ,从用户视角分析,与 CallKit 最大的区别就是适配了灵动岛。目前文档内容不多,期待 WWDC25 中能有更详细的内容。
文章
🌟 🐢 Debugging An Undebuggable App
@ChengzhiHuang:作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部):
ptrace(PT_DENY_ATTACH, 0, 0, 0);
可以阻止后续所有的 debugger(lldb) attch。需要注意 ptrace 在 iOS 上是私有函数,需要通过 dlsym 查找。如果应用使用这种方式加固,则可以通过符号断点并thread return
跳过当前函数的剩余指令解决。svc #0x80
等汇编指令的集合,因此可以直接通过汇编指令调用,就能避免应用程序绕过 dlsym 寻找 ptrace 来进行调用(这样也能避免一些审核时的私有 API 扫描)。mov x16, #0x1a
与mov w16, #0x1a
就比搜索 svc 效率更高。因为 x16/x17 是一般是跳转校验用的特殊寄存器,很少挪作他用。br s -a 0x102A2BB14 -s XXXBinary
意思是设置断点,在相对 XXXBinary 的 loadAddress + 0x102A2BB14 的位置。这样可以避免每次启动 App 时 iOS 的 ASLR 机制会随机 loadAdfress 位置而需要重复计算实际的断点地址。同样我们日常调试时也可以相对我们自己的二进制或者系统库(UIKit / SwiftFoundation 等)设置断点。🐎 Advantages of Using withAnimation
@含笑饮砒霜:这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。
🐢 Hardcore Debugging
@zhangferry:当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案:
git bisect
,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。Relocations/aarch64/xx.yml
文件中手动解析符号。🐎 Compose 多平台是真实存在的!
@极速男孩:该文章分享了作者使用 Kotlin Multiplatform 与 Compose Multiplatform 的体验。通过网页工具快速生成项目模板,并在 Android Studio 中打开,然后简单实现了一个 PhotoApp,实现多平台代码共享。虽然依赖配置略有挑战,但可直接在 Android Studio 中运行 iOS 应用。
🐢 深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件
@david-clang:本文深入介绍 Android 侧 Flutter 和 Compose 在内嵌 Platform Views 的实现对比。虽然 Compose 和「传统 XML View」 在上层开发是两种写法,但因为底层渲染机制都是 Android Native View 的同一套渲染机制,所以无论内嵌 Platform Views 是否为 SurfaceView,都能正常渲染,甚至官方还推出了 SurfaceView 对应的 Compose 封装 AndroidExternalSurfaceScope。而 Flutter 和内嵌的 Platform Views 是两套渲染流程,连渲染数据的生产线程都不同,而且在内嵌 SurfaceView 时的渲染模式会从 TLHC 降级为 VD(这会影响 SurfaceView 交互逻辑,如无障碍功能可能失效),对此官方还没很完美的兼容方案(截止 2 月 9 日,Android 侧 Platform Views 相关的 issue 还有 100 个是 open 状态)。
🐕 深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比
@Crazy:这是一篇针对 Flutter 与 Compose 两个框架的 Diff 机制讲解的文章,本篇文章首先对 Flutter 的 Diff 机制进行分析,从 setState 方法开始逐步讲解 Flutter 框架的 Element 树是如何进行对比判断与循环更新的。很多 Flutter 开发者开发了两三年的 Flutter 也不知道 Widget 中的 Key 的作用,这篇文章很好的告诉了你 Key 与 runtimeType 的对比位置,也会让大家对 Key 的理解有更深的体会。文章对 Compose 的 Diff 算法进行了分析,Compose 与 Flutter 不同,Compose 是两个树来进行 UI 管理,同样在 Compose 的对比过程中,它的 Key 也启到了至关重要的作用,Compose 的 Diff 相较于 Flutter 更加的复杂,因为涉及到了多个模块的协作问题。本文读起来很快,但是需要大家反复阅读,如果有时间也可以根据文章所说的对源码进行自己的分析,会有不一样的效果。
工具
🐎 Network Link Conditioner: Simulating Slow Networking
@阿权:Network Link Conditioner 是苹果提供的慢网模拟工具,支持 macOS 和 iOS,其提供几套预设的网络环境供用户直接切换,常用于调试网络环境不佳下的网络请求或其他连接,优化用户体验,文章详细介绍了在该工具在各平台的使用方法。
比较有趣的是在模拟器上模拟慢网时还提到了另外一款工具 RocketSim,该工具可以独立控制模拟器的慢网模拟,不影响 macOS 其他进程,另外该工具还支持网络抓包、UI 稿对比、网格像素对齐、标尺、程序状态切换、Deeplink 测试、推送测试、权限控制、定位模拟等功能,功能丰富强大,可惜只能作用在模拟器。
内推
重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考
具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)
关注我们
我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。
关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参
同时也支持了 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 周报 #322 | 2025-02-10.
Beta Was this translation helpful? Give feedback.
All reactions