|
5 | 5 |
|
6 | 6 | 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。
|
7 | 7 |
|
8 |
| -## 新闻 |
| 8 | +## 文章 |
9 | 9 |
|
10 |
| -> 行业相关的新闻、趣事、看法 |
| 10 | +### 🌟 🐢 [btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!](https://github.com/bytedance/btrace/blob/master/INTRODUCTION.zh-CN.MD) |
11 | 11 |
|
12 |
| -## Developer - 设计开发加速器 |
| 12 | +[@JonyFang](https://github.com/JonyFang): btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。 |
13 | 13 |
|
14 |
| -> 设计开发加速器相关活动 |
| 14 | +btrace 3.0 相比 2.0 的优化(iOS 视角): |
15 | 15 |
|
16 |
| -## 新手推荐 |
| 16 | +1. 采集方案升级。 |
| 17 | +3.0 由单一编译期插桩,升级为“同步抓栈 + 异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。 |
17 | 18 |
|
18 |
| -> 收集一些对新手友好且质量不错的文章 |
| 19 | +2. 数据存储与压缩优化。 |
| 20 | +3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。 |
19 | 21 |
|
20 |
| -## 文章 |
| 22 | +3. 多线程与性能再提升。 |
| 23 | +3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁 / 低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。 |
| 24 | + |
| 25 | +4. 死锁规避与线程采样精细化。 |
| 26 | +异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。 |
| 27 | + |
| 28 | +5. 丰富的性能归因与可视化。 |
| 29 | +除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页 / 上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。 |
| 30 | + |
| 31 | +6. 易用性和生态提升。 |
| 32 | +3.0 极大简化了接入流程,无需业务侧代码大改,无侵入式支持线上场景,支持性能自动诊断和多端(Android/iOS/ 鸿蒙 /Web)扩展,生态愈发完善。 |
| 33 | + |
| 34 | +整体来看,btrace 3.0 对 iOS 开发者而言,是一款集高性能、易用性、灵活性于一体的专业 Trace 工具。相比 2.0,3.0 大幅优化了采集方式、性能、安全性和数据分析能力,适合需要深入性能调优、线上问题定位和日常性能治理使用,推荐纳入工程实践! |
21 | 35 |
|
22 |
| -> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 |
23 | 36 |
|
24 | 37 | ### 🐕 [避免在 Swift 中使用 `self.`](https://juejin.cn/post/7508668930896412722)
|
25 | 38 |
|
26 | 39 | [@AidenRao](https://weibo.com/AidenRao):这篇文章探讨了在 Swift 开发中避免不必要的 `self.` 前缀使用,利用编译器检查减少循环引用风险。它基于 Swift 5.3(SE-0269)和 5.8(SE-0365)的演进,在闭包中省略 `self.` 能让编译器强制捕获语义(如使用 `[weak self]`),从而暴露潜在内存泄漏问题。
|
27 | 40 |
|
28 |
| -### 🐕 [Why I’ve Filed Over 1,000 Apple Feedbacks — And Why You Should Too](https://www.linkedin.com/pulse/why-ive-filed-over-1000-apple-feedbacks-you-should-too-eric-dorphy-qfe8c/) |
| 41 | +### 🐕 [Why I ’ ve Filed Over 1,000 Apple Feedbacks — And Why You Should Too](https://www.linkedin.com/pulse/why-ive-filed-over-1000-apple-feedbacks-you-should-too-eric-dorphy-qfe8c/) |
29 | 42 |
|
30 | 43 | [@阿权](https://github.com/bqlin):文章分享了作者关于 Apple Feedback 的心得体会与收益:
|
31 | 44 |
|
|
34 | 47 | 2. 对开发者而言,可以理清技术思路、记录测试用例,形成可复用的技术文档;提升沟通能力,强化对平台的理解,甚至在撰写反馈过程中解决问题。
|
35 | 48 | 2. 有效提交反馈的策略:
|
36 | 49 | 1. 内容结构化:
|
37 |
| - 1. 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。 |
| 50 | + 1. 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“ HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。 |
38 | 51 | 2. 内容:遵循 “问题描述→预期→复现步骤→重要性→示例项目” 结构,附日志、截图或 sysdiagnose 文件。
|
39 | 52 | 2. 高优场景:
|
40 | 53 | 1. 生产环境漏洞、重大回归、影响广泛的 API 问题;
|
|
53 | 66 | * 代码理解:使用 SEARCH 工具(函数调用)获取代码相关上下文,再丢给 LLM
|
54 | 67 | * 代码生成:除了代码本身,还会查找项目依赖,学习其 API
|
55 | 68 |
|
56 |
| -### 🐢 [深入解析|Cursor编程实践经验分享](https://mp.weixin.qq.com/s/UQPcxiV4UsTxpPYRjaNZIA) |
57 |
| - |
58 |
| -[@Cooper Chen](https://github.com/cjlcooper):本文深度剖析AI编程助手 Cursor 的进阶使用方法,为开发者提供一套可落地的效率提升方案: |
59 |
| - |
60 |
| -1.Prompt 设计黄金法则 |
61 |
| - |
62 |
| -- 采用"目标-背景-约束"三段式结构 |
63 |
| -- 技术方案设计阶段明确禁止生成代码 |
64 |
| -- 单测生成时附带示例代码确保风格统一 |
65 |
| - |
66 |
| -2.Rules 规范引擎 |
67 |
| - |
68 |
| -- 自动生成项目专属开发规范(支持 Go/Java 等) |
69 |
| -- 中间件调用错误率降低至 0.3% |
70 |
| -- 通过"/"命令快速适配团队规范 |
71 |
| - |
72 |
| -3.工具链整合方案 |
73 |
| - |
74 |
| -- 复杂需求使用 AutoGPT 进行任务分解 |
75 |
| -- 技术调研调用 Claude 深度研究模式 |
76 |
| -- 钉钉文档直接解析免去格式转换 |
77 |
| - |
78 |
| -本文提供的技术方案设计模板和开发规范 Rules 可直接复用,帮助开发者快速建立 AI 辅助编程工作流。文中揭示的"代码生成+架构决策"分层协作模式,为现代软件开发提供了高效的智能解决方案。 |
79 |
| - |
80 | 69 | ### 🐕 [Flutter 又双叒叕可以在 iOS 26 的真机上 hotload 运行了,来看看又是什么黑科技](https://mp.weixin.qq.com/s/jGqJFTlLqF2N_rqVdSkLKQ)
|
81 | 70 |
|
82 |
| -[@Damien](https://github.com/ZengyiMa):由于iOS 26 beta1 禁止了 Debug 时 mprotect 的 RX 权限,导致 Flutte r在iOS 26真机上 Debug 运行时出现了问题。为了解决这一问题,Flutter 团队采用了一种临时方案,即创建了 NOTIFY_DEBUGGER_ABOUT_RX_PAGES 函数。当 Flutter 应用需要执行新代码时,该函数会暂停应用并通知调试器,调试器随后利用其特权,通过 debugserver 修改内存权限,实现“双地址映射”,其中一个地址用于写入代码,另一个地址用于执行代码。这一方案虽然解决了当前的运行问题,但存在一定的延迟和较高的环境要求,未来仍需开发高性能的 Debug 解释器来提供更完善的解决方案。 |
83 |
| - |
84 |
| -### 🐢 [btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!](https://github.com/bytedance/btrace/blob/master/INTRODUCTION.zh-CN.MD) |
85 |
| - |
86 |
| -[@JonyFang](https://github.com/JonyFang): btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。 |
87 |
| - |
88 |
| -btrace 3.0 相比 2.0 的优化(iOS 视角): |
89 |
| - |
90 |
| -1. 采集方案升级。 |
91 |
| -3.0 由单一编译期插桩,升级为“同步抓栈+异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。 |
92 |
| - |
93 |
| -2. 数据存储与压缩优化。 |
94 |
| -3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。 |
95 |
| - |
96 |
| -3. 多线程与性能再提升。 |
97 |
| -3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁/低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。 |
98 |
| - |
99 |
| -4. 死锁规避与线程采样精细化。 |
100 |
| -异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。 |
101 |
| - |
102 |
| -5. 丰富的性能归因与可视化。 |
103 |
| -除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页/上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。 |
104 |
| - |
105 |
| -6. 易用性和生态提升。 |
106 |
| -3.0 极大简化了接入流程,无需业务侧代码大改,无侵入式支持线上场景,支持性能自动诊断和多端(Android/iOS/鸿蒙/Web)扩展,生态愈发完善。 |
107 |
| - |
108 |
| -整体来看,btrace 3.0 对 iOS 开发者而言,是一款集高性能、易用性、灵活性于一体的专业 Trace 工具。相比 2.0,3.0 大幅优化了采集方式、性能、安全性和数据分析能力,适合需要深入性能调优、线上问题定位和日常性能治理使用,推荐纳入工程实践! |
109 |
| - |
110 |
| -### 🐕 [https://github.com/EFPrefix/EFQRCode](https://github.com/EFPrefix/EFQRCode) |
111 |
| - |
112 |
| -[@Barney](https://github.com/BarneyZhaoooo):`EFQRCode` 是一个轻量级纯 `Swift` 二维码库,支持生成带水印/图标的风格化二维码和图片识别功能。基于 `CoreGraphics`、`CoreImage` 和 `ImageIO`,全平台支持 `iOS/macOS/watchOS/tvOS/visionOS` 。最新 7.0.0 版本重构了 `API`,引入 `EFQRCodeGenerator` 和 `EFQRCodeRecognizer` 类,支持链式配置,改进 `Objective-C` 兼容性。可通过 `CocoaPods`、`Carthage` 或`SPM` 集成。 |
113 |
| - |
114 |
| -### 🐕 [Flutter 里的像素对齐问题,深入理解为什么界面有时候会出现诡异的细线?](https://mp.weixin.qq.com/s/eESwYV6tfXP-zeygHObCrw) |
115 |
| - |
116 |
| -[@david-clang](https://github.com/david-clang):Flutter 界面中出现的诡异细线,本质原因是: |
117 |
| - |
118 |
| -1. 逻辑像素到物理像素转换出现浮点值(非整数 DPR、布局误差)。 |
119 |
| -2. Skia 默认开启 AAA(Analytic Anti-Aliasing)抗锯齿处理,处理相邻同色元素时各自计算的像素覆盖率总和可能不足 100%(如 40% + 50% = 90%)。 |
120 |
| -3. 未被覆盖的剩余部分(如上例的 10%)会显露背景色,形成半透明的细线。 |
121 |
| - |
122 |
| -解决方案是: |
123 |
| - |
124 |
| -1. [pixel_snap](https://pub.dev/packages/pixel_snap):提前将逻辑像素换算物理像素,根本上避免转换后出现物理像素不对齐。 |
125 |
| -2. Impeller: MSAA(Multisample Anti-Aliasing)抗锯齿处理,通过在每个像素内部采样多个点来获得更准确的边缘渲染效果,使那些原本因浮点误差产生的“半像素边缘”更加平滑自然,从而视觉上弱化或隐藏了细线问题。 |
126 |
| - |
127 |
| -## 工具 |
128 |
| - |
129 |
| -> 开发过程中常用的工具,及一些新工具的介绍 |
| 71 | +[@Damien](https://github.com/ZengyiMa):由于 iOS 26 beta1 禁止了 Debug 时 mprotect 的 RX 权限,导致 Flutte 在 iOS 26 真机上 Debug 运行时出现了问题。为了解决这一问题,Flutter 团队采用了一种临时方案,即创建了 NOTIFY_DEBUGGER_ABOUT_RX_PAGES 函数。当 Flutter 应用需要执行新代码时,该函数会暂停应用并通知调试器,调试器随后利用其特权,通过 debugserver 修改内存权限,实现“双地址映射”,其中一个地址用于写入代码,另一个地址用于执行代码。这一方案虽然解决了当前的运行问题,但存在一定的延迟和较高的环境要求,未来仍需开发高性能的 Debug 解释器来提供更完善的解决方案。 |
130 | 72 |
|
131 | 73 | ## 代码
|
132 | 74 |
|
133 |
| -> 库,代码段,开源app |
134 |
| -
|
135 |
| -## 书 |
| 75 | +### 🐕 [EFQRCode](https://github.com/EFPrefix/EFQRCode) |
136 | 76 |
|
137 |
| -> 比较不错的书的推荐和书评 |
| 77 | +[@Barney](https://github.com/BarneyZhaoooo):`EFQRCode` 是一个轻量级纯 `Swift` 二维码库,支持生成带水印 / 图标的风格化二维码和图片识别功能。基于 `CoreGraphics`、`CoreImage` 和 `ImageIO`,全平台支持 `iOS/macOS/watchOS/tvOS/visionOS` 。最新 7.0.0 版本重构了 `API`,引入 `EFQRCodeGenerator` 和 `EFQRCodeRecognizer` 类,支持链式配置,改进 `Objective-C` 兼容性。可通过 `CocoaPods`、`Carthage` 或 `SPM` 集成。 |
138 | 78 |
|
139 | 79 | ## 音视频
|
140 | 80 |
|
141 | 81 | ### 🐢 [SwiftData versus SQL Query Builder]([https://juejin.cn/post/7508668930896412722](https://www.pointfree.co/blog/posts/174-free-episode-swiftdata-versus-sql-query-builder))
|
142 | 82 |
|
143 | 83 | [@Kyle-Ye](https://github.com/Kyle-Ye): Point-Free 团队在 WWDC 2025 期间免费放送了一期重磅视频,深入对比 SwiftData 与他们自家 SQL Query Builder(Structured Queries)在实际开发中的表现。视频以还原 Apple Reminders 复杂查询为例,展示了两种方案在代码简洁性、可组合性和类型安全等方面的差异。
|
144 | 84 |
|
145 |
| -Structured Queries 方案只需 23 行代码即可线性表达复杂查询逻辑,支持类型安全、可读性强;而 SwiftData 不仅写法更繁琐(32 行),还存在布尔和枚举类型无法直接排序/筛选、可选字段排序不灵活等问题,甚至有些写法在运行时会直接崩溃。 |
| 85 | +Structured Queries 方案只需 23 行代码即可线性表达复杂查询逻辑,支持类型安全、可读性强;而 SwiftData 不仅写法更繁琐(32 行),还存在布尔和枚举类型无法直接排序 / 筛选、可选字段排序不灵活等问题,甚至有些写法在运行时会直接崩溃。 |
146 | 86 |
|
147 | 87 | 如果你关心 Swift 持久化方案、数据层架构,或在 SwiftData 和 SQL 之间犹豫,强烈建议观看本期视频。
|
148 | 88 |
|
|
0 commit comments