diff --git a/.gitignore b/.gitignore index e43b0f988..8c687f5a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +CLAUDE.md diff --git a/Contributors/README.md b/Contributors/README.md new file mode 100644 index 000000000..60c129025 --- /dev/null +++ b/Contributors/README.md @@ -0,0 +1,281 @@ +## 老司机技术成员介绍 + +### 没故事的卓同学 / lacklock + + + +老司机技术发起人。WWDC19 ~ 20 内参主要负责人。独立开发者(App:打工人小组件)。积极拥抱 SwiftUI。 + +### Parsifal + + + +老司机技术二代目,新技术爱好者,微医移动技术负责人,看球不打球,虎扑十多年潜水党。 + +### 老王 / Damonwong + + + +老司机技术三代目,WWDC20 ~ 22 内参主要负责人。目前就职于阿里巴巴,参与手机淘宝基础建设工作。对 iOS 新特性、Swift、编译等较感兴趣。除了工作和技术以外,也喜欢和朋友聊天,看电竞比赛(LPL)以及玩手机游戏(王者荣耀)。 + +### 老黄 / ChengzhiHuang + + + +老司机技术成员,周报轮值主编。目前就职于字节跳动,参与西瓜视频质量与稳定性工作。对 OOM/Watchdog 较为了解并长期投入。月球厨师;Amphibian 与 打越钢太郎 的粉丝。 + +### EF / EyreFree + + + +老司机周报编辑 / T 技术沙龙运营负责人 / 开源爱好者 / Sprout 技术负责人。 + +### Cooper + + + +老司机技术成员,目前就职于 Zoom,参与 Zoom 桌面端基建开发,负责性能优化、稳定性维护和 CI 相关工作,重度自驾游爱好者。 + +Editor of Old Driver Weekly, currently working at Zoom, involved in the development of Zoom desktop infrastructure, responsible for performance optimization, stability maintenance, and CI related work, and a heavy self driving enthusiast. + +### J_Knight_ + + + +老司机技术成员,目前就职于同花顺,参与人工智能相关的业务开发。重度股票 & 期货爱好者。 + +### AidenRao + + + +老司机技术成员,目前就职于字节跳动,参与抖音 APP 的开发工作,base 成都。想成为作家,又或者独立开发者,游戏设计师。擅长当韭菜。 + +### 享耳先森 + + + +老司机技术成员,目前就职于丁香园。参与丁香医生、丁香妈妈等 App 开发,还有自己的独立 App 骑行控。 + +### 红纸 + + + +老司机技术成员,WWDC 内参小助手(初号机)。目前就职于阿里巴巴,负责手淘 CI/CD 和研发效率相关工作。爱折腾新玩意儿。Dota2 仅 6k 小时的菜鸡。 + +### 水水 + + + +老司机技术成员,偶尔 T 技术沙龙 的临时工,目前就职于百度(上海),百度输入法 iOS & Mac 应用的程序媛。美食、徒步爱好者~ + + +### Leo + + + +老司机技术成员,目前就职于字节跳动,负责 TikTok iOS 客户端体验。喜欢研究一些技术底层的原理,业余喜欢主机游戏(特别是魂类游戏)。 + + +### 莲叔 + + + +老司机技术成员,就职于uc,负责直播业务。主要关注音视频、端智能相关技术。原神57级摆烂中,最近开始打壁球。 + +### 含笑饮砒霜 + + + +老司机技术成员,目前就职于百度,随便做点、研究点东西。渴望尽早退休,善于发现美好,乐于享受生活。 + +### Zvving + + + +老司机技术成员,目前就职于字节跳动,负责音乐创作客户端开发。热爱开源理念,每周一场足球不看球,任氏主机党塞尔达是天。 + +### 邦Ben + + + +老司机技术成员,周报轮值主编,曾担任 WWDC 内参文章审核,目前就职于字节跳动 - 剪映,负责剪辑工具侧相关业务,最近入坑羽毛球被虐菜,塞尔达工业革命溜街中。 + +### 慕牧 / Zoe + + + +老司机技术成员,目前就职于智谱华章。喜欢尝试新鲜事物,乐于探索,在变优秀的路上不断努力中~长板初学者。 + +### BZ / BarneyZhaoooo + + + +老司机技术成员 / B站 / 原神、星穹铁道爱好者。 + +### Damien + + + +老司机技术成员,目前就职于字节跳动,负责 TikTok 客户端隐私相关的工作。喜欢研究一些新新技术,爱折腾。 + +### Smallfly + + + +老司机技术成员,目前就职于网易云音乐,负责长音频大前端业务。喜欢 Swift,对前端技术比较感兴趣。业务爱好健身,想当一枚粗狗。 + +### 极速男孩007 + + + +老司机技术成员,目前就职于回想科技,沉迷于 Flutter。喜欢各种数码产品。 + +### Kyo + + + +老司机技术成员,目前就职于百度小说,负责客户端团队,关注文档、图书排版体验。喜欢的很多,这里说不过来。 + +### xiaofei86 + + + +老司机技术成员,目前就职于百度,负责百度网盘客户端基础架构相关的工作,正在折腾前端。日常躺平,梦想当一名卷王。 + +### 四娘 / kemchenj + + + +老司机技术核心成员 / 开源爱好者 / 最近在做 3D 重建相关的开发工作 + +### 老驴 + + + +老司机技术成员,就职于某 404 公司, 努力写算法和推进项目中... + +### JonyFang + + + +老司机周报编辑,目前就职于哔哩哔哩,负责直播基础、业务开发。日常喜欢研究一些基础框架的底层原理,业余会跑跑步、打打球。 + +### 天南 / CrazyCoderShi + + + +老司机技术成员,无业游民,天天瞎折腾;目前用 Flutter 写移动端。 + +### 老峰 + + + +老司机周报编辑,技术狂热,混迹币圈,希望早日自由。 + +### CrazyZhang + + + +老司机周报编辑,另类的 Android 开发,Flutter 忠实拥护者,Unity 爱好人员,王者中毒人员。 + +### anotheren + + + +老司机周报编辑,新晋奶爸,无业游民,正在向全栈独立开发者努力,熟悉图像与视频技术,希望在 AI 与 VR 浪潮中,找到新的定位。 + +### mmoaay + + + +老司机早期编辑 / T沙龙负责人 + +### Awhisper + + + +老司机技术成员,目前就职于蚂蚁金服,参与支付宝 APP 的开发工作,base 北京,常年出差杭州,不折腾不舒服司机。 + +### 叶孤城 / Yegucheng + + + +老司机早期作者,现在佛系划水,独立开发者(app:灵动大陆),积极拥抱 SwiftUI too + +### 芒果 / 100mango + + + +https://github.com/100mango + +老司机早期编辑,喜欢清晰简洁的代码与技术方案 + +### 小T / tom510230 + + + +老司机技术曾经活跃的编辑,从 iOS 4 开始入坑,目前在剪映项目组,专注于跨平台技术相关领域 + +### Jason Yu + + + +### 张嘉夫 / josephchang10 + + + +独立开发者,数字游民。 + +### Looping + + + +老司机技术成员,目前全力为小项目打杂,争取做大。业余爱好代码重构和算法设计,资浅科幻推理迷。 + +### JimQ + + + +老司机技术候补队员。All in AI-App。理想是:大河向东流,财务挺自由。已经实现了上半句。 + +### 五子棋 / SatanWoo + + + +老司机技术成员,就职于阿里巴巴淘宝,负责 端智能/AR/VR 等技术 + +### Kyle-Ye + + + +老司机技术成员,Swift Documentation Workgroup 成员,独立开发者 + +### DylanYang + + + +老司机技术成员,目前就职于字节跳动,参与音乐相关客户端开发,业余喜欢看看番、打打游戏。 + +### BluesJiang + + + +iOS 开发者,老司机技术成员,目前就职于淘宝,负责淘宝原生基础架构。热衷于 Swift/SwiftUI 等基础技术领域。 + +### 阿权 / bq + + + +老司机技术成员,base 广州,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。 + +### zhangferry + + + +老司机技术成员,目前在抖音基础技术团队从事代码分析相关工作。对 LLM、Stable Diffusion 有过短暂热爱,目前较大精力在带娃。 + +### David + + + +老司机技术成员,目前从事 iOS Infra 相关工作,对跨平台技术比较感兴趣。喜欢摄影、跳舞,会点 Popping,为多上街舞大师课,现定居大阪。 diff --git a/README.md b/README.md index f306fac5a..242c167c3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/326.jpg?raw=true) 这个时代的问题不是缺乏信息,而是信息太多,不知道哪些信息是有价值的,哪些是对我而言有效的信息。既然我们平时也在关注 iOS 开发相关的资讯信息,不如整理出来。我们并不只是资讯的搬运工,也是价值的布道者。关于内容,不局限于具体的 iOS 技术相关的内容。也包括我们认为对于 iOS 开发者有价值的信息,比如软件工程、程序员话题。 @@ -8,9 +8,13 @@ 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues ](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues ](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 -## 支持我们:[WWDC21 内参](https://xiaozhuanlan.com/wwdc21) +## 支持我们:[WWDC24 内参](https://xiaozhuanlan.com/wwdc23) -- 一年一度的 WWDC 又来啦!今年官方一共会有 220+ 个 Sessions 内容,我们将集结老司机 iOS 周报编辑以及社区内的一线 iOS 工程师,为你深度解读 WWDC21 中那些值得关注的 Session。 +**WWDC24 内参** 目前已经更新了 21 篇内容,并且我们今年做出了一个重大改变,关注老司机技术公众号并回复 ``2024`` 可以免费领取,后续也会在公众号上定期推送对应内容。 + +**WWDC 内参** 系列是由「老司机技术」牵头组织的精品原创内容系列。已经做了几年了,口碑一直不错。和往年不同,今年几乎没有脱水稿了,得益于组建的审核团队和不断优化的创作流程,大家创作的内容都已经超越了视频本身的内容,非常有学习和参考意义。 + +> 双审核机制:一位审核从专业性角度看内容是否正确,另外一位审核从读者角度看知识是否正确引导。 ## 订阅周报 @@ -29,6 +33,9 @@ #### 轮值主编
+ + + @@ -115,6 +122,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
#### 荣誉编辑 diff --git a/Report template.md b/Report template.md index 6abca4a29..4f7ff3747 100644 --- a/Report template.md +++ b/Report template.md @@ -1,6 +1,6 @@ -# 老司机 iOS 周报 #1 | 2021-03-25 +# 老司机 iOS 周报 #319 | 2025-01-06 -![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) 老司机 iOS 周报,只为你呈现有价值的信息。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 @@ -37,25 +37,17 @@ > 比较不错的书的推荐和书评 -## 摸鱼周报 - -[@摸鱼周报 #11](https://mp.weixin.qq.com/s/hE9wYlLX8F1sKjIF5eIPVQ):本期摸鱼周报带来了 - ## 内推 -老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 - -如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav - -如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 -当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) ## 关注我们 我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 -**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) diff --git a/Reports/2022/#197-2022.03.28.md b/Reports/2022/#197-2022.03.28.md index 6abca4a29..4792f5562 100644 --- a/Reports/2022/#197-2022.03.28.md +++ b/Reports/2022/#197-2022.03.28.md @@ -1,4 +1,4 @@ -# 老司机 iOS 周报 #1 | 2021-03-25 +# 老司机 iOS 周报 #197 | 2022-03-28 ![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) 老司机 iOS 周报,只为你呈现有价值的信息。 @@ -7,42 +7,117 @@ ## 新闻 -> 行业相关的新闻、趣事、看法 +### [Swift bugs are moving to GitHub Issues and we need your help!](https://forums.swift.org/t/swift-bugs-are-moving-to-github-issues-and-we-need-your-help/56125) + +[@J_Knight_](https://github.com/knightsj):Swift 的 issue 管理将要从 JIRA 转移到 Github,计划全部迁移过程在今年的4月28日结束。在这之前,已经在 JIRA 上建立的 issue 会被完全复制到 Github 的 issue 列表中,作为一个新的 issue。以后 JIRA 也不再支持新的 issue 的建立,而且 bugs.swift.org 网址也会重定向到 Github issue 的地址。想了解详细迁移步骤的读者可以了解一下。 ##  Developer - 设计开发加速器 -> 设计开发加速器相关活动 +### 🌟 🐕 [在苹果加速器活动做的 SwiftUI 开发分享](https://mp.weixin.qq.com/s/vni4zrbIWqvX7vZ9WuX2xw) + +戴铭老师受 Apple 加速器 SwiftUI 活动的邀请在 3 月 25 日做了一次关于 SwiftUI 的分享,分享内容包括但不限于macOS 如何解决多栏问题、Toolbar、文件夹嵌套结构、文本和代码编辑器、Grid、Vision、SwiftUI 组件和 UIKit 组件对比等内容。 ## 新手推荐 -> 收集一些对新手友好且质量不错的文章 +### 🌟 🐕 [Abstract types and methods in Swift](https://www.swiftbysundell.com/articles/abstract-types-and-methods/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了 Swift 中一种实现虚类的方案。单独使用 Class 或者单独使用 Protocol 都会有各自的不足,因此作者选择: + +方法定义在 Protocol 中(包含 associatedtype ),成员变量定义在 Class 中,再使用 typealias 将 Protocol 与 Class 组合成一个类型进行使用。 + +这个方案也会带来一些问题,但也有各自的解决方案,酌情选取即可。 + +- 由于新的类型也包含 associatedtype,因此[无法被直接当类型使用](https://www.swiftbysundell.com/questions/referencing-generic-protocols/),可以使用[类型擦除](https://www.swiftbysundell.com/articles/different-flavors-of-type-erasure-in-swift/)解决。 +- 无法基于新的类型添加 extension。只能在原本的 Class 中添加方法,但有时这个方法又不应该或者不能添加在原本的 Class中。这时则可以在 Protocol 中也重复声明 Class 中对应的变量,而把方法添加在 Protocol 对应的 extension 中。 ## 文章 -> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 +### 🐕 [内存优化: 纹理压缩技术](https://mp.weixin.qq.com/s/V7sK1WwQ4D3LikK2AHgrZQ) -## 工具 +[@老驴](https://weibo.com/u/6090610445):元宇宙和 3D 相关技术的火爆也在最近带动了相关话题好文章的出现。淘系技术团队的这篇分享就是阿里团队在小程序中对纹理压缩的一些探索和优化。 GPU 的不断发展让纹理压缩在移动端也获得了广泛的支持,而如果能合理的使用,能够带来体积,内存占用和性能上的提升。 + +### 🐕 [AnyObject, Any, and any: When to use which?](https://www.avanderlee.com/swift/anyobject-any/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.6 在 [SE-355](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `any` 关键词,加上之前已有的 `AnyObject` 和 `Any`(注意是大写)。本文介绍了三个关键词各自的使用场景并着重介绍新引入的 `any` 的作用。 + +### 🐢 [Hummer 引擎优化系列 - 大批干货来袭预警](https://mp.weixin.qq.com/s/esYrzI1N_AsZPjJXZxnSdQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Hummer 是 UC 内核团队定制的 Flutter 引擎,它基于官方 Flutter 引擎进行优化增强。经过近两年的持续优化和增强,Hummer 在各方的表现都足够亮眼,且经过了巨量的验证,接下来 UC 团队将会讲这些优化经验回馈于社区,可谓是干货满满,主要集中在: + +- 性能优化 +- 包体积优化 +- 内存稳定性 +- Dart 语言层优化 +- 业务层功能增强 + +### 🐕 [Flutter 比 React Native 更好吗?](https://mp.weixin.qq.com/s/DozzpgKxvXtgBG1-tYjboQ) + +[@xiaofei86](https://github.com/xiaofei86):本文作者是一家软件开发公司的创始人兼 CTO,同时也是 React Native 的核心成员。在这篇文章里,作者试着尽可能公平地从人力成本,开发者体验,性能,体验,Web 支持,第三方生态,动态更新,以及使用它们的公司等多方面,去讨论 Flutter 和 React Native 的优劣,让大家在项目技术选型时多一点指导权衡思考的素材。 -> 开发过程中常用的工具,及一些新工具的介绍 +### 🐕 [Creating Airbnb’s Page Performance Score | by Andrew Scheuermann | The Airbnb Tech Blog | Medium](https://medium.com/airbnb-engineering/creating-airbnbs-page-performance-score-5f664be0936) -## 代码 +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了 Airbnb 构建自己的 PPS (一个 0 - 100分的多维度页面性能评分体系)的思考过程、维度分析、困难探索、落地效果。可以按下面几个步骤品读: -> 库,代码段,开源app +- Early Performance Measurement Efforts +- Introducing the Page Performance Score +- The Metrics +- Web Metric Weights +- PPS Evolutions +- Weighted Average Score -## 书 +### 🐕 [自动拦截 50% crash,字节自研 Fastbot 如何助力今日头条稳定性测试](https://mp.weixin.qq.com/s/WOFf5Pj9zEKhqbRtzR95Gw) -> 比较不错的书的推荐和书评 +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Fastbot 是字节自研的智能化测试服务,利用机器学习和强化学习进行遍历测试,在代码覆盖率方面与人工回归有着相当的表现。Fastbot 可以实现操作可视化、场景限定、卡屏检测、无障碍检测等诸多能力。目前 Fastbot 自动化任务已经能较好地发现 App 内的稳定性问题,已经可以帮助字节拦截 50% 左右的异常问题,同时会继续完善 Fastbot 的遍历能力和健全 Fastbot 相关指标建设。 -## 音视频 +## WWDC21 内参 -> 比较不错的书的推荐和书评 +### [为你的 App 减少网络延迟](https://mp.weixin.qq.com/s/F6Yfbqio50OyAzCntNEmXg) + +[@lmh](https://github.com/mhlee2913):本文主要介绍了影响网络延迟的原因及如何降低网络延迟,主要是从降低 `RTT` 次数,和降低单次 `RTT` 时间展开讲述。文中涉及了很多传输层协议相关的知识,也会对相关概念进行解释。最后介绍了目前一些技术的应用现状。 + +### [Swift 中的 ARC 机制: 从基础到进阶](https://mp.weixin.qq.com/s/ZJ3gVI-jzDcKpRKa0IMi0A) + +[@刘夏](https://github.com/lldong):文章围绕 Swift 语言中的 ARC(自动引用计数)机制讲述了实践过程中对象生命周期变化可能引发的问题以及如何从语言或代码设计层面去规避这些问题。 + +## 工具 + +### [swift-docc-plugin](https://github.com/apple/swift-docc-plugin) + +[@kemchenj](https://kemchenj.github.io):跟随 Xcode 13.3 发布的 SPM 加入了 [Command Plugin](https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md) 功能,苹果官方也发布了[对应的 docc 插件](https://github.com/apple/swift-docc-plugin),只要在 Package.swift 里引入这个 plugin,就可以在 CLI 里用 `swift package generate-documentation` 一键生成文档。: + +```swift +let package = Package( + // name, platforms, products, etc. + dependencies: [ + // other dependencies + .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), + ], + targets: [ + // targets + ] +) +``` ## 摸鱼周报 -[@摸鱼周报 #11](https://mp.weixin.qq.com/s/hE9wYlLX8F1sKjIF5eIPVQ):本期摸鱼周报带来了 +[@摸鱼周报 #48](https://mp.weixin.qq.com/s/vdUy-BqxWzuPcjYO6fFsJA):第四十八期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:node-ipc 供应链投毒事件 +* 面试模块:OC 对象弱引用指针标识位 +* 优秀博客:程序员如何自我提升 +* 学习资料:以 Java 为背景的全栈知识体系 +* 开发工具:新一代卡片笔记工具:flomo ## 内推 +### [上海] 谷歌 - iOS 开发 - 智能家居 + +谷歌在上海开放了 iOS 岗位,主要与 Google Nest 智能家居相关的 App 开发。 + +更多岗位介绍详见:[Software Engineer, iOS App, Nest Smart Devices](https://careers.google.com/jobs/results/92585557856527046-software-engineer-ios-app-nest-smart-devices/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios) 和 [Lead Software Engineer, iOS App, Google Nest](https://careers.google.com/jobs/results/108031396271792838-lead-software-engineer-ios-app-google-nest/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios) + +### 其他 + 老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav diff --git a/Reports/2022/#198-2022.04.11.md b/Reports/2022/#198-2022.04.11.md new file mode 100644 index 000000000..4deaabe67 --- /dev/null +++ b/Reports/2022/#198-2022.04.11.md @@ -0,0 +1,234 @@ +# 老司机 iOS 周报 #198 | 2022-04-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Call to Code](https://developer.apple.com/wwdc22/) + +苹果将在今年 6 月 6 日举办一年一度的 WWDC 全球开发者大会,今年的大会主题是「Call to Code(召唤编码侠)」,依旧采用在线形式举行,会给大家带来各种最新技术的展示。今年,老司机依旧会牵头组织 「WWDC 内参」活动,想参与的可以添加 iTDriverr 了解细节。 + +### [“阅读器”app 分发的更新](https://developer.apple.com/cn/news/?id=grjqafts) + +去年,Apple 宣布了 2022 年初在 App Store 上将进行的更新,该更新将允许“阅读器”app 的开发者在 app 中提供一个指向其网站的链接,以便用户创建或管理帐户。从今天开始,《App Store 审核指南》中的准则 3.1.3(a) 将会更新,阐明阅读器 app 的开发者现在可以申请外部链接的帐户授权。此授权将允许阅读器 app 链接到开发者拥有或维护的网站,以便用户在 app 外创建或管理其帐户。阅读器 app 指的是提供以下一种或多种数字内容类型 — 杂志、报纸、图书、音频、音乐或视频 — 作为其主要功能的 app。 + +##  Developer - 设计开发加速器 + +### [降低 App 的卡顿率](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 12 日(报名截止 4 月 11 日) + +App 性能留给用户的第一印象往往难以改变。本讲座详细讲解导致 app 卡顿的一些反面典型,和避免这些卡顿的最佳实践。讲座重点讨论 Grand Central Dispatch 多线程技术,以便减少卡顿。并指导开发者适时采用异步编程,以便提高性能。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 新手推荐 + +### 🐎 [Introduction to Xcode Frame Debug - A Sherlock Holmes Adventure](https://holyswift.app/introduction-to-xcode-frame-debug-a-sherlock-holmes-adventure) + +[@Smallfly](https://github.com/iostalks):在 iOS 开发过程中经常要和 View 打交道,难免会遇到 View 显示异常的问题。本文从 Xcode Debug View 工具入手,介绍了几种调试 View 不显示的线索,主要包括: + +* 检查 View 是否在父视图上 +* 检查 alpha 属性 +* 检查 hidden 属性 +* 检查 frame 是否超出父视图 + +这几种方式都比较常规。最后还介绍了一个小技巧,设置 `clipsToBounds = true` 的父视图,通过 *Show Clipped Content* 能显示被裁切的子视图。 + +## 文章 + +### 🌟 🐢 [干货 | Flutter在携程复杂业务的高性能之旅](https://mp.weixin.qq.com/s/QgPXNpdU2mlAb6tlcsm_eQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 在渲染性能上一直都是其宣传的亮点,然而即使这样在业务开发中仍然有较多需要注意的地方,本文由携程团队给大家带来的 Flutter 下复杂场景的性能优化,涉及方方面面,干货满满,所有优化项所见所得: + +- UI 线程优化 + - 拆分VieModel降低刷新几率 + - Provider监听数据推荐使用Selector + - 减少在build中做耗时操作,放到Isolate去执行 + - 缓存高层级组件 + - 控制刷新范围、频次 + - setState 刷新颗粒度在最低层 + - const 修饰避免频繁构造 + +- GPU 线程优化 + - 使用RepaintBinary隔离 提别是轮播广告、动画 + - 减少ClipPath的使用,简单圆角采用BoxDecoration实现 + - 避免Opacity,可以通过切图实现。有动画效果的建议用AnimatedOpacity + - 避免使用带换行符的长文本 + +- 图片渲染性能和内存开销治理 + - 图片预加载 + - 资源优化 + - 图片内存优化 + +- 长列表滑动性能优化 + - ListView Item 复用 + - 首页预加载 + - 分页预加载 + - 取消在途网络请求 + +小编强烈推荐 👍 ,同时再次推荐携程团队的[另一个干货: Flutter控件CustomScrollView原理解析及应用实践](https://mp.weixin.qq.com/s/dF5Id3w_To4aXeXDbUnUjQ)给同学们搭配学习 + +### 🐕 [Airbnb’s Page Performance Score on iOS | by Nicholas Miller | The Airbnb Tech Blog | Medium](https://medium.com/airbnb-engineering/airbnbs-page-performance-score-on-ios-36d5f200bc73) + +[@Barney](https://github.com/BarneyZhaoooo):本文是 Airbnb PPS 的第二部分,介绍了 PPS 在 iOS 端的具体实践应用,并配有重点代码思路分析,时间锚点的选取和状态机的丝滑运用让人眼前一亮。 + +- Page System +- PPSStateMachine +- Time +- View Association +- Metric Implementation + +### 🐕 [FormatStyle AttributedString Output](https://ampersandsoftworks.com/posts/formatstyle/style-deep-dives/attributed-strings/) + +[@anotheren](https://github.com/anotheren): AttributedString 是 iOS 15 引入的全新富文本对象,同时也引入了 FormatStyle 协议来抽象格式化的方式。本文提供了大量实例(Playground)来展示如何使用这些内置的 API 来格式化日期、单位、数据等对象。 + +### 🐕 [iOS 15.4 12小时制 时间格式转换崩溃 - 掘金](https://juejin.cn/post/7077493937383948295) + +[@Barney](https://github.com/BarneyZhaoooo) :本文介绍了一个在iOS15.4系统由于时间转换造成的崩溃。时间转换是大家平时开发经常用到的,值得引起注意防患于未然。 + +- 系统解析对比 +- 理论原因定位 + +### 🐕 [Flutter 代码生成 source_gen 使用与原理分析](https://mp.weixin.qq.com/s/lrEzYdbafrqfDVFQl2ebRQ) + +[@邦Ben](https://weibo.com/linwenbang):众所周知,你应该多少会用过 json_serializable 吧,那么就一定知道基本的原理是通过解析声明文件,从而生成相关 json 序列化和反序列化代码。那么当你从事过较多的开发之后,一定会遇到很多重复的代码复制粘贴,例如:路由的编写,或者 channel 的生成,架构代码生成,ImageAsset 代码生成等等。那么你应该会自然地想到,我也可以像 json_serializable 和 pigeon 去做一些提高效率的工具,那这时候可以看下 source_gen,这个库进行了一些封装,让你更方便的定制代码生成的逻辑。 + +参考链接: +[Flutter使用source_gen快速提升开发效率](https://mp.weixin.qq.com/s/kwgI1FsEo5BGE7bRqKM7Mw) + +### 🐢 [Flutter 滑动体验对齐原生 - 滑动曲线篇](https://mp.weixin.qq.com/s/aqXdYYEArhEj6ikqg2oX9g) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了在 Flutter 的滑动手感拉齐 Native 方向上做出的努力。主要思路分为两步:解决 fling 动画在一次滑动中反复重启;选择更合适的衰减公式。同时介绍了调整滑动曲线的一些常用思路:降低初速度给曲线减速;通过对初始速度叠加衰减值,运用二次函数,在快速滑动时衰减慢,慢速滑动时衰减快。 + +### 🐕 Optimization in Swift + +作者以 filter 为例,带着我们进行一次算法性能优化,包括算法性能的测算,结果的分析以及后续针对性的优化: + +1. [如何测量算法性能](https://trycombine.com/posts/swift-performance-concurrency-1/) +2. [使用 Concurrency 算法](https://trycombine.com/posts/swift-performance-concurrency-2/) +3. [内存预分配](https://trycombine.com/posts/swift-performance-concurrency-3/) +4. [总结](https://trycombine.com/posts/swift-performance-concurrency-4/) + +### 🐕 [Swift 生成原生二维码](https://digitalbunker.dev/native-barcode-qr-code-generation-in-swift/) + +[@AidenRao](https://weibo.com/AidenRao):如果你需要生成一个二维码或者条码,无需去寻找第三方库,直接用 swift 原生代码就可以实现。iOS 自带的 CIFilter 支持二维码、[Aztec 码](https://zh.wikipedia.org/wiki/Aztec%E7%A0%81)、[Code 128](https://en.wikipedia.org/wiki/Code_128) 以及 [PDF417 条码](https://zh.wikipedia.org/wiki/PDF417%E6%9D%A1%E7%A0%81),文章还提供了每一个条码的示例代码作为实现参考。 + +### 🐎 [Weak self, a story about memory management and closure in Swift](https://benoitpasquier.com/weak-self-story-memory-management-closure-swift/) + +[@kemchenj](https://kemchenj.github.io/):在 Swift 里我们经常需要使用 weak 和 unowned 来解决循环引用的问题。 + +只使用一个闭包的时候,引用的逻辑关系很简单明了,但闭包嵌套的时候,即使使用了 weak 也有可能会不小心产生循环引用,这篇文章就针对这种情况进行了仔细的说明,并且提供对应的解决方案。 + +### [Swift.org Website is Now Open Source](https://www.swift.org/blog/website-open-source/) + +Swift.org 网站一直以来为广大开发者提供 Swift 相关的开源库、工具、文章等,现如今,其官方宣布 Swift.org 网站本身也成为了一个开源项目!这为广大 Swift 粉丝提供了一个很好的学习平台,快去看看吧! + +### 🐎 [Consistent Swift style in Xcode with SwiftLint](https://swdevnotes.com/swift/2022/consistent-swift-style-in-xcode-with-swiftlint/) + +[@老峰](https://github.com/gesantung):SwiftLint 是 Realm 推出的一款 Swift 代码规范检查工具,本文较详细的的介绍了 SwiftLint 的使用,包括: +- 将 SwiftLint 与 Xcode 集成 +- SwiftLint 规则 +- 自动修复&手动修复 SwiftLint 违规代码 +- 自定义 SwiftLint 规则 + +### 🐕 [理解 Swift 中的指针](https://mp.weixin.qq.com/s/4O5RZCiR9-kUOHJ5SdE9jg) + +[@AidenRao](https://weibo.com/AidenRao):Swift中的指针分为两类 + +1. typed pointer: 指定数据类型指针,即 UnsafePointer\。 +2. raw pointer: 未指定数据类型的指针(原生指针) ,即 UnsafeRawPointer。 + +每一类又分可变不可变,pointer(单个值) 与 bufferPointer(相同类型集合)。 + +文章通过示例代码,详细介绍了这些指针的使用方式。 + +### 🌟 🐕 [短视频编辑中的AVFoundation框架](https://juejin.cn/post/7077870149239308324) + +[@JonyFang](https://github.com/JonyFang): 本系列文章围绕 iOS 平台上短视频编辑功能中 AVFoundation 扮演的角色展开讨论,本篇主要介绍学习 AVFoundation 框架需要了解的基础模块和相关的数据类型及注意事项。本系列文章分三篇,依次为: + +- [01.框架概述与基础](https://juejin.cn/post/7077870149239308324) +- [02.素材添加与处理](https://juejin.cn/post/7077875029161017380) +- [03.视频编辑与导出](https://juejin.cn/post/7079397452192841735) + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +- 第六篇 iOS 音频渲染: [从 MP4 中解封装解码出音频并渲染播放](https://mp.weixin.qq.com/s/xrt277Ia1OFP_XtwK1qlQg) +- [iOS 音频处理框架及重点 API 合集](https://mp.weixin.qq.com/s/w_5pZoeV0GdcFppIpuvVcw) + +[@JonyFang](https://github.com/JonyFang): 第六篇 Demo,主要是实现对 MP4 文件中音频部分的解封装和解码逻辑,并将解封装、解码后的数据送给渲染模块播放;最后在前面音频处理 Demo 的基础上,对 iOS 音频处理框架及重点 API 的梳理。 + + +## 工具 + +### [Hot Reloading in Swift](https://merowing.info/2022/04/hot-reloading-in-swift/) + +[@zvving](https://github.com/zvving):Xcode 通过 Previews 提供快速预览 SwiftUI 代码修改的方案,虽几经迭代,稳定性一直被人诟病;而通过 [InjectionIII](https://github.com/johnno1962/InjectionIII) 同样可以达到实时预览(Live Reload)代码修改的效果,但注入代码非常冗余。通过作者提供的 [Inject](https://github.com/krzysztofzablocki/Inject) 可以大幅简化注入代码(依旧需要配合 InjectionIII 工作)。 + +需要经常调试预览 SwiftUI、UIKit 的朋友不要错过,建议先通过 [Example 项目](https://github.com/MarcoEidinger/InjectSwiftUIExample) 上手配置过程。 + + +## 代码 + +### 🌟 🐕 [fatbobman/SwiftUIOverlayContainer](https://github.com/fatbobman/SwiftUIOverlayContainer) + +[@JonyFang](https://github.com/JonyFang): SwiftUI Overlay Container 是一个用于 SwiftUI 的视图容器组件,可定制、高效、便捷的视图管理器。通过文档的配置,即可完成从视图组织、队列处理、转场、动画、交互到显示样式配置等基础工作。 + +## WWDC21 内参 + +### [初见 TextKit 2](https://mp.weixin.qq.com/s/vZ74jNgItabOB-TsaQn6Uw) + +[@Damien](https://github.com/ZengyiMa): 通过本文你将会了解到 TextKit 1 到 TextKit 2 的变化内容,并且可以深入了解 TextKit 2 的内部的工作原理和机制。 + +### [IAP 用户退款与客诉处理优化](https://mp.weixin.qq.com/s/MtytymgkcP3_oAH7JyI1og) + +[@SeaHub](https://github.com/SeaHub): 众所周知,IAP 客诉处理一直是一个"老大难"问题。用户在反馈 IAP 问题时,往往只提供其支付后获得的苹果订单。而由于苹果设计原因,开发者无法根据苹果订单反查出业务订单信息,继而无法较好的处理用户反馈的客诉问题,导致支付用户可能因体验不佳而流失。除此之外,恶意退款也是另外一个 IAP 工程师必经的"老大难"问题,无法有效索回商品,导致造成业务出现坏账的情况比比皆是 + +WWDC 2021,苹果为了优化客诉处理,同时为了打击恶意退款,提供了不少新能力。通过阅读本文,读者可以快速掌握部分 IAP 场景的痛点,以及如何基于新特性优化这部分的痛点 + +### [IAP 后台通信优化与实践](https://mp.weixin.qq.com/s/dWsRKRJsYMRl0GX_36T-kg) + +[@SeaHub](https://github.com/SeaHub): 长期以来,苹果仅为 IAP 提供了 /verifyReceipt 这一个用于校验票据的后台接口。这也导致了该接口被全球众多开发者所依赖,基本上这个接口一旦出现问题,依赖后台票据校验的 App 都会出现因无法校验票据有效性而出现发货延迟问题。令人糟心的是,/verifyReceipt 接口目前表现确实不太稳定,一年总会出现两三次的服务不可用的情况;而日常其请求时耗也极高,业务的 IAP 后台处理时耗严重受该接口影响 + +终于在今年,苹果新增了 Subscription Status API & In-App Purchase History API,同时,也诞生了可自校验的 JWS 形式票据。并且苹果还对备受开发者吐槽的后台通知进行了升级,新增 App Store Server Notification V2。 + +在我看来,类似的举措一方面是为了给 /verifyReceipt 降负,另一方面也是为了丰富 IAP 的场景,给开发者提供更好的服务。通过阅读本文,读者可以快速掌握本次 WWDC21 的新特性,以及能够基于新特性对历史遗留的痛点做相应的优化处理 + +## 摸鱼周报 + +[@摸鱼周报 #49](https://mp.weixin.qq.com/s/6GvVh8_CJmsm1dp-CfIRvw):第四十九期摸鱼周报来了,一起来看下本期概要: + +* 话题:Chrome 100 发布,关于阅读器类的 App 审核指南有所更新 +* 面试模块:Runtime 中的 **StripeMap** 模板类 +* 优秀博客:Swift 5.6 和 Xcode 13.3 的新特性和新功能 +* 学习资料:即时设计是一款可以在线实时协作的专业 UI 设计工具 +* 开发工具:Decode,将 `Xcode Interface Builder` 文件(`Xib` 和 `Storyboard` 文件)转换为 `Swift` 源代码。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#199-2022.04.18.md b/Reports/2022/#199-2022.04.18.md new file mode 100644 index 000000000..86ab1b8e0 --- /dev/null +++ b/Reports/2022/#199-2022.04.18.md @@ -0,0 +1,204 @@ +# 老司机 iOS 周报 #199 | 2022-04-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [“订阅优惠”的工程实践](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 21 日(报名截止 4 月 20 日) + +学习如何通过 StoreKit 技术的接入向您的用户提供自动续期订阅产品的推介促销优惠、促销优惠和优惠代码。允许新用户或现有用户在特定时限内免费获取或以折扣价购买自动续期订阅。 + +### [加快您的测试过程](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 19 日(报名截止 4 月 18 日) + +探索如何进行自动化测试,进一步有效处理测试结果。改进您的测试套件以加快反馈循环,进而更快地得到修复。了解如何利用 Test Plan 测试计划、xcodebuild 命令行工具及相关 API 来消除永无止境和表现不佳的测试。我们将研究 XCTest 中的测试超时和执行时间余量,检查设备并行化,并详细介绍用于平衡性能和明确故障定位的推荐实践。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 新手推荐 + +### 🐕 [Design Patterns 的实战应用记录](https://medium.com/p/78507a8de6a5) + +[@老驴](https://weibo.com/u/6090610445):2016年的时候最火的文章莫过于一些设计模式类的分享。当时各种 MVP,MVC 等等的讨论火爆整个移动开发圈。只不过这几年,很难再见到有这类的文章了。这篇文章是作者自荐,记录的是作者完成一个对其他第三方库的封装的过程。对于刚接触移动开发的同学,可以再学习一下设计模式和其中的思路。 + +对于大家刚接触这类的同学们,还是想再强调下,天下没有最好的设计模式,只有最适合当前项目的设计模式。千万不要陷入为了模式而模式的陷阱中去,过度设计也不可取。 + +> 推荐人:[zhgchgli0718](https://github.com/zhgchgli0718) + +## 文章 + +### 🌟 🐢 [Lookin 原理及 5 个开发难点](https://mp.weixin.qq.com/s/DL28y2qHkuDv4W_zLUbKcg) + +[@Damonwong](https://github.com/Damonvvong):Lookin 是一款可以查看与修改 iOS App 里的 UI 对象的软件,相信很多人都使用过它,之前一直好奇这款软件的实现原理,软件作者李凯就带了了实现 Lookin 的原理和 5 个开发难点。其主要通过 CS 架构实现 mac app 和 iOS app 之前的通信机制。同时也从做 Lookin 这款软件的过程中,总结了以下几个经验: + +- iOS 程序员如何学习写 macOS 程序? +- 如何在 macOS 和 iOS 之间传输数据? +- 如何正确渲染展开/折叠图像? +- 如何渲染 3D 图像? +- 如何加快刷新速度? + +感兴趣的同学,可以阅读原文查看细节。 + +### 🌟 🐕 [Xcode Cloud: Feedback from leboncoin](https://medium.com/leboncoin-engineering-blog/xcode-cloud-feedback-from-leboncoin-82991326faa0) + +[@Damien](https://github.com/ZengyiMa): Xcode Cloud 是专为 Apple 开发者设计的 Xcode 内置持续集成和交付服务。本文来自 leboncoin iOS 团队在使用 Xcode Cloud 的体验,详细介绍了 Xcode Cloud 的方方面面,也介绍了其中的不足和优势,对 iOS 开发 CICD 相关的感兴趣的同学不妨一读。 + +### 🌟 🐕 [音视频工程示例 AVDemo 7、8、9](https://mp.weixin.qq.com/s/CJAhkk9BmhMOXgD2pl_rjg) + +[@JonyFang](https://github.com/JonyFang): 音视频工程示例 AVDemo 7、8、9 篇: + +- iOS AVDemo 7: [视频采集 Demo](https://mp.weixin.qq.com/s/CJAhkk9BmhMOXgD2pl_rjg),实现视频采集逻辑并将采集的视频图像渲染进行预览,同时支持将数据转换为图片存储到相册; +- iOS AVDemo 8: [视频编码 Demo](https://mp.weixin.qq.com/s/M2l-9_W8heu_NjSYKQLCRA),串联视频采集和编码模块,将采集到的视频数据输入给编码模块进行编码,并存储为文件; +- iOS AVDemo 9: [视频封装 Demo](https://mp.weixin.qq.com/s/W17eLiUeCszNM8Kg-rlmBg),串联视频采集、编码、封装模块,将采集到的视频数据输入给编码模块进行编码,再将编码后的数据输入给 MP4 封装模块封装和存储; + +### 🐢 [得物 App H5 秒开优化实战](https://mp.weixin.qq.com/s/23ZFPK4CaCkinwpZ3SG9Rw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了得物技术是如何将 H5 页面的秒开率从 30% 提高到 75% 的。文章最开始介绍了优化的背景和使用的指标。然后介绍了具体的优化方案,在客户端和 H5 都做了优化: + +客户端优化: +- HTML 预加载 +- HTML 预请求 +- 离线包技术 +- 接口预请求 +- 预建连 & 链接保活 +- 预渲染 + +H5 优化: +- SSR 服务端渲染 +- HTML 预渲染 +- CSS 包大小优化 +- 图片优化 +- 其它优化 + +在介绍方案的同时,也给出了遇到的难点和方案应用后的效果展示,文章最后也介绍了所使用的前端性能监控的方案 + +### 🐢 [Introducing Swift Async Algorithms](https://www.swift.org/blog/swift-async-algorithms/) + +[@莲叔](http://github.com/aaaron7):async/await 操作符相信大家都不陌生,在很多语言中都对起进行了支持,比如 js。async/await 最大的意义在于让我们可以用顺序结构来书写异步代码,更加清晰,避免了callback hell。3月份,Swift 维护小组发布了原型版本的 Swift Async Algorithm Package,其中就包含了 async/await 的实现以及专门用来处理异步系列的算子,比如 Zip/CombineLast/Merge/Chain/Buffer/Debounce/Throttle。这些算子相信大家都不陌生,其实用法和在处理集合类型中使用是没有太大区别的,只是搭配 async/await 来使用就能够并发强大的能量,使用简洁的代码描述复杂的异步逻辑。感兴趣的同学可以持续关注这个 package 的后续进展。 + +### 🐎 [iOS SIGKILL 简单介绍](https://juejin.cn/post/7081995513700024327) + +[@xiaofei86](https://github.com/xiaofei86):当崩溃日志的 Exception Type 为 SIGKILL 时,表示操作系统从上层杀死了我们的进程。本文通过对苹果 [Understanding the Exception Types in a Crash Report](https://developer.apple.com/documentation/xcode/understanding-the-exception-types-in-a-crash-report) 和 [Addressing Watchdog Terminations +](https://developer.apple.com/documentation/xcode/addressing-watchdog-terminations) 文章的翻译整理,介绍了 SIGKILL 不同错误代码的含义,以及如何定位解决这些问题。 + +### 🐎 [Adding Custom Shortcuts To Xcode](https://digitalbunker.dev/toggling-slow-animations-again/) + +[@极速男孩](https://github.com/ztlyyznf001):在 Xcode 把开启模拟器中的Slow Animations 的 Command + T 去掉以后,如果要打开 Slow Animations 就变得十分麻烦。本文教你如何给 Xcode 设置一些自定义的快捷键。 + +### 🐢 [终端新玩法:“零代码”的剧本式引导](https://mp.weixin.qq.com/s/HZDcvHAtIgJfgD2mMGaHzA) + +[@AidenRao](https://weibo.com/AidenRao):互联网行业节奏偏快,App 的更新愈发频繁,如何让用户理解产品功能,完成认知迭代,是业务发展中不可忽视的一环。本文介绍了美团外卖终端团队在用户心智建设领域的探索与实践。从业务现状与剧本式思维的思考出发,终端加管理后台的一站式设计,传统 CV 与深度学习结合,大大简化了剧本式引导的接入门槛。 + +### 🐕 [Xcode13 “消失”的 Info.plist 文件](https://mp.weixin.qq.com/s/mgGjBb9dt714c117xrYGfQ) + +[@Barney](https://github.com/BarneyZhaoooo): 本文介绍了 Xcode13 中 Info.plist 文件的官方配置变化。 + +从 Xcode13 开始,新建的工程不再要求使用配置文件(Info.plist、entitlements)。如果需要修改 Xcode 的配置,请直接在 Xcod e面板 ”target - Info - Custom iOS Target Properties” 和 ”build settings”中设置。 + +- 消失的 Info.plist 文件 +- 如何回到从前的 Info.plist? + +### 🐎 [Flutter 代码生成技术 APT 与 AOP 适用场景与对比](https://mp.weixin.qq.com/s/eWG8HiaJFiHd3jxSnnZ4aQ) + +[@Damien](https://weibo.com/ZengyiMa):APT(Annotation Processing Tool)是注解处理工具,AOP(Aspect-Oriented Programming)是面向切面编程,在 Flutter 中也有类似的概念,本文从以下几个方面详细介绍了这 2 项技术: + +* APT & AOP 的概念解读 +* APT & AOP 的实现原理 +* APT & AOP 的使用场景 +* APT & AOP 的技术对比 + +### 🐎 [精确定位页面滑动帧率瓶颈及优化参考](https://juejin.cn/post/7077812846217658381) + +[@Leo](https://github.com/leomobiledeveloper):页面流畅性是一个非常影响用户体验的性能指标。本文从原理和工具出发,讲解了如何定义以及分析卡顿,接着从富文本异步绘制、约束布局、视图创建等几个角度介绍了如何针对性的优化。 + +### 🐕 [PROTOCOL & GENERIC IN SWIFT](http://nonomori.bitcron.com/post/protocolandgenericinswift/readme) + +[@zvving](https://github.com/zvving):Swift 基于面向协议的设计提供了简明&丰富的抽象手段,这也给复杂场景使用 Protocol 带来不少歧义,官方最近几个版本与之相关的设计也持续被讨论并改进。比如 [Opaque Result Types](https://github.com/apple/swift-evolution/blob/master/proposals/0244-opaque-result-types.md)、[Unlock existentials for all protocols](https://github.com/apple/swift-evolution/blob/main/proposals/0309-unlock-existential-types-for-all-protocols.md)。 + +本文从一个简单例子对比范型及类型擦除如何应用及二者内部实现的不同,帮助大家加深理解: +- 静态 vs 动态 +- 编译器生成模板代码 vs 通过 Existential Container 隐藏类型 + +### 🐎 [Type placeholders in Swift](https://www.swiftbysundell.com/articles/type-placeholders-in-swift/) + +[@anotheren](https://github.com/anotheren):Swift 5.6 中引入了 **Type Placeholders** 来进一步优化类型推断,允许使用 `_` 来让编译器自动推断类型,对于例如 `CurrentValueSubject` 这一类的复杂范型更加友好。 + +### 🐢 [构建顺滑自然的 Flutter 页面](https://mp.weixin.qq.com/s/6FLMcE67BCbXvnbFSRgHFg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 以高性能和高一致性渲染著称,但也不是随便写写就能流畅如丝的,本文由阿里巴巴移动团队产出,分享了 Flutter 流畅度优化的挑战、监控工具、优化手段和建议。从代码到工具侧的使用,抽丝剥茧,强烈推荐 + +## 工具 + +### [XcodePatch](https://github.com/unixzii/XcodePatch) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Xcode 13.3 在 LLDB 中使用中文输入就会直接卡死,这个工具通过重签与注入 Patch 的方式解决卡死。近日最新发布的 Xcode 13.3.1 依旧未修复此问题。~~升级 Xcode 竟成高风险行为~~。 + +### [Xcode13 Tips:构建系统](https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-13_3-release-notes#Build-System) + +[@红纸](https://github.com/nianran):Xcode13 现已提供新的构建参数用于加速 Swift 项目的构建,其能够更好的使用内容,加快构建速度。你可以通过下述全局命令打开此构建参数: + +```shell +defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1 +``` + +### [xcframework-maker](https://github.com/darrarski/xcframework-maker) + +[@红纸](https://github.com/nianran):此工具可以将 Fat Framework 作为原料来转化为 XCFramework 文件。生成的 XCFramework 可以作为 SPM 的依赖使用。 + +## 代码 + +### [CodeEdit](https://github.com/CodeEditApp/CodeEdit) + +[@水水](https://www.xuyanlan.com): CodeEdit 是一个由开发者社区为社区而构建的免费开源的代码编辑器,功能包括语法突出显示、代码完整性、项目查找和替换、代码段、终端、任务运行、调试、git 集成、代码 Review、扩展等。CodeEdit 让不为苹果平台开发的项目像文本编辑一样轻松,但提供类似于 Xcode 的体验。换句话说,希望在保持轻量级、性能和可靠性的同时为开发人员提供完整 IDE 的功能。 + +## 摸鱼周报 + +[@摸鱼周报 #50](https://mp.weixin.qq.com/s/6IS0RlytWxjeRHyh0f2fXA):已经第 50 期了,一个新的节点,一起来看下本期概要吧: + +* 话题:WWDC 22 Call to Code,尝试从图标挖掘一些彩蛋 +* 面试模块:事件响应与传递 +* 优秀博客:复习 iOS 的 rebase 和 bind +* 学习资料:闲话 Swift 协程 +* 开发工具:AppleParty 是一款实现快速操作 App Store Connect 后台的自动化 macOS 工具。 + +## 内推 + +### [上海/北京/杭州/深圳] 字节跳动音乐团队 - 汽水音乐 - iOS/Android 开发 + +字节跳动音乐团队秉承『用音乐建立共鸣,用音乐激发表达。』的使命,除了刚刚上线的汽水音乐,字节在音乐业务已持续投入多年,海外产品 Resso 已突破 2kw DAU,抖音、TikTok 音乐场景不断建设、音乐人服务逐步完善。 + +团队目前 iOS/Android 职位急招(包含初/中高/Leader 职位),Base 上海/北京/杭州/深圳均可。 + +> 联系方式及更多信息:https://www.yuque.com/iosalliance/article/viprra + +### 其他 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#200-2022.04.25.md b/Reports/2022/#200-2022.04.25.md new file mode 100644 index 000000000..89f9827f4 --- /dev/null +++ b/Reports/2022/#200-2022.04.25.md @@ -0,0 +1,134 @@ +# 老司机 iOS 周报 #200 | 2022-04-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 开发者活动 + +> 4 月 23 号的「快手技术沙龙·iOS 技术专场」PPT 已经公开,可以通过「老司机技术公众号」发送「PPT」获取。文字整理和视频回放稍后放出。 + +### [「T Chat | 我在大厂做研发」系列直播首发](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247494102&idx=1&sn=f29dfb12cffa840ee46169409002379a&chksm=eaa176ddddd6ffcbc4050f38f7fc7fa7dc4cd4bca9a59d74c97abd4a6d15ad6ce4b3076cf568#rd) + +作为开发者,在我们的职业生涯中,可能会无数次问自己或者被问到这两个问题: + +- 一线大厂的研发团队在做什么? + +- 研发专家们在关注什么? + +年初做调查问卷的时候发现,有很多人有同样的困扰。所以老司机技术周报决定联合 T 技术沙龙发起「T Chat | 我在大厂做研发」系列直播计划,邀请一线互联网大厂的研发专家,采用在线直播的方式,分享他们团队 or 个人的研发实践经验,尝试回答这两个问题。 + +### [T 技术沙龙移动端技术实践(上海场)文字稿整理完毕](https://mp.weixin.qq.com/s/gjU6ejMRyG7Cqfr9271qsA) + +- [基于 C++ 的 Android 协程设计 - 张涛](https://mp.weixin.qq.com/s/VJJhBt2zYzmczXQwIxu-jQ) +- [自制渲染引擎及在客户端应用 - 王宇](https://mp.weixin.qq.com/s/QanFOa-TsxXqylajjleF7Q) +- [MVI 范式在 Jetpack Compose 上的应用](https://mp.weixin.qq.com/s/1GiafKMZXrpzZDSqpGtpfQ) + +## 新手推荐 + +### 🐕 [iOS | 图解iOS签名背后的原理](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247484901&idx=1&sn=83fcf34b5b4b7a63c17742efa3ee20a8&chksm=ceea4845f99dc1537003bdebd2a93d09c9b413ad0cc8c5108cd93d5b84e63e65a30ce0f6c019&token=996185752&lang=zh_CN#rd) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者带领读者实操申请证书的全流程,并介绍了 iOS 开发证书的申请、验证、加签等过程的原理。适合新手一读。 + +> 本篇收录由该文作者 [@doubleLLL3](https://github.com/doubleLLL3) 自荐。 + +## 文章 + +### 🌟 🐕 [系统困境与软件复杂度,为什么我们的系统会如此复杂](https://mp.weixin.qq.com/s/3PSFMt9cQ1ZCoYQrdOCM6Q) + +[@xuyafei](https://github.com/xiaofei86):作者读《A Philosophy of Software Design》有感,有兴趣可以阅读原文。 + +软件的复杂性有多种表现形式,可能是因为领域模型的边界模糊,而使看似简单的变更需要多处修改代码;可能是因为设计者在各种模式中迷失,使项目脱离现状而过度工程化;可能是因为代码的混乱与文档的缺失,使改动影响范围难以明确。这些模糊创造了复杂,而依赖又传播了复杂,使复杂性不断递增。 + +宇宙处在无法抵抗的商增过程中,孤立的软件系统在不引入外部力量时,也无法抵抗走向复杂与混乱。而架构的本质就是成为这股约束力量。《Clean Architecture》中说道“软件架构的终极目标是用最小的人力成本来满足构建和维护该系统的需求”。 + +但软件工程学科最难的事情就这样的抽象能力,因为它没有标准、没有方法、甚至没有对错。如何在软件固有的复杂性上找到一条既不过度也不缺失的路,是软件工程师的终身课题。 + +### 🌟 🐕 [音视频工程示例 AVDemo 10、11、12、13](https://mp.weixin.qq.com/s/4Ua9PZllWRLYF79hwsH0DQ) + +[@JonyFang](https://github.com/JonyFang): 音视频工程示例 AVDemo 10、11、12、13 篇: + +- [iOS AVDemo 10 - 视频解封装,从 MP4 解出 H.264/H.265](https://mp.weixin.qq.com/s/4Ua9PZllWRLYF79hwsH0DQ): 实现对 MP4 文件中视频部分的解封装逻辑并将解封装后的编码数据存储为 H.264/H.265 文件; +- [iOS AVDemo 11 - 视频转封装,从 MP4 到 MP4](https://mp.weixin.qq.com/s/VVItfhebc6L-JQFCGBtapQ): 实现对 MP4 文件中音视频的解封装逻辑,将解封装后的音视频编码数据重新封装存储为一个新的 MP4 文件; +- [iOS AVDemo 12 - 视频解码,MP4 → H.264/H.265 → YUV 的源码](https://mp.weixin.qq.com/s/BIazU0Wd5_p4bx4nKJoH-g): 串联视频解封装和解码模块,将解封装的 H.264/H.265 数据输入给解码模块进行解码,并存储解码后的 YUV 数据; +- [iOS AVDemo 13 - 视频渲染,用 Metal 渲染](https://mp.weixin.qq.com/s/4K8xPX_A8NA01ecmA6UCtw): 串联视频采集和渲染模块,将采集的视频数据输入给渲染模块进行渲染; + +### 🌟 🐕 [视频下载加速,2.5倍优化](https://mp.weixin.qq.com/s/GDNBMmhaRuZH5BesjRdFfg) + +[@极速男孩](https://github.com/JonyFang): 介绍了在搜狐视频 iOS 客户端中,是如何利用 quic 中的 cronet 库,来动态调整缓存视频的并发数。主要通过测试当前的网速并结合当前的网络环境,设备性能和设备性能等因素来将并发数控制在一个合理的方位内。通过这样的优化给 WIFI 环境下带来了 2.35 倍和流量环境下 1.50 倍的速度提升。 + +### 🐕 🌟 [快手 iOS 启动优化实践](https://mp.weixin.qq.com/s/ph7kFRKYWP1bqbNtTK4z3Q) + +[@Leo](http://github.com/leomobiledeveloper):应用启动速度直接影响用户的使用体验,且启动越快、留存就越高,所以做好启动不仅有利于用户体验指标的提升,也会促进核心业务的增长。本文包含了快手团队在 iOS 启动优化上的实践,除了常规的优化方式,还包括像动态库懒加载、TTI 任务调度、后台启动、防劣化等多方面实践,推荐阅读~ + +### 🐕 🌟 [货拉拉用户端体验优化--启动优化篇](https://juejin.cn/post/7087773731061235743) + +[@红纸](https://github.com/nianran):在上篇提到了快手的启动优化,本篇文章则是货拉拉团队的启动优化方案。货拉拉团队在前期的主要优化实践为优化串行接口、启动任务管理、长尾治理(治理低端机的业务 API 耗时)、防劣化。此外文内还提到了三种轻量级的工具用于分析启动任务过程的耗时问题。推荐大家两篇文章一起阅读~ + +### 🐢 [Flutter 音视频开发新思路](https://mp.weixin.qq.com/s/ZpHfkz8CQmPhKY4--WYTWw) + +[@莲叔](http://github.com/aaaron7):Flutter 因为众多优秀的设计而在跨端方案中脱颖而出,成为目前跨端开发的主流选型。常规的业务功能和逻辑模块通过应用 Flutter 可以较好的实现双端代码的一致性。但是对于某些细分领域,比如音视频,对资源的使用和计算的性能高度敏感,Flutter 能做的可能就只能是偏向于纯展示,更多的逻辑都下沉在 Native 实现。虽然能满足需求,但丢失了 Flutter 跨端的优势。闲鱼在这个方向探索了一个新的思路。将音视频处理细化为一个个处理单元,然后在 Flutter 侧将这些处理单元组织成 pipeline 来实现业务逻辑,在保证可用性的基础上最大限度的提升了跨端代码的占比。虽然 Flutter 究竟是否适合音视频场景,业界也是有一定争议的。但这个方案有一定新颖性,也是值得研究学习一下的。 + +### 🐕 [SwiftUI performance tips](https://martinmitrevski.com/2022/04/14/swiftui-performance-tips/) + +[@zvving](https://github.com/zvving):相比 UIKit,SwiftUI 有着不同的声明式写法和渲染机制,这导致二者性能优化思路上有共性,同时也有不同的挑战。本文作者梳理了 SwiftUI 中常见的性能问题,帮助你实现流畅的用户体验: + +- 避免主线程繁重工作:线程隔离网络加载、数据库访问等耗时操作,合理增加数据缓存 +- 避免多余重绘:缩小重绘区域,控制频次,减少不必要的数据更新 +- 合理使用 SwiftUI 组件:用范型替代 AnyView、大量重用视图场景使用 Lazy 组件、最小化使用 GeometryReader 等 +- 使用 Instruments 定位性能问题的一些方法 + +### 🐎 [iOS性能优化——离屏渲染的分析探究](https://mp.weixin.qq.com/s/grfRkNI90bUUCWR0l7TjNw) + +[@Damien](http://github.com/ZengyiMa):离屏渲染是我们开发中经常提到的话题,处理不得当会造成的滑动帧率下降,但是离屏渲染背后的实现的原理是怎么样的呢?我们应该怎么去优化和避免它呢?本文将从 4 个问题出发,详细介绍了离屏渲染: + +- 什么是离屏渲染? +- 离屏渲染为什么会有性能损耗? +- 常见的离屏渲染场景有哪些? +- 怎么避免离屏渲染? + +### 🐎 [iOS制作iBeacon相关SDK,在程序杀死后无法收到本地通知 - 掘金](https://juejin.cn/post/7088597024781647909) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了排查 iBeacon 在程序杀死后无法收到本地通知的过程,也一并从头介绍了 iBeacon 的简单使用。 + +- iBeacon 简介 +- iBeacon 权限相关 +- iBeacon 相关代码实现 +- iBeacon 代码处于 SDK 如何实现后台和 kill 之后的监听 + +## 摸鱼周报 + +[@摸鱼周报 #51](https://mp.weixin.qq.com/s/ogjhELipiVFRaYJkT2NQwA):第 51 期摸鱼周报来了,一起来看下本期概要: + +* 话题:游戏版号恢复发放,45 款游戏获版号 +* 面试模块:简述 `mmap` 应用 +* 优秀博客:iOS 内购主题 +* 学习资料:一本刚翻译的 《iOS 高性能 App 架构》小书 +* 开发工具:`Quiver`是为程序员打造的笔记本,可以轻松混合文本、代码、`Markdown` 和 `LaTeX`。iTab 一款可以自定义 Tab 页的浏览器插件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#201-2022.05.09.md b/Reports/2022/#201-2022.05.09.md new file mode 100644 index 000000000..caecf5400 --- /dev/null +++ b/Reports/2022/#201-2022.05.09.md @@ -0,0 +1,158 @@ +# 老司机 iOS 周报 #201 | 2022-05-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [阐明 App Store 改善流程的标准和新的限期延长](https://developer.apple.com/cn/news/?id=gi6npkmf) + +过去几年,苹果为了保证贯彻在安全和隐私方面的最新改革,陆续下架了 280 万个 App。同时还强调了,在过去三年内从未更新且未达到最低下载量 (即该 App 在连续 12 个月内完全没有或只有极低的下载量) 时,其开发者将会收到电子邮件,告知该 App 已被识别并可能从 App Store 中被移除。具体细节请参照:[App Store 改善的支持页面](https://developer.apple.com/cn/support/app-store-improvements/) + +### [SSWG 2021 Annual Update](https://www.swift.org/blog/sswg-update/) + +Swift 服务端工作组发布了 2021 年的工作总结: + +- Swift Concurrency:社区的各个 HTTP 框架的客户端现在都已经添加了 async/await 接口 +- 工具链: + - 发布了 RPM/Deb 包 + - 发布了 Swift for VSCode 插件 + - 发布了 Setup Swift 的 GitHub Action + - 加强了对于 ARM Linux 的支持 +- 文档:工作组为旗下的项目补充了大量的文档 +- 生态: + - [SwiftMetrics](http://github.com/apple/swift-metrics),[gRPC Swift](https://github.com/grpc/grpc-swift) 项目完成了孵化 + - [SwiftStatsdClient](https://github.com/apple/swift-statsd-client),[SwiftPrometheus](https://github.com/MrLotU/SwiftPrometheus),[MongoSwift](https://github.com/mongodb/mongo-swift-driver),[Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle),[Soto for AWS](https://github.com/soto-project/soto) 陆续进入孵化阶段 + +以及 2022 年的目标: + +- 继续扩大生态圈 +- 继续加强 Concurrency 的支持 +- 拓展工具链 +- 缩短编译构建时间 +- 提升 Swift 服务端的使用率 + +##  Developer - 设计开发加速器 + +### [电商购物类 App 专场:为你的电商购物 App 提升体验](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 10 日至 11 日(报名截止 5 月 09 日) + +此活动将全面讲述 Apple 的相关最新技术在电商和购物领域不同使用场景中的最佳实施性,以及推荐的设计理念等,同时,也希望和行业从业者一起探讨目前遇到的问题、机遇和挑战。 + +### [案例学习:为 iPad 设计卓越的 App](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 12 日(报名截止 5 月 11 日) + +通过理论讲座与案例分析,学习如何充分利用 iPad 的大屏幕提供更高效的导航机制和更有效的设计模式,如何利用 iPad 多样的输入能力提供更加丰富的交互方式,以及如何面向全新的超大尺寸小组件进行设计。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### 🐢 [iOS StoreKit 2 新特性解析](https://mp.weixin.qq.com/s/RrkK5M3qYTs2cMi7sWTqrA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):StoreKit 2 距离发布已经快一年了,本文对整体的 Client/Server API 使用、抉择升级与否等问题,做出了完整的介绍与阐述。适合有内购开发需求的同学阅读。 + +### 🐕 [Mutex vs Semaphore: What’s the Difference?](https://www.guru99.com/mutex-vs-semaphore.html) + +[@Damien](https://github.com/ZengyiMa):在多线程我们常用互斥锁和信号量来保证线程安全,在本文中会基于: + +* 什么是互斥锁? +* 信号量的使用 +* 互斥锁的使用 +* 信号量与互斥锁之间的区别 +* 关于互斥锁和信号量的常见误解 +* 信号量的优点 +* 互斥锁的优点 +* 信号量的缺点 +* 互斥锁的缺点 + +几个角度来带读者深入理解互斥锁和信号量。对于 iOS 开发者来说,值得一读。 + +### 🐕 [淘宝小程序体验优化:数据分析和优化实践](https://mp.weixin.qq.com/s/eIeOncrNd_h8-7E8fg4bKg) + +[@Barney](https://github.com/BarneyZhaoooo): 本文介绍了淘宝小程序的体验优化,重点介绍了指标的定义和数据实践的探索,并且取得了不错的业务效果。 + +- 写在前面:如何定义好的体验 +- 数据采集 +- 数据分析和优化实践 +- 工具和平台 +- 数据效果 + +### 🐕 [Flutter PlatformView 优化](https://mp.weixin.qq.com/s/gJXk56yJ5oJREHCUbsdhXg) + +[@邦Ben](https://github.com/linwenbang): UC 的 U4 内核团队针对 Flutter 上的 PlatformView 做了深入的研究,并且做了一下优化 PR(部分合入到官方中),主要是针对 Android 的场景,目前官方提供的 Virtual displays 和 Hybrid composition 都存在一些问题,Virtual displays 存在功能性问题,Hybrid composition 存在因为线程合并带来的性能问题,以及死锁风险,且在 Android Q 以下因为内存拷贝导致性能变差。在之前的 Hummer 引擎中实现了挖洞模式,并且通过移植 Roger 大神在 U4 浏览器内核中实现的 Embed Surface 方案,来进一步优化。并且 Embed Surface 方案被合入到主线,后续会逐渐弃用 Hybrid composition。因此可以期待最新的 release 版本。 + +最终得到的结论: + +- 「挖洞模式」的性能仍然是最好的。在挖洞模式能满足的场景下,请考虑优先使用挖洞; +- Embed Surface 除了仅支持 Android 6.0 及以上外,没有明显短板,其帧率在大多数场景下可以与挖洞模式持平; +- 从测试数据看,不合并线程的 HybridComposition 的帧率波动比较大,并不比 Embed Surface 有优势。另外,因为不能完全避免 Android Q 以下的内存拷贝,同时还需要处理部分场景下的同步问题,所以我们不会继续优化该方案。 + +参考: +[Hummer 引擎优化系列](https://mp.weixin.qq.com/s?__biz=MzUzMjk2ODM1MA==&mid=2247484736&idx=1&sn=c080c85e8eab7152eccc599170613770&chksm=faaa63b1cdddeaa782aee05d96d733623cb4d52f26670b41ab2e9dbf63301aee4995c070fe00&scene=178&cur_album_id=2315269790401298433#rd) + + +### 🐎 [AVPlayer 播放器对远端缺失 Content-Range 功能的本地支持和处理](https://bbs.noahark.io/t/topic/312) + +[@JonyFang](https://github.com/JonyFang): 通常来说 H264/HEVC 编码可以通过 AVPlayer 直接播放,但是相对弱些的后台路由,在定位文件的时候并不支持 Content-Range 和系列相关报头,则会导致无法播放。本篇主要针对这类 case,通过 WebServer 的方式来解决该类问题。 + +### 🐕 [Binary targets in modern Swift packages](https://www.polpiella.dev/binary-targets-in-modern-swift-packages) + +[@AidenRao](https://weibo.com/AidenRao):本文总结了 2022 年在 Swift 包中使用二进制文件的最佳实践: + +- 如果你需要为 iOS/macOS 项目添加预编译库或可执行文件,你应该使用 XCFramework, 并为 iOS 设备、macOS 设备和 iOS 模拟器包含单独的二进制文件。 + +- 如果你需要创建一个插件并运行一个可执行文件,你应该将其嵌入为一个 Artifact Bundles,其中包含适用于不同支持架构的二进制文件。 + +### 🐢 [Flutter 新一代图形渲染器 Impeller](https://mp.weixin.qq.com/s/PLvlSt3tlX6AjufDm0XVMA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter在2022年的Roadmap中提出需要重新考虑着色器的使用方式,计划重写图像渲染后端。最近该渲染后端 Impeller(叶轮)初见端倪,[本文](https://mp.weixin.qq.com/s/PLvlSt3tlX6AjufDm0XVMA)就从 Flutter 图形渲染优化历史讲起,一步步带你了解 Flutter 下图形渲染的优化,以及最新开发中的 Impeller ,详细带你了解 Impeller 的方方面面 + +### 🐢[Locking in WebKit](https://webkit.org/blog/6161/locking-in-webkit/) + +[@水水](https://www.xuyanlan.com/):WebKit 团队在 2015 年 8 月用新的 WTF::Lock(WWeb Template Framework)替换了WebKit中所有的自旋锁和操作系统提供的互斥锁,统一了 Lock 的实现,与操作系统提供的锁(如pthread_mutex)相比,WTF::Lock 小64倍、快180倍。与操作系统提供的 pthread_cond 等条件变量相比,WTF::condition 要小64倍。本文首先介绍了一些关于锁的背景知识,重点介绍了如何构建 WTF::Lock 和 WTF::Condition。 + +### 🐎 [macOS 进化史](https://mp.weixin.qq.com/s/7ozZfNQTNK_Ibpfv1Wo7-g) + +[@红纸](https://github.com/nianran):作为 iOS 的开发人员,我们每天都在使用着 macOS,你对这个系统的历史了解有多少呢?本文将带你了解 macOS 的发展历史,从早期系统不成熟的 Mac OS Classic 到融合优秀特性 NeXTSTEP 后成为 MacOSX。了解 Darwin、XNU、Mach、BSD 的基础概念以及其之间联系、Darwin 的开源之路。 + +### 🐕 [Use Dependency Injection to Unit Test a ViewModel in Swift](https://swdevnotes.com/swift/2022/use-dependency-injection-to-unit-test-a-viewmodel-in-swift/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):依赖注入是一种将一个或多个依赖对象传递给另一个对象的技术。本文将基于 Weather App 在初始化时将天气服务传递给天气 ViewModel。这将允许使用模拟天气服务在单元测试中测试 ViewModel,而无需访问 OpenWeather 或任何网络调用。依赖注入使类或结构独立于它所依赖的对象的创建,有助于创建松散耦合的应用程序。 + +## 代码 + +### [GRDBQuery](https://github.com/groue/GRDBQuery) + +[@anotheren](https://github.com/anotheren):GRDBQuery 是一个为 [GRDB.swift](https://github.com/groue/GRDB.swift)(一个 Swift 版本的 SQLite 工具库)准备的扩展,提供了 `@Query` 的 property wrapper,简化了数据同步。 +它类似于 SwiftUI 中为 CoreData 提供的 `@FetchRequest`。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#202-2022.05.16.md b/Reports/2022/#202-2022.05.16.md new file mode 100644 index 000000000..625ca6d6b --- /dev/null +++ b/Reports/2022/#202-2022.05.16.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #202 | 2022-05-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐢 [Flutter 3.0 发布](https://mp.weixin.qq.com/s/7glBeUReiNytWqsNLhi7sA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 前两天的 Google I/O 上 Flutter 3.0 已经发布,主要包括 Flutter 对 macOS 和 Linux 正式版支持、进一步的性能改进、手机端和 Web 端相关的更新等等。此外还有关于减少对旧版本 Windows 的支持,以及一些 breaking changes 列表。国内外的相关技术咨询上有诸多讲解,这里小编就简单为大家汇总一下,方便同学们阅读学习: + +- [中文版讲解](https://mp.weixin.qq.com/s/7glBeUReiNytWqsNLhi7sA) +- [英文原版](https://medium.com/flutter/whats-new-in-flutter-3-8c74a5bc32d0) +- [Dart 2.17 新特性](https://medium.com/dartlang/dart-2-17-b216bfc80c5d) + +##  Developer - 设计开发加速器 + +### [通过服务器处理 App 内购买和提供用户支持](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 17 日(报名截止 5 月 16 日) + +了解如何使用 App Store 服务器 API 和 App Store 服务器通知处理 App 内购买,为您的客户提供支持和退款处理。报名预计开放时间:5月12日 + +### [音频类 App 专场:为你的音频类 App 提升体验](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 25 日至 26 日(报名截止 5 月 24 日) + +欢迎参加为期两天的音频类 App 专场活动!通过本次活动,您将全方位了解 Apple 的相关技术针对在“音频”领域不同使用场景如音乐、K 歌、有声书以及播客类场景中的最佳实施性等,包括物理音频空间化引擎工作原理和使用,音频识别和分类的智能构建等,以及如何利用 watchOS 打造更好的音频类 watchOS App 等等。期待您的加入和我们一起探索音频领域的空间! + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### 🐕 [西瓜视频 iOS Voice Over 无障碍适配实践](https://mp.weixin.qq.com/s/cVEPN28XOBs6XNy0PDGudg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):无障碍的适配既是工信部的要求,也是企业社会责任感的体现。本文介绍了苹果原生无障碍相关的 API 使用以及业务渗透较高场景的适配实践。如有相关适配需求可以借鉴对应场景中的交互方式。文章内容集中于解决如下问题: +- 焦点相关问题:信息缺失/冗余/错误、顺序错乱、停留不当 等 +- 浮窗问题 / 焦点被覆盖时仍可访问 +- 嵌套容器 ScrollView 无法跟随滚动 + +### 🐕 [MachO 文件编译链接常见的三大认知误区](https://mp.weixin.qq.com/s/XpMcSzEayM-cBT4-jRr9kA) + +[@AidenRao](https://weibo.com/AidenRao):[《iOS15动态链接fixup chain原理详解》](https://mp.weixin.qq.com/s?__biz=Mzg2NTYyMjYxNg==&mid=2247486514&idx=1&sn=2fb1b443dafebd7bffd47cd53d170d8e&scene=21#wechat_redirect) 对 iOS15+ 动态链接过程性能优化的深度解析,引发了字节跳动 APM 团队对 MachO 文件的编译链接过程探索的兴趣。在学习的过程中,初学者常常会因为对该领域的不熟悉而陷入误区。本文整理了初学者比较容易犯的三大认知误区,避免大家重蹈覆辙。 + +### 🐢 [Swift 首次调试断点慢的问题解法](https://mp.weixin.qq.com/s/n6cRVhr5Sw1CSOqAYWiBRw) + +[@享耳先森](https://github.com/iblacksun):在 Swift 项目开发过程中,相信大家最近两年都深受「首次断点调试启动慢」问题困扰,根据项目大小和结构不同,首次调试时间从十几秒到几分钟不等,最近中文社区对此问题进行深入研究。 + +优酷团队发文 [Swift 首次调试断点慢的问题解法](https://mp.weixin.qq.com/s/n6cRVhr5Sw1CSOqAYWiBRw) 通过以下命令优化 LLVM 配置: +``` +settings set target.memory-module-load-level minimal +settings set symbols.use-swift-clangimporter false +``` +字节团队发文 [Swift 调试性能的优化方案](https://mp.weixin.qq.com/s/TXrY1bbSdYCkaeE8aq2NKg) 通过自定义 LLDB 及配置更细致的解决调试断点慢问题,实测效果更加明显。 + +>需要说明的是,以上方案与主工程项目结构有关,依赖的二进制库越多,效果越明显。 + +### 🐕 [Detecting Xcode Previews](https://www.createwithswift.com/detecting-xcode-previews/) + +[@Damien](https://github.com/ZengyiMa):在 SwiftUI 中想区分当前运行环境是在 Preview 中还是虚拟机中吗?来看看这篇文章吧,作者提供了从 ProcessInfo 中通过 XCODE_RUNNING_FOR_PREVIEWS 获取当前的运行环境的信息的思路,从而可以让我们识别运行环境是在 Preview 还是虚拟机。 + +### 🐕 [Jenga - 基于 Swift ResultBuilder 优雅的构建 UITableView](https://github.com/fanglinwei/Jenga) + +[@老峰](https://github.com/gesantung):Jenga 是一个基于 ResultBuilder 封装的类 SwiftUI 使用声明式语法构建 UITableView 开源库,提供了 State 和 Binding 特性,代码简洁,可读性强,感兴趣的同学不妨一试。 + +### 🐕 [Flutter 状态管理框架 Provider 和 Get 分析](https://mp.weixin.qq.com/s/iLSjr-HE4VC1kTdjI2bFNQ) + +[@极速男孩](https://github.com/ztlyyznf001):Flutter 作为一个声明式的 UI 框架状态管理是一个让人头疼的问题,没有状态管理会导致难以复用/单元测试,跨页面无法传递数据,setState 方法会过度刷新的问题。本文主要介绍了 Get 与 Provider 的状态管理的原理,并且如何利用他们去实现 MVP 模式,并且对比了两者的优缺点。 + +### 🐢 [Flutter 深入探索混合开发的技术演进](https://mp.weixin.qq.com/s/JjlCyCOC4gL7hx3UNs7ONQ) + +[@邦Ben](https://weibo.com/linwenbang): 本文梳理了 Flutter 中 PlatformView 的演进过程,也就是从直接通过 channel 打开一个 WebviewController 到 Virtual Displays 到 Flutter Hybrid Composition 的过程,文中通过各种例子说明原理以及也指明了优缺点,在使用 Flutter 的同学建议一看。同时上周推荐的 UC 团队做的进一步优化进行是下一步演进方向,也可以一并看看。 + +参考链接: +[U4 内核技术 - Flutter PlatformView 优化](https://mp.weixin.qq.com/s/gJXk56yJ5oJREHCUbsdhXg) + +### 🐕 [深入理解 OC/C++ 闭包](https://mp.weixin.qq.com/s/NEvtm_yBMghyP_WTUATy8g) + +[@xuyafei](https://github.com/xiaofei86):ObjC 编译器允许用户在同一个源文件里自由地混合使用 C++ 和 ObjC,相对于其它语言与 C++ 的文件隔离和架桥通信(Kotlin 使用 JNI,Dart 使用 FFI),Objective-C++ 的同文件混编方式无疑是令人舒畅的。虽然 Objective-C++ 没有为 ObjC 和 C++ 类增加功能,类的体系结构也互相独立,类之间不能互相继承,但有时二者也会相互把自己的魔杖伸向对方领域,从而会引发一些比较费解的问题。本文就从两种语言闭包混合捕获的原理出发,了解其混编方式背后机制的冰山一角,也帮助大家写出更好的 ObjC/C++ 混编代码。 + + +## 代码 + +### [老司机技术沙龙](https://github.com/SwiftOldDriver/Salon) + +不知不觉,已经联合举办了 6 场开发者活动了。我们对过去几场活动重新做了一次梳理,把所有可公开的资料都上传到了这里,后续的活动也会同步更新到这里。需要的朋友移步自取哈 + +![image](https://user-images.githubusercontent.com/11873526/168479876-db1097d6-d1f1-4320-9de6-86c3d4786fdc.png) + +## 摸鱼周报 + +[@摸鱼周报 #53](https://mp.weixin.qq.com/s/5chb-a9u7VMdLis1FG6B6Q):第 53 期摸鱼周报来了,一起来看下本期概要: + +* 话题:远程工作正在成为趋势 +* 面试模块:CRC 实践应用:理论推导 +* 优秀博客:App Extension +* 学习资料:一个大学生的学习计划 +* 开发工具:适用于 `macOS` 的现代媒体播放器,`IINA` 由开源媒体播放器 `mpv` 提供支持,几乎可以播放您拥有的所有媒体文件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#203-2022.05.23.md b/Reports/2022/#203-2022.05.23.md new file mode 100644 index 000000000..e94253a06 --- /dev/null +++ b/Reports/2022/#203-2022.05.23.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #203 | 2022-05-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [《WWDC22 内参》作者招募 &《WWDC21 内参》免费领取](https://mp.weixin.qq.com/s/W-15I-lTAPKzI6USw3nuuQ) + +《WWDC22 内参》作者招募工作正式开始,请感兴趣的朋友点击上方链接参与报名,报名截止时间为 5 月 30 号。 + +去年我们第一次公开招募了一些新的同学参与进来,同时也引入了审核机制,最终交付了一份还算满意的答卷。103 篇文章、2810 份订阅、几十万的阅读量,这些数据都要比往年要好,非常感谢大家对老司机技术的支持和信任。**《WWDC21 内参》也已经可以免费领取,在老司机技术周报公众号中回复「2022」即可获取链接。** + +##  Developer - 设计开发加速器 + +### [设计高效的 UI 测试](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 31 日(报名截止 5 月 16 日) + +了解如何设计测试,来帮助你发现和诊断最棘手的漏洞。我们将解释如何使用 XCTest 改进您的自动化测试,以找到代码中的隐忧,以及如何准备测试以应对失败。从而更轻松地对问题进行分类,以便您可以快速解决问题,并修复错误。理解中断,学习如何预测 App 的潜在中断、创建智能测试以识别它们。通过使用 UI 中断处理,构建更好的测试,管理预期的警报。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### [Dutter | 钉钉 Flutter 跨四端方案设计与技术实践](https://mp.weixin.qq.com/s/JyfwrfsWplHhkColYLhBpg?from=singlemessage&isappinstalled=0&scene=1&clicktime=1652443237&enterid=1652443237) + +[@老峰](https://github.com/gesantung):Dutter 即 DingTalk Flutter,是钉钉内基于 Flutter 构建的跨四端研发框架,本文主要包含以下内容: +- 整体架构: Dutter Runtime、Dutter Dev Kit、Dutter OPS Kit; +- 数据通信包括:Channel、Dutter FFI; +- 消息总线; +- 模块化; +- 容器化; +- 组件库:dingui_flutter 、dingtalk_uikit; +- 最佳实践以及部分 FlutterEngine 层面的问题定位等。 + +### 🐕 [Scripting in Swift: Git Hooks](https://www.polpiella.dev/scripting-in-swift-git-hooks) + +[@享耳先森](https://github.com/iblacksun):Swift 除了用于 App 还可以干什么?本文作者使用 Git Hooks 结合 Swift `Command Line Tool` 解决真实工作场景中遇到的问题,如果你也有类似需求又不熟悉其他脚本语言,Swift 是很好的解决方案。 + +### 🐕 [京东 App MCube 动态化实践](https://mp.weixin.qq.com/s/kjYRo2OcmWCoUBTdsAKrCw) + +[xuyafei](https://github.com/xiaofei86):在京东 App 业务高速发展的过程中,为了使更快的需求响应速度与研发人力和稳定性需求之间达到平衡,京东自研了一套原生的“动态化+跨端”框架 MCube。本文对其方案进行了简单介绍,其通过三方库 Yoga 作为其布局引擎;通过 XML 作为 DSL 描述原生控件;通过协议层对接各个可插拔组件。另外还有其容器分层架构的设计、配套管理平台和开发套件等介绍,感兴趣的同学可以阅读原文了解。 + +## 代码 + +### [Euclid: a Swift library for creating and manipulating 3D geometry](https://github.com/nicklockwood/Euclid#example) + +[@莲叔](https://aaaron7.github.io):这是一个能让你非常方便创建和操作各种基础3D模型的代码库,并且可以非常方便的和 SceneKit 相关的场景进行整合。传统的方法中,要创建三维模型然后添加贴图,往往都需要编写上百行 OpenGLES 的代码才能实现,而通过 Euclid,创建模型就如同创建一个普通的 View 那样简单,感兴趣的朋友可以看一下作者开发的一个 macOS App:[ShapeScript](https://apps.apple.com/app/id1441135869), 可以通过文本描述的方法创建三维模型,可以说这个开源的组件就是这个 App 的SDK版。应该有非常多有趣的功能可以实现。 + +### [Runestone](https://github.com/simonbs/Runestone) + +Runestone 是一个高效易用的代码编辑器库,最大的亮点是: + +- 使用原生技术实现,不需要依赖于 WebView +- 使用 TreeSitter 作为 Parser 后端,可以高效地进行增量解析,兼容大部分主流编程语言 +- 借鉴了 AvalonEdit 的 Line Management + +## 摸鱼周报 + +[@摸鱼周报 #53](https://mp.weixin.qq.com/s/5chb-a9u7VMdLis1FG6B6Q):第 53 期摸鱼周报来了,一起来看下本期概要: + +* 话题:远程工作正在成为趋势 +* 面试模块:CRC 实践应用:理论推导 +* 优秀博客:App Extension +* 学习资料:一个大学生的学习计划 +* 开发工具:适用于 `macOS` 的现代媒体播放器,`IINA` 由开源媒体播放器 `mpv` 提供支持,几乎可以播放您拥有的所有媒体文件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#204-2022.05.30.md b/Reports/2022/#204-2022.05.30.md new file mode 100644 index 000000000..d52784073 --- /dev/null +++ b/Reports/2022/#204-2022.05.30.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #204 | 2022-05-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [帐户删除审核条例将在 6 月 30 日开始生效](https://developer.apple.com/cn/news/?id=12m75xbj) + +从 2022 年 6 月 30 日开始,支持创建账户的 App 必须同时支持账户删除功能,这项要求已经加入到了审核条例([《App Store 审核指南》第 5.1.1(v)](https://developer.apple.com/cn/app-store/review/guidelines/#5.1.1v))当中,具体详见原文链接,各位开发者务必提前做好准备。 + +### [码上就位 - WWDC 开发者活动](https://developer.apple.com/cn/news/?id=qnx0slc5) + +WWDC 开发者活动陆续在官网放出,今年依旧会和往年一样有 Keynote、Sessions、Labs、Digital Lounges 等富有特色的活动,大家可以根据自己的兴趣去参加不同的活动。此外,老司机技术也和 SwiftGG、T 沙龙一起在筹备 「WWDC.playground」的线上活动,马上会开启报名,大家可以期待和关注一下。 + +## 文章 + +### 🌟 🐢 [“Stop” using state management libraries](https://medium.com/flutter-community/stop-using-state-management-libraries-48a81ed7979d) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在 Flutter 项目中状态管理是必须要解决的问题,行业内也有各种解决方案,例如: GetX, Provider, MobX, BLoc 等,但在其下更应该思考的是是否有必要?本文标题党一把,从其需求根本上讨论使用的必要性,非常推荐小白细读. + +### 🐕 [【Hummer Flutter引擎】让Flutter绽放得更美 - 包体积优化之道](https://mp.weixin.qq.com/s/OnAnOAX1K5TyHbuUjV3LEg) + +[@极速男孩](https://github.com/ztlyyznf001): Flutter 的包体积一直是个让开发者头疼的问题。 本文主要介绍了 Hummer 引擎是如何通过引擎的优化和精简,分包动态化技术和资源的优化来完成对包体积缩减。并且介绍了监控和动态化平台的落地。 + +### 🐎 [主流图片加载库所使用的预解码究竟干了什么](https://dreampiggy.com/2019/01/18/%E4%B8%BB%E6%B5%81%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E9%A2%84%E8%A7%A3%E7%A0%81%E7%A9%B6%E7%AB%9F%E5%B9%B2%E4%BA%86%E4%BB%80%E4%B9%88/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Image/IO 的惰性解码流程,以及Force Decode这套流程它所解决的问题,以及优缺点。其中,着重介绍了 WebP 这一新兴的图片压缩格式以及它的优缺点。 + +## 代码 + +### 🐕 [YYJSON 0.5.0 Released](https://github.com/ibireme/yyjson/releases/tag/0.5.0) + +[@享耳先森](https://github.com/iblacksun) YYJSON 是用 C 写的 JSON 解析库,以性能著称,近日发布了 0.5.0 版,有许多新特性与改进。 + +### [unxip: A fast Xcode unarchiver](https://github.com/saagarjha/unxip) + +解压比系统自带的 xip 快 2-3 倍的一款工具,通过合理的流程设计让任务尽量并行化,内部使用 Swift Concurrency 驱动。 + +代码逻辑十分精简,只有 500+ 行,并且作者在 README 里有详细的设计说明,对 Concurrency 的使用也很有参考价值,非常值得仔细品味。 + +## 工具 + +### [Fig CLI](https://fig.io) + +[@Jimq](https:://github.com/waz0820):为你的终端添加类似 IDE 的自动补全功能,特色说明: + +- 将语法着色,语法提示,自动填充,自带注释,历史记忆这些基本功能有机融合在一起,产生一种奇妙的终端操作体验。 +- 不需要新的终端 App,只为你现有的终端或者 shell 作扩展,eg. 系统 terminal,iTerm, VSCode 内置的 terminal,bash,zsh,fish。 +- 支持 300 多种 CLI 工具,eg. cd, git, docker, npm, yarn, brew, kubectl, aws,可以做到 3 分钟为自己的 CLI 工具或者脚本添加自动补全功能。 +- 全键盘操作,快捷键方便高效。 +- 保护隐私,不跟踪敏感数据。 +- 内核 “Completion specs” 开源。 +- 正在打磨中的 Big Thing,将支持使用 fig.js API 构建自己的应用,打造终端应用生态系统。 + +## 摸鱼周报 + +[@摸鱼周报 #55](https://mp.weixin.qq.com/s/zDhnOwOiLGJ_Nwxy5NBePw):第 55 期摸鱼周报来了,一起来看下本期概要: + +* 话题:WWDC22 码上就位,介绍今年 WWDC 的流程 +* 面试模块:iOS WebView 中的 User-Agent +* 优秀博客:Swift 中修饰声明和类型的两种特性 +* 学习资料:TypeScript 入门教程 +* 开发工具:一款适用于 mac 的简洁日历软件 itsycal + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#205-2022.06.20.md b/Reports/2022/#205-2022.06.20.md new file mode 100644 index 000000000..4c00b54f5 --- /dev/null +++ b/Reports/2022/#205-2022.06.20.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #205 | 2022-06-20 + +> hello,大家好,失踪了两期,老司机技术周报又回来了。我们没有跑路,只是最近两周都在忙 WWDC 的活动,实在没有精力抽出时间来整理周报 Orz... +> +> 第一个活动是 wwdc.playground,我们和 SwiftGG、T 沙龙一起举办了一次线上技术沙龙活动,没有赶上的可以先去「老司机技术」视频号看直播回放,稍后会写个总结文给到大家。这次活动一共累计全网有几万开发者关注,非常感谢大家的支持。 +> +> 另外一个就是[《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22)了,为了能超越往年的质量,今年我们组建了一个 30 人的审核团队[严控质量](https://xiaozhuanlan.com/topic/5639708142),加上 wwdc.playground 前期事情特别多,所以总体进度比去年满了一些,希望大家可以理解一下 ~ 目前订阅价是 29.9(低于五折),欢迎大家前往订阅~ 后续会持续开始更新,预计会有 80 - 100 篇左右的文章。 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 《WWDC22 内参》 + +### 🌟 [【WWDC22 10127/10131】使用 RoomPlan 扫描创建参数化三维室内场景](https://xiaozhuanlan.com/topic/8127504396) + +本文将主要聚焦于 Apple 的 AR/MR 新 API:RoomPlan 。全文共分为 3 个部分: + +第一部分是 Apple 的 AR/MR 技术发展回顾,包括 RoomPlan 和 Object Capture 技术背后的原理简介。 + +第二部分是对 RoomPlan 技术的介绍,包括如何使用官方 API ,快速在您的 App 中使用 RoomPlan,以及如何通过数据 API 自定义 RoomPlan 的使用。 + +最后一部分是关于 AR/MR 应用设计实践的相关建议。 + +### 🌟 [【WWDC22 10025】VisionKit 的机器视觉方案,更智能的捕获文本与条码](https://xiaozhuanlan.com/topic/8205316479) + +本文将与大家一同认识 VisionKit 中的 `DataScannerViewController`。通过简单的 Swift API 来实时的捕获视频源中的文本、条码。将展示如何控制程序捕获的内容,以及如何启用用户指导、突出显示等。 + +##  Developer - 设计开发加速器 + +### [WWDC22 讲座集锦](https://developer.apple.com/cn/accelerator/) + +2022 年 6 月 28 日至 29 日(报名截止 6 月 27 日) + +「 Developer - 设计开发加速器」精选了 WWDC22 公布的最新技术,邀请 Apple 设计和技术布道师为中国开发者带来中文讲座集锦。通过本次活动您可以了解最新技术趋势、学习平台的最新功能,从而打造更为卓越的 App 体验。 + +**从本次活动开始,除特殊活动单独说明以外,加速器活动会开放给所有Apple Developer Program 成员(包含免费的用户)。** + +![](https://user-images.githubusercontent.com/11873526/174491806-a2ca1010-dd77-4b19-9bcd-4ab690f736d8.jpeg) + +## 文章 + +### 🐎 [聊聊 libffi 的调用流程](https://www.jianshu.com/p/4644b1584a1f) + +[@xuyafei](https://github.com/xiaofei86) FFI (Foreign Function Interface) 是用来与其它语言交互的接口,是实现跨语言调用的主要方式之一。其通过直接将其它语言的接口内嵌实现更高的执行效率,而通过进程间通信 (IPC) 或网络通信 (RPC, RESTful 等) 则至少需要两个独立进程才能实现。 + +libffi 是 ffi 的主流实现方式,主要使用 C 和汇编实现,最常用作编译语言和解释语言实现之间的桥接技术。本文从 libffi 的调用流程出发,带大家了解 ffi_call 和 ffi_closure 是怎样帮助我们实现动态调用的。 + +### [从响应式编程到 Combine 实践](https://mp.weixin.qq.com/s/b_q6R64xkq8Rl9EiIde4MA) + +[@zvving](https://github.com/zvving):响应式编程由来已久,苹果钦定的 Combine 正是 Reactive Streams 规范的一种实现。伴随着官方 SwiftUI 的推广,声明式布局+响应式编程也因其简洁、直观、易测、易重用的优势渐渐流行。本文正是字节跳动音乐团队在大项目中落地响应式编程的选型思考和最佳实践,非常值得参考。 + +### 🐕 [Swift 中的幻象类型(phantom types)](https://mp.weixin.qq.com/s/HLWu24LrfqSfbhd9x6Q_ag) + +[@享耳先森](https://github.com/iblacksun):`Phantom Types` 是一种编码技巧,让你可以利用 Swift 的强类型特性写出更安全的代码,本文介绍了一些可使用 Phantom Types 的场景及使用技巧。 + +建议结合下面文章一起阅读: +[Phantom Types in Swift](https://zhuanlan.zhihu.com/p/35696032) +[Swift tricks-Phantom Types](https://www.jianshu.com/p/72cd63cf9393) + +> 推荐人:@Swift社区,本文翻译自 [swiftbysundell.com](https://www.swiftbysundell.com/articles/phantom-types-in-swift/) + + +### 🐕 [探秘 AutoreleasePool 实现原理](https://mp.weixin.qq.com/s/fcS6aiddSjeQSfjMY-8Oow) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):无论是 MRC 还是 ARC 时代,autorelease 最大的作用,是在大量创建对象的同时,通过修饰让内存得到提前释放,从而降低内存峰值。本文就旨在通过分析源码了解内部是如何实现的。 + +### 🐢 [节日献礼:Flutter图片库重磅开源](https://mp.weixin.qq.com/s/WnpDbDvEVNMj_96ulnuWkQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 去年,闲鱼技术团队新一代图片库 PowerImage 在经过一系列灰度、问题修复、代码调优后,已全量稳定应用于闲鱼。相对于上一代 IFImage,PowerImage 经过进一步的演进,适应了更多的业务场景与最新的 flutter 特性,解决了一系列痛点. + +### 🐕 [Auto-generating, Auto-hosting, and Auto-updating DocC Documentation](https://blog.swiftpackageindex.com/posts/auto-generating-auto-hosting-and-auto-updating-docc-documentation/) + +[@四娘](https://kemchenj.github.io/):WWDC 21 推出了 docc 之后,逐渐成为社区主流的文档生成器,但接入时比较麻烦的是需要添加 docc 作为依赖,并且需要通过 GitHub Page 或者 Web 服务器进行部署。 + +Swift Package Index 为此提供了一个新功能,可以自动部署和更新你的 docc 文档,只需要在仓库内添加一个声明文件即可。 + +社区热门的 Kingfisher 也已经[采用了这种方式部署文档](https://swiftpackageindex.com/onevcat/Kingfisher/master/documentation/kingfisher),[接入的 PR](https://github.com/onevcat/Kingfisher/pull/1948) 大家也可以拿来参考。 + +### 🐢 [ViewBuilder 研究](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg) + +[@AidenRao](https://weibo.com/AidenRao):作者通过上下两篇博文,对构建 SwiftUI 视图的 ViewBuilder 进行探讨。 + +[上篇](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg)将介绍 ViewBuilder 背后的实现者 —— result builders + +[下篇](https://mp.weixin.qq.com/s/E6VKDbgKerFf0P20N1DsuA)将通过对 ViewBuilder 的仿制,进一步地探寻 SwiftUI 视图的秘密。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术】,回复「2022」,领取 WWDC21 及以前的内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#206-2022.06.27.md b/Reports/2022/#206-2022.06.27.md new file mode 100644 index 000000000..286e9256e --- /dev/null +++ b/Reports/2022/#206-2022.06.27.md @@ -0,0 +1,213 @@ +# 老司机 iOS 周报 #206 | 2022-06-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 13 篇,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10092】遇见 Passkey](https://xiaozhuanlan.com/topic/8042173596) + +苹果一向以对用户隐私的严格重视和出色的隐私保护能力而广受赞誉。passkey 是苹果在用户隐私保护与信息安全方面提出的一个完整的解决方案。本文将带你一起来了解这一方案是什么、为什么和怎么用。 + +### 🌟 [【WWDC22 110357/110358】Swift Regex: 蓄谋已久的正则优化](https://xiaozhuanlan.com/topic/0563284917) + +Chris 画了有五年的大饼 Swift Regex 终于要落地啦!一种号称要超越 Perl 的字符串处理方式,一种兼顾简洁和直观的正则表达式构建方法,一种使正确处理 Unicode 编码轻而易举的抽象模型。Swift Regex 的步伐虽然缓慢,凡坚信不疑的,主必赐福于他。(官方原文:So we go out and evangelize our clearly superior approach to anyone who will listen. Adoption is slow but promising.) + +### 🌟 [【WWDC22 10054】SwiftUI 新导航方案](https://xiaozhuanlan.com/topic/7841259603) + +导航是所有 App 不可或缺的功能。SwiftUI 在发布时就为我们带来 NavigationView 来支持简单的导航场景,但存在许多不足。幸运的是 WWDC22 为我们带来 NavigationStack 和 NavigationSplitView 来解决各种痛点。 +本文通过一个真实的例子《唐诗三百首》详细讲述新的方案的适用场景及使用建议,帮助读者熟悉和迁移到新的导航方案。 + +## 新手推荐 + +### 🐕 [How to Start iOS Development Career](https://holyswift.app/how-to-start-ios-development-career-the-5-steps-plan) + +[@老峰](https://github.com/Gesantung):作者通过系列文章罗列了 iOS 开发上手主要知识点,主要包含如下内容: + +- Swift 语言:学习资源以及学习方法 +- 构建 UI 界面:Using Interface Builder&Build programmatically;UIKit&SwiftUI +- iOS 基础概念:数据存储、网络请求、多线程、内存管理 +- 测试:单元测试、集成测试、快照测试、应用程序流测试 +- 架构&工具:未完 + +### 🐎 [逐步实现基于源码的 Swift 代码覆盖率](https://mp.weixin.qq.com/s/cz5hk23XtjCWGi-rb3-cCg) + +在这篇短文中,作者将向你介绍其研究 Swift 代码覆盖率检测方案时找到的最佳实践,包括: + +* 如何生成 \*.profraw 文件并通过命令行测量代码覆盖率 +* 如何在 Swift App 项目里调用 C/C++ 方法 +* 如何在 Xcode 中测量完整 Swift App 项目的代码覆盖率 + +## 文章 + +### 🌟 🐕 [基于 Bazel 的 iOS Monorepo 工程实践](https://mp.weixin.qq.com/s/WHmYD2X8JGfIQTMmsDG5oA) + +[@JonyFang](https://github.com/JonyFang): 一篇实用的技术分享,主要介绍了 BILIBILI 基于 Bazel 的 iOS Monorepo 工程实践,内容结构如下: + +1. 介绍 BILIBILI 客户端工程开发模式演进的背景; +2. 解答什么是 Monorepo?有哪些成熟的 Monorepo 工具? +3. 介绍选型 Bazel 原因,着重介绍了 Monorepo 以及 Bazel 带来的优势; + +目前 B 站客户端的 Monorepo 模式还在进化中,未来会有越来越多的编译优化的自研规则实装到我们的 iOS 项目中,目前分布式编译能力也已经提上了日程。欢迎对 Monorepo 或 Bazel 感兴趣的同学和我们一起进行技术讨论,也欢迎加入我们的 CI/CD 团队,深度参与改造和建设 iOS 端 Monorepo 工程体系。 + +### 🐕 [西瓜视频 iOS 播放器技术重构](https://mp.weixin.qq.com/s/EX2WcoxxqRDSPk_xdxkIzA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):西瓜视频中有各种视频题材,业务逻辑大量耦合,也是业务的最核心模块。本文聚集于业务播放器的重构(并非 VideoEngine 层),通过将播放器拆分为:极简播放器、基础播放器、业务播放器 三层;将业务任务化;降低各层耦合 等手段,最后在可维护性、性能、业务等多方面都拿到了不错的收益,具体的分层方案与思想大家可以借鉴,但最后都要根据业务复杂度来选择最合适的划分。 + +### [Using the ‘some’ and ‘any’ keywords to reference generic protocols in Swift 5.7](https://www.swiftbysundell.com/articles/referencing-generic-protocols-with-some-and-any-keywords/) + +[@zvving](https://github.com/zvving):相比 ObjC,Swift 协议带来更丰富的实用场景和更严格校验的类型信息。当我们遵循苹果的建议,尝试在项目中落地面向协议编程时,在参数类型、范型关联等场景,类型信息带来大量的限制,这导致我们不得不大量应用类型擦除,能解决问题,也带来更多的理解成本。 + +Swift 5.1 引入 some 关键字(opaque return types),让基于协议的返回类型更易用。而 Swift 5.7 更进一步,让 some 更灵活的应用与函数参数及范型等场景,同时引入 any 关键字带来官方的类型擦除语义用于类型容器场景。至此,在实例类型更明确的场景使用 some 关键字,类型容器场景使用 any 关键字,Swift 在面向协议编程中真正达到简洁同时兼顾灵活。 + +### 🐎 [App Store Server API 实践总结](https://mp.weixin.qq.com/s/yP3jlEzN5o0EsaNoW-4mVw) + +[@J_Knight_](https://github.com/knightsj):本文分享了苹果开放的 App Store Server API 的接口: +- 查询用户订单的数据 +- 查询用户历史数据 +- 查询用户内购退款 +- 查询用户订阅项目状态 +- 提交防欺诈信息 + +还介绍了线上环境和沙盒环境的测试服务器地址。而因为这些接口的调用需要先通过 JWT ( JSON Web Token) 的方式授权,所以也介绍了该授权方式的具体操作,例如生成密钥和签名等等。文章的后半部分提供了这些接口的调用示例以及相关的错误码等的相关信息。 + +拓展阅读:[【WWDC22 10040】 探索 In-App Purchase 集成和迁移](https://xiaozhuanlan.com/topic/8024563197) + +### 🐕 [Announcing the Language Workgroup JUNE 15, 2022Ted KremenekTed Kremenek](https://www.swift.org/blog/language-workgroup/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):自 Swift 成为开源项目以来,Swift 社区共同完成了许多工作。现在,将启动语言工作组,它将承担监督语言和标准库的主要职责。有了一个致力于语言发展的工作组,核心团队将在项目的整体监督和方向上投入更多。核心团队成员将担任管家,协调各个工作组的工作,并制定建立一个更加活跃的开源项目和周边社区的战略。 + +### 🐕 [SwiftUI 状态管理系统指南](https://mp.weixin.qq.com/s/gJCis1z2zY0dZTLfu7T9CQ) + +[@EyreFree](https://github.com/EyreFree):SwiftUI 与 Apple 之前的 UI 框架的区别不仅仅在于如何定义视图和其他 UI 组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。SwiftUI 没有使用委托、数据源或任何其他在 UIKit 和 AppKit 等命令式框架中常见的状态管理模式,而是配备了一些属性包装器使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。这篇指南能很好地概述 SwiftUI 的各种状态处理机制,文中强调的概念涵盖了所有基于 SwiftUI 的状态处理的绝大多数用例,推荐对 SwiftUI 感兴趣的朋友阅读。 + +### 🐕 [WWDC 2022 Viewing Guide](https://useyourloaf.com/blog/wwdc-2022-viewing-guide/) + +[@Barney](https://github.com/BarneyZhaoooo) 今年的 WWDC 有 175 个 sessions 和大量的新特性要学,光是看视频就要花费大量的时间。东西太多抓不住重点?没关系,不如先按本文的分类从感兴趣的入手。 + +### 🐕 [Rendering SwiftUI views within UITableView or UICollectionView cells on iOS 16](https://www.swiftbysundell.com/articles/rendering-swiftui-views-within-uitableview-or-uicollectionview/) + +[@JimQ](https://github.com/waz0820):今年的 WWDC 终于带来了在 UITableView/UICollectionView Cells 中渲染 SwiftUI 视图的能力,但并不是可以完全混用了,仅限于 Cells(比如 UITableViewHeaderFooterView 就不能用),Cells 与 SwiftUI 之间要依赖 UIHostConfiguration 的桥接支持,使用一个新的 UIHostConfiguration 对象 wrap SwiftUI 视图并赋值给 cell.contentConfiguration。John Sundell 的这篇文章可以带领大家了解更多详情,并充分利用这一新特性。 + +### 🐕 [Google I/O Extended | Flutter 游戏和全平台正式版支持下 Flutter 的现状](https://mp.weixin.qq.com/s/3fL_nYvkatqGfBMQ_sddwQ) + +[@极速男孩](https://github.com/ztlyyznf001):今年 Google I/O 上谷歌主要展示了 Flutter 对游戏开发的支持和全平台支持的能力。谷歌通过一款 pinball 的小游戏来展示 Flutter 如何通过 Skia 渲染引擎和 Flame SDK 来提供游戏开发的能力。在 3.0 中 Flutter 提升了 macOS 和 Linux 上应用稳定性,让开发者在尽可能多的共享 UI 和逻辑的基础上,更灵活的利用底层逻辑操作系统。 + + +### 🐕 [wakeup in XNU](http://djs66256.github.io/2021/04/03/2021-04-03-wakeup-in-XNU/) + +[@水水](https://www.xuyanlan.com/):关注性能的读者可能会碰到有一种有一种被系统 kill 类型是 weakup,又因为收集到的日志不足以定位问题,本文通过另一种思路去解决这个问题。整体介绍了weakup是什么、系统如何统计的以及关键的是如何治理。 +- 为什么要统计 wakeup +- wakeup 是什么 +- wakeup 如何统计的 +- wakeup 治理 +- 监控与防劣化 + +### 🐕 [What’s new in Swift 5.7](https://www.hackingwithswift.com/articles/249/whats-new-in-swift-5-7) + +[@AidenRao](https://weibo.com/AidenRao):Swift 5.7 变化巨大,新特性中包括正则表达式, `if let` 速记语法,以及围绕 `any` 和 `some` 关键字的一致性改动,在本文中,作者会通过一些示例来介绍这些新特性。 + +中文翻译:[【WWDC22 110354】Swift 新特性介绍](https://xiaozhuanlan.com/topic/2498765013) + +### 🐕 [Flutter 高延迟渲染流水线调度](https://mp.weixin.qq.com/s/Iv7zogoFD38n-92Un-5Bgg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 长久以来以高性能著称,但你可能好奇 Flutter 上的卡顿是什么引擎的,又应该如何解决。本文由 U4 内核组带你揭秘 Flutter 体系下的渲染流程,并从中找到卡顿的原因,抽丝剥茧,进阶必看 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110379】创建一个响应速度更快的媒体应用](https://xiaozhuanlan.com/topic/4263197580) + +本 session 主要对 `AVFoundation` 中原本不是很合理的同步 API 做了异步优化,同时将 async/await 应用到了更多 API 中,让 API 更安全的同时还能保持易用。涉及到的模块包括视频截图、视频编辑、自定义资源加载。 + +### 🌟 [【WWDC22 10002】利用 Virtualization 构建虚拟机,从未如此简单](https://xiaozhuanlan.com/topic/4132786905) + +本文介绍了平台虚拟化技术的方案类型,分析了 macOS 上的虚拟化方案。通过 Virtualization.framework 和基于这个框架的命令行工具,我们一起创建可用的 macOS 虚拟机、Linux 虚拟机(GUI)、Linux(CLI),感受现代虚拟机强大的性能。利用 Virtualization 打造属于专属自己的虚拟机,从未如此简单! + +### 🌟 [【WWDC22 110341】短信过滤器原理和更新](https://xiaozhuanlan.com/topic/8021693745) + +本文将主要聚焦于 iOS 16 中 `IdentifyLookup` 框架的新特性。全文共分为 3 个部分: +- 第一部分是回顾整个短信过滤 API 的发展。 +- 第二部分是对 短信过滤的原理介绍。 +- 最后一部分是一个简单的 Demo 示例实践。 + +### 🌟 [【WWDC22 10049】探索 iOS 16 中 WKWebView 的新功能](https://xiaozhuanlan.com/topic/7295803164) + +本文主要是探索 WKWebView 在 iOS 16 中的新功能,全文主要分为 4 部分: +- 第一部分是 对 Web 内容的交互新增了 3 种方式,同时新增了 20 种 CSS 视口单位和查找交互功能。 +- 第二部分是新增了对特定 URL 其显示内容拦截的功能。 +- 第三部分是 iPadOS 中新增了加密媒体的功能。 +- 第四部分是支持在第三方浏览器中调试 App 内嵌的 Web页面。 + +### 🌟 [【WWDC22 110350】Swift 并发的可视化和优化](https://xiaozhuanlan.com/topic/0186237549) + +本文主要是讨论 Swift 并发代码的优化,并介绍了一个 Instrument 14 提供的一个可视化工具。session 的内容可以分为 3 个部分: +- 一、回顾 Swift 并发代码基础 +- 二、结合代码片段展示如何用 Instrument 来解决性能问题,包括 Main Actor 阻塞 和 Actor 竞争 +- 三、最后讨论了一些 Swift 并发的潜在问题包括线程池耗竭和续体误用 + +### 🌟 [【WWDC22 110354】Swift 新特性介绍](https://xiaozhuanlan.com/topic/2498765013) + +Swift 一直致力于让编程变得更简单,并以此为目标不断地进行迭代。本文将对 Swift 5.7 的新特性进行介绍,主要分为以下五个部分: +- 1. 社区最新动态 +- 2. Swift Package Manager 插件 +- 3. Swift 底层性能优化 +- 4. Swift 并发模型 +- 5. Swift 语言优化 + +### 🌟 [【WWDC22 10065】即插即用:将 Apple frameworks 添加到您的 Unity 游戏项目](https://xiaozhuanlan.com/topic/2583470691) + +本文将帮助开发者如何在 Unity 应用或游戏中快速集成 Apple 的一些原生功能插件,以提升作品的体验。本次 WWDC , Apple 为我们带来了六个基于 Unity 版本的插件:Apple.Core、Game Center、Game Controller、Accessibility、Core Haptics 和 PHASE。我们将分别介绍它们的功能,以及如何快速编译、导入到开发者的项目中。文末,还给出了使用这些插件的一些场景以及注意点。 + +### 🌟 [【WWDC22 110336】 Screen Time API 的新特性](https://xiaozhuanlan.com/topic/7169340528) + +本文将介绍 Screen Time API 在 iOS 16 的新特性以及基于此可以实现的功能。全文分为三个部分: +- 1. 回顾 iOS 15 中 Screen Time API 特性 +- 2. Screen Time API 在 iOS 16 的新特性介绍 +- 3. Screen Time API 新特性的实践 + +### 🌟 [【WWDC22 10115/10119】优化 CoreData & CloudKit 实现](https://xiaozhuanlan.com/topic/5821964073) + +本文将结合开发者个人项目案例,旨在通过单元测试、Instruments、日志收集三方面,覆盖开发流程的三个重要方面:探索、分析与反馈,帮助开发者优化实现方案实现,做出更好的产品。同时了解到 CloudKit 的同步流程与相关系统服务。 + +### 🌟 [【WWDC22 10040】 探索 In-App Purchase 集成和迁移](https://xiaozhuanlan.com/topic/8024563197) + +本文主要聚焦于 App Store Server API 和 App Store Server Notifications。从去年 WWDC21 苹果推出了 StoreKit v2、App Store Server API v1 和 App Store Server Notifications v2,今年 WWDC22 基于这些功能的基础上,增加了一些新的 API 和一些服务的优化。另外,针对大家对这些新特性有一些疑虑,如 JWT/JWS、兼容性、安全性、订阅通知、集成和迁移等等,苹果进行了详细的解答,还提供非常多的最佳实践的案例和优化建议。 + +## 摸鱼周报 + +[@摸鱼周报 #57](https://mp.weixin.qq.com/s/e4ZbFBPqclgy7KyfxVyQZA):第 57 期摸鱼周报来了,这期排版做了一些改动,一起来看下本期概要: + +* 本期话题:WWDC22 讲座集锦,Apple 夏令营课程回归 +* 本周学习:Xcode Playground Tips +* 内容推荐:苹果开发者大会落幕,介绍一些 WWDC22 推出的新技术和新内容 +* 摸一下鱼:Apple Logo Artwork,收录苹果独特多彩风格的媒体版本 Logo + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#207-2022.07.04.md b/Reports/2022/#207-2022.07.04.md new file mode 100644 index 000000000..35e36e29b --- /dev/null +++ b/Reports/2022/#207-2022.07.04.md @@ -0,0 +1,218 @@ +# 老司机 iOS 周报 #207 | 2022-07-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 19 篇文章,目前总共已经更新了 34 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10078】降低网络延迟:让你的 App 变得更快](https://xiaozhuanlan.com/topic/3108247569) + +如何让 App 变得更快,对于开发者来说是一个永恒的课题。2021 年,苹果给大家分享了许多网络延迟优化相关的理论知识,而今年,苹果在去年的基础上,又为我们带来了这一篇颇具实战指导意义的分享,从客户端侧、服务端侧、网络协议侧三个方面入手提供了一系列行之有效的建议,帮助开发者们更好的分析和改善应用的网络延迟状况,从而让你的 App 变得更快。 + +### 🌟 [【WWDC22 110427】What's new in Xcode](https://xiaozhuanlan.com/topic/9706284531) + +本文主要从 Xcode 14 功能上的更新以及体积性能的改进入手,通过简单 Demo 的演示,分享此次 Xcode 令人振奋的一些更新。本文将主要聚焦 Xcode 本身的性能优化提升、开发者效率提升以及其他新增功能这几个角度,通过对这些更新的了解,相信会对大家的日常工作开发有很大的帮助。 + +### 🌟 [【WWDC22 110362】快速链接:提高构建和启动耗时](https://xiaozhuanlan.com/topic/1509638472) + +本 session 是由苹果链接器团队的首席工程师 Nick Kledzik 带来的关于如何实现快速链接的分享。主要介绍了苹果近期在静态链接和动态链接方面的一系列优化,同时帮助大家理解链接过程中的底层细节,让大家可以提升自己 App 的静态和动态链接性能。 + +### 🌟 [【WWDC22 110355】Meet Swift Async Algorithms](https://xiaozhuanlan.com/topic/8217965043) + +本文通过阅读源码的方式,来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为三部分: +- 第一部分介绍对于多个输入情况下,处理输入/输出结果的逻辑 +- 第二部分介绍 Clock 协议,以及相关的使用方式和效果 +- 第三部分介绍在 Clock 协议上实现的两个算法 +- 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架 + +### 🌟 [【WWDC22 110351】使用 Swift 并发消除数据竞争](https://xiaozhuanlan.com/topic/8297064135) + +本文主要回顾了在 Swift 5.5 中引入的 Sendable 协议和用法,同时介绍了 Swift 5.7 编译器中基于 Sendable 协议实现的边界检查,防止在任务切换或者 Actor 切换时造成的数据竞争。探讨了低级数据竞争( low-level data race ),也探讨了如何通过在 Swift 并发中实现事务原子性从而防止高级数据竞争( high-level data race ),同时讲述了如何在安全的并发环境中保持代码逻辑的执行顺序。 + +## 新手推荐 + +### 🐕 [iOS内存分析之Memory Graph](https://mp.weixin.qq.com/s/siwMWiSGcCyk-CVPcNjHMw) + +[@老驴](https://weibo.com/u/6090610445):Memory Graph 是 iOS 开发中经常用到的非常好用的工具。对于一些比较难 debug 的内存泄露类型的 bug 来说,可以做到事半功倍的效果。这篇文章介绍了怎么样使用 Memory Graph,也包括了内存泄露的分析的基础分析方法,如果你是刚接触 iOS 开发的话,不妨来读一读。 + +## 文章 + +### 🐎 [What Apple might do with distributed computing](https://rhonabwy.com/2022/06/01/what-apple-might-do-with-distributed-computing/) + +[@Smallfly](https://github.com/iostalks):本文针对 Swift 不断迭代的并发模型,提出了对苹果在分布式计算领域的发展设想。作者期望苹果系统的跨进程通信能力,能复用在跨设备通信上,来提高苹果设备的协作性。并例举了分布式计算能解决的两个现存问题,一个是 Siri 唤起多设备,设备不能统一化决策问题;另一个是 HomeKit 数据共享问题。 + +### 🐎 [Existential any in Swift explained with code examples](https://www.avanderlee.com/swift/existential-any/) + +[@享耳先森](https://github.com/iblacksun):在 Swift 5.6 中,[SE-335](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `existential any`,Swift 5.7 对其进行了增强。本文详细介绍了 `any` 关键词具体用法、和 `some` 的差异及对性能的影响。 + +### 🐕 [如何持续突破性能表现?DX 性能优化策略详解](https://mp.weixin.qq.com/s/E-ep8vIQpIIMCUhGGxdS0Q) + +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍淘宝乃至整个阿里集团内广泛使用的 Native 动态化方案 DinamicX,一步步带我们揭开它的神秘面纱,文章干货比较密集,需要仔细品读。 + +- DX 现状 +- 管线优化 +- 渲染优化 +- 离屏资源管控框架 + +### 🐢 [使用 LLVM](https://ming1016.github.io/2022/06/10/use-llvm/) + +[@anotheren](https://github.com/anotheren):来自戴铭的 LLVM 系列文章,目前已更新至代码真实使用情况的篇章,介绍了如何使用 LLVM 低成本地检查代码使用情况。如果你也需要检查代码的新陈代谢来控制包体积,不妨看看这篇文章。 + +### 🐎 [Some keyword in Swift: Opaque types explained with code examples](https://www.avanderlee.com/swift/some-opaque-types/) + +[@Damien](https://github.com/ZengyiMa): some 关键词是 Swift 5.1 的新特性,它的作用是允许你在不定义具体类型的情况下描述预期的返回类型,在 Swift 中可帮助简化代码并提高可读性。同时在 Swift 5.7 也引入了许多改进并且编译器也可以进行代码优化,本文作者细心整理了使用 some 的例子和注意事项,想必看了本文之后能对 some 的理解和使用更上一层楼。 + +### 🐎 [Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”](https://mp.weixin.qq.com/s/53pZQgDI642dWQPY2CdkiA) + +[@老峰](https://github.com/gesantung):本文主要介绍一下钉钉 Flutter 业务灰度过程中,在桌面端遇到并处理过的几个 FlutterEngine 层面的 Bug。具体包含以下内容: + +Mac 端: + +- FlutterEngine 退出之后内存泄漏问题; + +- FlutterEngine shutdown 阶段死锁问题; + +- 低版本 macOS OpenGL 析构阶段 Crash 问题; + +Windows 端: + +- Win7 设备渲染模块「Crash + 残影」问题; + +- FlutterPlugin 注册阶段野指针 Crash; + +- Flutter Window 可见性变化之后页面白屏。 + +《Dutter 系列文章》分享了钉钉在跨四端方框架的技术实践与踩坑经验,共分为上、下两篇,上篇内容可点击[《钉钉 Flutter 跨四端方案设计与技术实践》](https://mp.weixin.qq.com/s?__biz=Mzg4MDY0ODk0Ng==&mid=2247486687&idx=1&sn=f928b90fb1d3964970dc0c6b0d9f11f9&chksm=cf70bb42f80732549e87b91ca1ad72a758db06d890249c8ac47cfc86c2689556f8ba84d51946&scene=21#wechat_redirect),感兴趣的小伙伴建议阅读。 + +### 🐕 [Flutter 渲染性能问题分析](https://mp.weixin.qq.com/s/PaJs948QvupKZ0umjT2vjA) + +[@EyreFree](https://github.com/EyreFree):Flutter 有很多优点,虽然它在渲染性能上有不少缺陷,但是某种程度上,某些缺陷也是为了实现更高层次的设计目标而不得不承受的结果。这篇文章就是对比 Web (Chromium) 和 Native (Android),对 Flutter 的渲染性能问题进行深入分析,特别是分析惯性滚动性能糟糕的原因。并且提供了一些优化思路和优化结果的分析数据,对 Flutter 性能优化感兴趣的朋友不要错过。 + +### 🐎 [信息安全 | 互联网时代,如何建立信任?](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247484972&idx=1&sn=4f0d819e8ab9456bd2ee81942abb3f22&chksm=ceea4b8cf99dc29ad27798c860c9db89621d81497fb6a5d206ed0602d75cffbb1bfdbec5809a&token=2062691669&lang=zh_CN#rd) + +文章从信息安全是什么说起,到为什么,到怎么做,脉络清晰,层层递进,最后还聊了一些相关的应用加深理解。 + +通过文章可以让读者回答并理解以下问题: + +1. 信息传输一般使用对称加密+非对称加密,为什么?不能只使用其中一种吗? +2. 信息安全为什么需要数字签名? +3. 为什么签名前需要做哈希操作? +4. 信息安全为什么需要数字证书? + +文章的终极目标是:当我们在遇到密码学相关问题时,不再恐惧和迷惑。 + +> 推荐人:[doubleLLL3](https://github.com/doubleLLL3)(公众号 Bo2SS) + +## 工具 + +### Git 相关 + +- [lazygit](https://github.com/jesseduffield/lazygit) +- [约定式提交](https://www.conventionalcommits.org/zh-hans/v1.0.0-beta.4/) +- [git-cz](https://github.com/streamich/git-cz) + +[@红纸](https://github.com/nianran): lazygit 是一款 GUI 化的 Git 终端交互工具,其界面简洁,通过快捷键就能触达各个指令功能,实属是键盘控的福音了~ + +约定式提交提供了一种提交 git commit message 的规范化里面,旨在提供「一种用于给提交信息增加人机可读含义的规范」,举例用 "feat(Person): Submit new parameters" 来提供人机可读的交互,**feat** 代表新功能 **(Person)** 则代表 Person 作用域,后面则是具体的提交说明。使用约定式提交,我们还可以利用 CI/CD 来自动化生成 CHANGELOG,包括我们 SDK 的 Release Note 都可以这么去做。git-cz 则是一款非常优秀的引导使用约定式提交工具。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10074】AppKit 框架的新特性](https://xiaozhuanlan.com/topic/5137426980) + +AppKit 是 macOS 应用的核心框架之一。WWDC22 对 AppKit 框架的更新包括对设计语言的完善和平台一致性相关的演进。本文将介绍 AppKit 在 WWDC22 上的新特性和开发者的适配要点。 + +### 🌟 [【WWDC22 110344/10109】 Developer Mode 与 Notarization](https://xiaozhuanlan.com/topic/5760498231) + +苹果作为隐私安全方面的先行者,一直致力于让用户能够下载到可靠和安全的应用,并确保用户和开发者的使用体验,试图在安全性和易用性上达到一个良好的平衡。 +本文介绍的 iOS 方向的 developer mode 和 macOS 方向的 notarization 都是苹果基于这些原则的最新实践。 + +### 🌟 [【WWDC22 10041】Wallet 和 Apple Pay 的新功能](https://xiaozhuanlan.com/topic/6245091837) + +本文通过回顾 WWDC 2022 了解 ``Wallet`` 和 ``Apple Pay`` 常规更新和新增的功能。其中常规更新包含:**无接触支付**、**Mac 同步 Apple Pay 功能**、**SwiftUI 新增 API**等功能,新增功能包含:**多商户支付**、**自动支付**、**订单跟踪**、**身份验证**等功能。最后更新了交通卡支持 ``Apple Pay`` 的城市和地区以及目前支持的设备,并提供相关 Demo 以供大家测试。 + +### 🌟 [【WWDC22 10003】初见 WeatherKit](https://xiaozhuanlan.com/topic/7104928536) + +本文将介绍 Apple 新推出的 WeatherKit 天气服务。全文共分为四个部分:第一部分是介绍 Apple 平台中的天气 app。第二部分是介绍支持查询的天气数据集的具体指标。第三部分是介绍如何使用 Swift 和 Python 3 进行接入及接入注意事项。第四部分是总结和展望。 + +### 🌟 [【WWDC22 10075】结合使用 SwiftUI 和 AppKit](https://xiaozhuanlan.com/topic/4072968531) + +本文以 macOS 版本的快捷指令应用(Shortcuts)为例,介绍把 SwiftUI 和 AppKit 结合使用的一些方式和注意事项。 + +### 🌟 [【WWDC 110371】 使用 Xcode 进行多平台开发的那些事](https://xiaozhuanlan.com/topic/8549720316) + +本文将配合 Xcode 14 从以下几个方面讲述多平台项目从开发到上线的过程。 + +### 🌟 [【WWDC22 110345】 使用 Endpoint Security 保护 Mac 安全](https://xiaozhuanlan.com/topic/6541789230) + +本文将主要聚焦于 Mac 的 EndPoint Security 功能的新特性。全文共分为 3 个部分:第一部分是介绍端点安全将取代之前的 kAuth 等 API 。第二部分是对 Muting 技术的介绍,包括如何使用官方 API 。最后一部分是关于 eslogger 可以提供更加丰富的端点安全事件。 + +### 🌟 [【WWDC22 10076】 将你的 iOS 应用搬到 Mac 上](https://xiaozhuanlan.com/topic/5912378064) + +SwiftUI 可以跨整个苹果生态,Flutter 可以跨大多数主流平台,为什么我还要选 Mac Catalyst ?假如有一套已经基于 UIKit 实现的 iPad 代码想要迁移到 Mac 上的话,Mac Catalyst 将是你的不二之选。本文将为你介绍 iOS 应用迁移到 Mac 上的几种方式,并且展示了新系统中的新接口。 + +### 🌟 [【WWDC22 10007】 IAP 新特性](https://xiaozhuanlan.com/topic/3872506491) + +本文结合 WWDC21 IAP 相关能力,对 WWDC22 IAP 相关新特性进行了梳理回顾。本年度苹果虽无 WWDC21 的大拆大建,但却进行了大量的小修小补。苹果对基础能力的补充,让 StoreKit 2 从可用变成好用。阅读本文,与我们一同探讨优化 StoreKit 2、App Store Server API 及 App Store Noitfications V2 的相关策略! + +### 🌟 [【WWDC22 10155】ScreenCaptureKit:MacOS 上的高性能屏幕录制框架](https://xiaozhuanlan.com/topic/0458326917) + +屏幕录制一直以来都是一个桌面系统需要提供的基本能力,可以应用到很多场景,例如:视频会议中的桌面共享、电脑游戏直播、远程桌面控制等。 今年的 WWDC 苹果新推出了一个 MacOS 上的高性能屏幕录制框架 ScreenCaptureKit。 ScreenCaptureKit 不仅通过提供更加易于理解的 API 来简化开发成本,还大大提升了屏幕录制的性能,以便 MacOS 用户可以获得更佳的使用体验。 + +### 🌟 [【WWDC22 10089】 What's new in PDFKit](https://xiaozhuanlan.com/topic/9204781563) + +本文基于 WWDC17 Introducing PDFKit on iOS 以及 WWDC22 What's new in PDFKit 两个 Session 的内容梳理,先后介绍了 PDF 的简介、苹果在 PDF 处理中的发展历史、PDFKit 的基本内容以及 PDFKit 最新的特性。 + +### 🌟 [【WWDC22 10120】进化你的 Core Data Schema](https://xiaozhuanlan.com/topic/6074813952) + +数据迁移是数据库绕不开的话题。在 Core Data 中,轻量迁移更是每一个使用者的必修课。本文将由浅入深的介绍 Core Data 轻量迁移的功能、局限与最佳实践以及迁移在 CloudKit 中的注意事项。 + +### 🌟 [【WWDC22 10077】验证码的替代者—私有访问凭证](https://xiaozhuanlan.com/topic/6437105829) + +验证码技术一直被用于真实流量识别,虽然比较有效但是也给用户带来了一些不便,于是一些平台尝试收集用户隐私信息来精准识别用户。一向注重保护用户隐私的苹果则认为这种做法不可取,于是苹果带来了新的认证技术:Private Access Token。 + +### 🌟 [【WWDC22 10061】将多窗口引入 SwiftUI 应用](https://xiaozhuanlan.com/topic/3529016874) + +本文将围绕构建 SwiftUI app 的多窗口进行讨论。 共分为 4 个部分: +1. 介绍 SwiftUI 生命周期中的各种 scene types,包括几个新引入的 Window 和 MenuBarExtra; +2. 通过添加auxiliary scenes的方式将这些 scene types 组合在一起; +3. 介绍一些为特定 scenes 打开窗口的新 API; +4.介绍一些在 app 中自定义 scene 的方法。 + +## 摸鱼周报 + +[@摸鱼周报 #58](https://mp.weixin.qq.com/s/KwqFraJk40f9bEy0eKa8Kw):第 58 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:在您的 App 中提供帐户删除选项 +* 本周学习:如何配置合适的 ATS +* 内容推荐:WWDC22 推出的新技术和新内容(二番) +* 摸一下鱼:开启真·摸鱼模式,在线养金鱼;极客风的听歌网站,纯文字的音乐播放器;网页设计博物馆;Stack Overflow 年度调查。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#208-2022.07.11.md b/Reports/2022/#208-2022.07.11.md new file mode 100644 index 000000000..f904f3716 --- /dev/null +++ b/Reports/2022/#208-2022.07.11.md @@ -0,0 +1,205 @@ +# 老司机 iOS 周报 #208 | 2022-07-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +> [苹果 App Store 审核问题和体验收集](https://docs.qq.com/form/page/DZUxDcVdPQWpJc0hL#/fill) +> 老司机准备做一次社区内关于 App Store 审核这方面的问卷调查,旨在了解我们社区内 App Store 审核的体验与存在的问题。收集完问卷后我们会不定期组织有经验的开发者进行圆桌讨论,并将典型的问题整理成文发布。可以[点击链接](https://docs.qq.com/form/page/DZUxDcVdPQWpJc0hL#/fill)填写。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 14 篇文章,目前总共已经更新了 48 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10056】在 SwiftUI 中组合各种自定义布局](https://xiaozhuanlan.com/topic/1507368249) + +在本 Session 中介绍了 SwiftUI 用于编写应用程序视图布局的一些新工具。 + +- 我们可以使用 Grid 来构建高度可定制的静态信息二维布局。 +- 我们可以使用布局协议来定义自己的通用布局、可重用布局或特别定制用例的布局。 +- 当我们想让 SwiftUI 从一组视图中选择最适合屏幕可用空间时,我们可以使用 ViewThatFits。我们可- 以使用 AnyLayout 在不同的布局类型之间平滑地过渡。 +- 以及关于 GeometryReader 的讨论。 + +### 🌟 [【WWDC22 10106】游戏内存调试与优化](https://xiaozhuanlan.com/topic/4258936701) + +本文展示了 Apple 平台游戏 App 内存的计算、分配、和调优技巧。全文分四个部分: +- 第一部分讲解了内存的基本概念; +- 第二部分展示如何使用 Instruments 工具和 Game Memory Template 来分析游戏,通过游戏内存快照来监测当前内存使用情况; +- 第三部分介绍了使用 Xcode Memory Debugger 和命令行工具进行分析优化; +- 第四部分探索 Metal Debugger 中的 Metal 资源,并提供提示和技巧以进一步优化内存使用。 +通过本文的探索,您可以更好地理解游戏的内存构成和优化游戏的内存使用。 + +### 🌟 [【WWDC22 110370】使用 LLDB 调试 Swift](https://xiaozhuanlan.com/topic/4809126537) + +本文主要介绍了在使用 LLDB 调试 Swift 代码时常见的问题,包括源代码索引问题以及 po 指令失效问题,通过分析问题出现的原因和解决方案,帮助各位开发者更深入地了解 LLDB 的调试信息和工作原理,并且学会在复杂场景下设置 LLDB 友好的 Swift 项目。 + +### 🌟 [【WWDC22 10122】提升 “通过 Apple 登录” 的体验](https://xiaozhuanlan.com/topic/8752349016) + +本文主要介绍如何通过 “通过 Apple 登录” 将基于密码的账户升级为拥有安全便捷的一键登录凭据,增强和简化应用的登录体验,同时并探索如何无缝处理 App 中用户会话的更改和账户删除,以及在 Web 和其他跨平台上充分发挥 “通过 Apple 登录” 的优势。 + +### 🌟 [【WWDC22 10147】 创造优秀的视频播放体验](https://xiaozhuanlan.com/topic/8504173629) + +这篇 session 围绕着 Apple 新升级的视频播放器,描述了新的播放器的新界面、新功能,以及 Apple 对提高视频播放体验的建议和思考。全文主要分成两部分:第一部分会介绍新版播放器的功能和播放器的设计建议;第二部分会对播放器新支持的 API 做出简单的阐述。文章的最后列举了国内外播放器的设计实现,希望对你有所启发。 + + +## 新闻 + +### [HTTP3 RFC标准正式发布,QUIC 会成为传输技术的新一代颠覆者吗?](https://mp.weixin.qq.com/s?__biz=Mzg4MjE5OTI4Mw==&mid=2247494885&idx=1&sn=bb61db8b0f5f5cf3c540c6dad8070532&source=41#wechat_redirect) +[@莲叔](http://aaaron7.github.io/):相信和网络经常打交道的同学对QUIC都不陌生,在很多数据密集传输的领域,如音视频,往往基于 UDP 协议能提供比 TCP 更鲁邦的传输性能和吞吐量。如果网速越来越快,以及 HTTP 协议的大规模使用,使得 QUIC 横空出世成为 HTTP 协议演进的主要方向。手淘已经很早就在实际的业务场景中使用 QUIC 来做网络传输优化并实现了自研的 XQUIC,适逢 HTTP3 标准发布,本篇文章就是由 XQUIC 组的同学分享了关于 QUIC 应用的经验,主要包括【适用的场景】,【业务应用 QUIC 路径】,【QUIC性能提升的选择】以及【服务端 UDP 瓶颈突破】几个方面,对网络优化有需求的同学可以了解看看。 + +## 文章 + +### 🐎 [Automatically update if let and guard let for Swift 5.7](https://digitalbunker.dev/updating-if-guard-let-for-swift-5-7/) + +[@张嘉夫](https://github.com/josephchang10):[What's new in Swift](https://developer.apple.com/videos/play/wwdc2022/110354/) 介绍了 Swift 5.7 对 `if let` 和 `guard let` 语法的更新。在 Swift 5.7 之前,当我们使用 `if let` 或者 `guard let` 来展开可选值时,我们通常会使用相同的命名。最新版本的 Swift 支持了简写,可以直接省略等号及右边部分。本文提供了两个正则表达式,以便把代码库整体更新为这个新的、更整洁的语法。此外,作者还提供了一个 pre-commit hook 脚本,以确保你已经进行了转换。 + +### 🌟 🐢 [8K HDR!|为 Chromium 实现 HEVC 硬解 - 原理/实测指南](https://mp.weixin.qq.com/s/O6lU8qTKAKBMH3Oi5H4yxg) + +[@JonyFang](https://github.com/JonyFang): 本文简述了 Web 解码方案现状,介绍了作者为 Chromium 浏览器实现、完善硬解码过程中遇到的问题及最终的实现原理。在文末,也附带了测试结果,预编译版本供参考,希望可以解决 FrontEnd 苦于 HEVC 已久的问题。 + +### 🐕 [Alibaba.com App瘦身实践——iOS包大小技术与ROI总结 - 掘金](https://juejin.cn/post/7117074938577551368) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了阿里巴巴App瘦身的整体思路,包体优化的文章有很多,但本篇文章在技术大图上组织的比较清晰,尤其对复杂业务的梳理值得借鉴。 + +- 业务价值 +- 分析技术 +- 瘦身过程 + - 瘦身技术大图 + - 组件瘦身 + - 资源瘦身 + - 编译优化 + - 代码下线 + - Flutter专项 +- 防劣化 + +### 🐕 [Flutter 小技巧之 Dart 里的 List 和 Iterable 你真的搞懂了吗?](https://mp.weixin.qq.com/s/GwAoMN77EVbZdo9Jya9hRA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文内容如下: +- 介绍了 Dart 中的 Iterable 协议的 Lazy 属性,只有被操作时才会生成对应元素,且结果不会被缓存,多次访问会导致多次计算 + - 在 List 上调用 map/where 会返回 lazy 特性的 Iterable + - 在 List 上调用 toList/toString 等则不会 +- 介绍了 Iterable 懒加载特性的适用场景与注意事项 + - 不要在 Iterable 中使用副作用 + - 分页加载数据、数据库查询 时可以使用 Iterable +- 对比了 List 与 一般的 Iterable 在内部实现中的不同 + - List 具有 length(长度),内部的 ListIterable 是通过 _iterable.length 与 _iterable.elementAt 实现 + - 一般的 Iterable 是顺序访问的集合,并不关心 length(长度) + +笔者:如果做个类比,那在表现上可以理解为 Swift 的 lazy 。现在新的语言大多都有互相借鉴能力的倾向,关于 Swift 的 lazy 可以查看: [Lazy Sequences in Swift And How They Work](https://swiftrocks.com/lazy-sequences-in-swift-and-how-they-work)。 + +### 🌟 🐢 [干货 | 携程酒店 Flutter 性能优化实践](https://mp.weixin.qq.com/s/sFF0R_wVBO6e3OSo27V1kg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在业务不断迭代和代码持续更新的状态下,应用的性能始终是一个需要持续关注和优化的点,Flutter 应用亦如此。本文由携程前端团队产出,聚焦于 Flutter 体系下的各类优化及详细方法: + +- FPS&TTI 提升优化 +- UI GPU 问题定位与优化 +- Flutter 服务通道优化 +- 内存泄漏治理 + +笔者: 携程前端团队近大半年在 Flutter 相关的技术上产出颇丰,小编建议各位同学可以翻一下往期相关文章,一定收获满满 + +### 🐢 [通过汇编分析方法参数,其实很简单~](https://mp.weixin.qq.com/s/7w6h3GONKXl23D4eoIAd3w) + +[@AidenRao](https://weibo.com/AidenRao):我们经常会在开发过程中遇到崩溃,如果是崩溃到系统的方法里,我们想要知道方法的参数什么,在不知道参数的个数和参数类型的情况下是非常头痛的。作者通过几个例子,逐步讲解函数在汇编下的调用过程,及如何通过汇编推测函数的参数个数和类型。 + +### 🐕 [Flutter 小技巧之有趣的动画技巧](https://mp.weixin.qq.com/s/bIuTsqg7p8F979owSpEO2Q) + +[@EyreFree](https://github.com/EyreFree):Flutter 里实现常见的动画效果很简单,甚至不需要自定义布局,只需要通过官方的内置控件就可以轻松实现。本篇通过分享一个示例动画的实现,简单轻松地讲解了 AnimatedPositioned 和 AnimatedContainer 的使用,并且进一步引出它们是如何基于 ImplicitlyAnimatedWidget 实现所拥有的功能的,剖析了 Flutter 里的动画技巧。在学习和使用 Flutter 的朋友不要错过。 + +### 🐕 Hummer 引擎优化系列-[Sliver多节点和单节点分帧原理](https://mp.weixin.qq.com/s/otV8FOZyH6AbPeI1EtU5CA)[Dart Split AOT技术,以及定制化Deferred Components的实现](https://mp.weixin.qq.com/s/gzTRQCqRV1XUYwNuROFx_g) + +[@极速男孩](https://github.com/ztlyyznf001):Hummer 是阿里的 UC 团队深度定制优化的 Flutter 引擎,第一篇主要介绍了如何利用分帧原理 Flutter 中 Sliver 单节点和多节点滑动优化的。第二篇主要介绍了 Hummer 引擎如何利用 Dart Split AOT 技术和定制化 Deferred Components 来实现原来只能在 Play Store 才能实现的递增下发的功能。 + +### 🐕 [百度 APP 基于 Pipeline as Code 的持续集成实践](https://mp.weixin.qq.com/s/oVkFmwFN68b6W_SkcJHKRA) + +[@红纸](https://github.com/nianran):本文简述的是百度的持续集成实践(Pipeline as Code),让产品线用结构化的语言去描述他们研发流程需要的一组功能或特性,然后根据描述(DSL)自动化地生成对应的流水线,其 DSL 参考于 Github Actions。文中也提到了一些实现细节,包含 Action 的可复用机制、事件触发机制、基于百度云的虚拟机集群、Pause/Unpause 的恢复上下文技术、多种 Action 和 Runner 交互的方案。 + +### 🐕 [React Native 中实现动态导入](https://mp.weixin.qq.com/s/oKeY6DsBDarBxRzySDMzDQ) + +[@xuyafei](https://github.com/xiaofei86):随着业务的发展,每一个 React Native 应用的代码数量都在不断增加,bundle 体积不断膨胀,对应用性能的负面影响愈发明显。拆分多业务包虽然可以解决单个应用不断膨胀的问题,但仍存在不少局限性。本文,网易云音乐技术团队为大家带来对 Metro 进行深度定制实现的动态导入(Dynamic import)方案。其可以方便地实现页面按需加载,组件懒加载等能力,感兴趣可以阅读原文了解。 + +### 🐕 [Reduce in Swift](https://swdevnotes.com/swift/2022/reduce-in-swift/) +计算一个数组里面所有值的和,我们可能通常会想用 for 循环去做。但其实 Swift 很早就给我们提供了一个高阶函数去实现类似的功能,它就是 Reduce 函数。熟悉函数式语言的同学对 Reduce 应该并不陌生,Swift 里的 Reduce 也是用作数组元素的累加计算,掌握它可以让我们写出更优雅的实现! + +## 工具 +### [SwifRegex.com](https://swiftregex.com/) + +[@kemchenj](https://kemchenj.github.io/):正则表达式是一种简洁强大的工具,但伴随而来的是 Debug 难的问题。SwiftRegex.com 就是为解决这个问题而制作的一款工具,让我们可以快速调试检验自己的正则表达式,并且也提供了 Builder DSL 模式让我们可以使用 Regex Builder 的表达式来编写。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110355】了解 Swift 异步算法](https://xiaozhuanlan.com/topic/8217965043) + +本文通过阅读源码的方式,来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为四部分: +- 第一部分介绍对于多个输入情况下,处理输入/输出结果的逻辑 +- 第二部分介绍 Clock 协议,以及相关的使用方式和效果 +- 第三部分介绍在 Clock 协议上实现的两个算法 +- 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架 + +### 🌟 [【WWDC22 10043/10044/110404】App Store Connect 中的新特性及最佳实践](https://xiaozhuanlan.com/topic/1502478369) + +本文对本次 WWDC22 中更新的三个 session:10043、10044、110404 进行了归纳整理,梳理了本次更新中 App Store Connect 的新特性,并对其中的重要更新功能:增强的 App Store 提交体验、应用基准测试工具、用户订阅状态即时获取,展开了最佳实践讨论。 + +### 🌟 [【WWDC22 110380】 SharePlay 中显示广告和插播内容](https://xiaozhuanlan.com/topic/3149265870) + +本文是基于大家对 SharePlay 技术有一定了解的情况下,介绍关于流媒体 App 使用 SharePlay 技术向不同用户展示不同广告/插播内容时产生不同步问题的解决方案。 + +### 🌟 [【WWDC22 110349/110348】Swift Playground 指北](https://xiaozhuanlan.com/topic/9107542836) + +Apple 在今年 WWDC22 中没有重点展开 Swift Playgrounds 的内容,但 Swift Playgrounds 4.0 以上版本可以作为一个完整、运行在 iPad 中的 IDE,更强大用户权限管理、更细致 的 UI 表现以及更符合直觉的代码联想,我们终于可以在 iPad 上写真正的 App 了! + +### 🌟 [【WWDC22 10166/10167】探索应用追踪透明化 App Tracking Transparency 与隐私标签](https://xiaozhuanlan.com/topic/0934681275) + +现阶段,所有 App 想要追踪用户的数据,必须要通过 AppTrackingTransparency 框架来获得用户授权。因此,本文将聚焦于应用追踪透明化(App Tracking Transparency),并解释了用户追踪是如何定义的以及在确实需要接入此框架时,具体应该如何接入。 + +### 🌟 [【WWDC22 10098】在 Safari 里使用 Web Push](https://xiaozhuanlan.com/topic/0819724365) + +本文基于 WWDC22 Meet Web Push for Safari 的内容梳理,介绍 web push 的流程和在 macOS 平台的实现细节。 + +### 🌟 [【WWDC22 10133】实践项目:使用 SwiftUI 的新功能为 Apple Watch 构建出色的效率 App](https://xiaozhuanlan.com/topic/2487691035) + +“你的手腕从未像现在这样如此高效。”我们将使用 SwiftUI 在 Apple Watch 上实现滑行键入、与朋友共享内容及显示基本图表,构建一个跟踪「项目完成」效率的、全新的、独立的 watchOS App。 + +### 🌟 [【WWDC22 10018】为 macOS 应用支持「连续互通相机」](https://xiaozhuanlan.com/topic/5641729830) + +本文介绍了 macOS 13 和 iOS 16 的一个新的联动能力:Continuity Camera(连续互通相机)。这项能力将 iPhone 上优秀的摄像头模组和算力带到了 Mac 上面,并让大部分型号的 Mac 都能够受惠。Apple 不仅向我们展示了连续互通相机强大的功能/设计及其运用场景,同时演示了如何快速低侵入得集成连续互通相机的所有功能。 + +### 🌟 [【WWDC22 10048】Safari 和 WebKit 新特性介绍](https://xiaozhuanlan.com/topic/1560743928) + +本文主要介绍过去一年,Safari 和 Webkit 有哪些新增功能和改进。全文着重介绍了两个方面的改进,一个是 CSS,耗费了大量的笔墨介绍了过去 CSS 上的新增功能。另外就是 Web API 上新增了Web Push、Web Manifest File、Broadcast channels 、文件系统访问 API 以及在 Canvas 上对 P3 色域的支持。 + +## 摸鱼周报 + +[@摸鱼周报 #59](https://mp.weixin.qq.com/s/LJNCo0Eg11shGZN75-TZcg):第 59 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:CI/CD 和 DevOps 有什么区别?如果你不能准确回答的话,可以读一下这篇介绍,对 DevOps 再次加深理解。 +* 本周学习:OC所使用的类信息存储在哪? 如何从Macho中找到? +* 内容推荐: WWDC 2022 上推出的新技术(三番) +* 摸一下鱼:一款跨平台摸鱼神器 Thief,有趣的骚话生成器 sao-gen-gen + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#209-2022.07.18.md b/Reports/2022/#209-2022.07.18.md new file mode 100644 index 000000000..47487a97b --- /dev/null +++ b/Reports/2022/#209-2022.07.18.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #209 | 2022-07-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 10 篇文章,目前总共已经更新了 58 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 3 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10090】TextKit 2 新特性解读及适配方案](https://xiaozhuanlan.com/topic/5941762038) + +本文基于 WWDC22 10090 - What's new in TextKit and text views 进行介绍,首先是对于 iOS 上文本系统发展的回顾,接着介绍了 TextKit 的核心设计原则,TextKit 2 相对于 TextKit 1 的优化点,及 TextKit 2 新特性的解读及适配方案。 + +### 🌟 [【WWDC22 10082】利用 Xcode 和设备上的检测工具排查卡顿](https://xiaozhuanlan.com/topic/9126308457) + +今年 Apple 在开发各阶段中更新了一些帮助开发者定位卡顿的工具,借此机会笔者结合了本次更新内容与大家一同探讨分享卡顿的治理排查思路。 + +### 🌟 [【WWDC22 10083】减少手机电池消耗](https://xiaozhuanlan.com/topic/9602743158) + +本文将介绍优化电量消耗的相关内容,主要分为 4 个主要模块,分别是基于暗黑模式、刷新率、后台任务、推迟非实时性任务的耗电量优化。 + +## 文章 + +### 🐢 [How necessary are the programming fundamentals?](https://swiftrocks.com/how-necessary-are-the-programming-fundamentals) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者以自身的经验总结并回答了:“我一个 iOS 开发为什么需要懂图论等理论知识”这个常见的问题,并列举了哪些开发更应该重视这块内容;同时总结了为什么现在面试中的八股文现象导致大家对理论知识如此反感;最后作者给出了一些如何正确地在面试中结合实际项目考察理论知识的方法,值得一读。 + +### 🐎 [SF Symbol Changes in iOS 16.0](https://hacknicity.medium.com/sf-symbol-changes-in-ios-16-0-70a80660ba79) + +[@Smallfly](https://github.com/iostalks):苹果在 [WWDC 2022: What’s New in SF Symbols 4](https://developer.apple.com/videos/play/wwdc2022/10157) 宣布了 SF Symbols 的更新,目前已经超过 4000 个符号,自 iOS 13 发布,已经更新了十个版本。新版本中重命名的符号是向下兼容的,需要注意的是重命名的符号,要使用老的名称才能在低版本生效。此次更新的内容主要有: + +- 新增 698 个新符号图标 +- 默认渲染模式支持 `monochrome` 和 `hierarchical` +- 新增 150 个高亮状态可变色(Variable Color)符号图标 +- 重命名 24 个符号图标 +- 支持更多本地化符号图标 + +### 🐢 [文本布局性能提升 60%,Inline Text 技术原理与实现 | Cube 技术解读](https://mp.weixin.qq.com/s?__biz=Mzg4MjE5OTI4Mw==&mid=2247494888&idx=1&sn=c358b190640934bf83f42993ac4992ac&source=41#wechat_redirect) + +[@Leo](https://github.com/leomobiledeveloper):Cube 是一个轻量级支付宝小程序引擎,具有体积小、启动快、内存占用低的特点。本文详细讲解了 Cube 引擎对文本相关能力增强细节。包括了对文字的宽高的测量与计算,排版和布局,在增强 CSS 能力的同时又可以提升布局性能,这些文字相关的能力(或者叫 Feature )统一被称为 Inline Text。 + +目前在优酷 OTT 上 90% 由搭建平台产生的产物都默认开启了 Inline Text,使用了相关能力,提升布局的性能,由于协议页面的需求,开发者无需再使用 Javascript 进行分词更换颜色,直接使用引擎能力。 + +### 🐢 [淘宝iOS扫一扫架构升级 - 设计模式的应用](https://mp.weixin.qq.com/s/v3MWjZ4AcVxzVW6HfY9IiQ) + +[@老峰](https://github.com/gesantung):在日常开发中,经常会有老代码需要维护更新甚至重构,本文是手淘扫一扫针对旧业务进行架构升级以及设计模式在其中应用的的总结,全文包含如下内容: + +- 扫一扫原架构 +- 新架构设计模式:责任链模式、状态模式、代理模式 +- 扫一扫新架构 + +### 🐎 [Generics in Swift explained with code examples](https://www.avanderlee.com/swift/generics-constraints/) + +[@Damien](https://github.com/ZengyiMa):泛型允许你编写通用且可重用的代码,避免重复,并且泛型在 Swift 标准库中无处不在。你会在 Swift 中使用泛型特性吗?如果你对此不熟悉,不妨来读读此篇文章,作者会从各个角度来深入介绍泛型的使用。 + +### 🐢 [SwiftUI Grid](https://sarunw.com/posts/swiftui-grid/) + +[@Jimq](https://github.com/waz0820):今年的 SwiftUI 新增了一些富有表现力的控件,比如 Charts、Grid,为我们制作相应功能的界面提供了非常趁手的工具。其中,Grid 是在二维布局中排列其他视图的容器视图,所谓二维布局即行列布局。Grid 不是简单的 VStack / HStack 嵌套,它会将行列的创建作为单个操作处理,集中而非孤立地处理行列及其内部的 Cells。借助 Grid,我们可以批量又不失灵活性地控制行列的宽高,Cells 的对齐、间距、合并或空白填充。本文图码并茂,详细地介绍了其具体功能和用法。 + +### 🐎 [How iOS 16 makes your app launch faster](https://www.emergetools.com/blog/posts/iOS16LaunchTime) + +[@JonyFang](https://github.com/JonyFang): iOS 16 通过减少从磁盘加载的数据量,缩短了加载二进制文件所需的时间。在这篇文章中,作者主要介绍 iOS 16 中发生了什么变化,它到底快了多少,以及我们如何最好地利用这些新功能。 + +### 🐕 [Reverse Engineering SwiftUI’s NavigationPath Codability](https://www.pointfree.co/blog/posts/78-reverse-engineering-swiftui-s-navigationpath-codability) + +[@AidenRao](https://weibo.com/AidenRao):在一众开发者的呼吁声中,NavigationStack 成功取代 NavigationView 成为 SwiftUI 导航系统的主力。但在重新学习过程中,你是否对 NavigationPath 这个似乎有魔法的结构产生过疑问。它如何对不同类型的值进行类型抹除并存放在同一个数组容器中,同时又在取出值时恢复其类型信息以进行后续操作?[Point-Free](https://www.pointfree.co/) 试图通过逆向工程解答这一问题,并以此为契机打开 existential types 的潘多拉魔盒。 + +> 由 [KeithBird](https://github.com/KeithBird) 推荐收录 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110429】探索 iOS 相机新特性](https://xiaozhuanlan.com/topic/0591234867) + +本 session 主要是 iPhone 相机模块有关的新 feature 介绍,包括 AVFoundation 支持新的深度相机类型、更智能的人脸驱动 AF/AE、相机视频流的优化以及相机支持多任务处理等更新内容。 + +### 🌟 [【WWDC22 110359】Swift Package plugins 初探](https://xiaozhuanlan.com/topic/7316598402) + +本文是 Swift 包新特性包插件的介绍文章。包插件可以做很多事情,比如代码格式化、代码扫描、自动生成多语言文件等等。通过本文介绍什么是包插件?包插件能做什么?包插件怎么用?让你对 Swift 包插件有个具体了解,可以上手开发自己的包插件。 + +### 🌟 [【WWDC22 110338】在 Now Playing 中展示播放信息与控制播放](https://xiaozhuanlan.com/topic/2819035467) + +本文主要讲述在 Now Playing 中展示播放信息与控制播放。 + +### 🌟 [【WWDC22 110403】初见新框架 "Background Assets"](https://xiaozhuanlan.com/topic/3198024567) + +Background Assets 是苹果在 iOS 16 中引入的新框架,目的是帮助用户减少 APP 使用时的等待时间,提升 APP 的整体使用体验,避免网速差、资源大等原因造成的用户流失。 + +### 🌟 [【WWDC22 10062】初见 Transferable](https://xiaozhuanlan.com/topic/7965203418) + +CoreTransferable 是苹果今年新出的纯 Swift 的框架,提供了一种更 Swift、更声明式的方式来描述数据该如何被传输和共享。本文将介绍其核心的 Transferable 协议的实现方式,及其常见的用法。 + +### 🌟 [【WWDC22 10035】探索苹果地图新功能](https://xiaozhuanlan.com/topic/0698342715) + +在过去十年里,‘苹果地图’持续修补漏洞、改进功能,从一开始依赖第三方数据到自己收集数据,一直在努力将其打造为世界上最好的地图应用。同时为开发者提供了两种将地图 App 整合到其产品中的方式,其中之一是 MapKit,可以让你将地图 App 整合到 iOS、iPadOS 或 macOS 的 App 中,这样你就能在 App 中显示地图或卫星图像、添加注释和悬浮窗、标注兴趣点、确定地图坐标信息等等。另外一个是MapKit JS,可为网站带来交互式地图,不只是添加注释、悬浮窗,还有搜索和导航等地图服务的界面。 + +在今年的 WWDC 中,苹果不仅带来了 MapKit 的新功能,还首次开放 Apple Maps Server API(苹果地图服务接口) 来帮助开发者构建性能更好的地图服务。 + +### 🌟 [【WWDC22 10052】What's New In SwiftUI](https://xiaozhuanlan.com/topic/3615907284) + +本文介绍 WWDC22 中 SwiftUI 的更新,使用代码 + 图片的形式进行介绍,包括 SwiftChart, Navigation and windows, Advanced controls,Sharing,Graphics and layout 等主题内容的介绍。 + +## 摸鱼周报 + +[@摸鱼周报 #60](https://mp.weixin.qq.com/s/Sv3goAv198eXjmlVJsN1rw):摸鱼周报已经到第 60 期了,大家可以看下本期概要: + +- 本期话题:2022 Apple 高校优惠活动开启 +- 本周学习:Swift 5.7 中的 opaque parameter 和 primary associated types +- 内容推荐: WWDC22 内参推荐 +- 摸一下鱼:推荐收集到的各种图标网站 +- 岗位推荐:上海 Espressif 招聘全栈工程师 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术】公众号,回复「2022」,领取 WWDC21 及以前的内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#210-2022.07.25.md b/Reports/2022/#210-2022.07.25.md new file mode 100644 index 000000000..b5340b9bc --- /dev/null +++ b/Reports/2022/#210-2022.07.25.md @@ -0,0 +1,168 @@ +# 老司机 iOS 周报 #210 | 2022-07-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 16 篇文章,目前总共已经更新了 74 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 110363】App 包大小优化和 Runtime 上的性能提升](https://xiaozhuanlan.com/topic/4675012938) + +今年 Apple 在 Objective-C 运行时和链接器底层做了重大优化,包括 Swift 协议检查、Objective-C 消息发送、Retain 和 Release 底层优化以及 Autorelease 自动省略优化。以往开发者往往需要使用各种奇淫技巧来优化包大小,而在 2022 年的当下,Apple 从汇编代码以及编译器、链接器层面做出的优化,就能自动让 App 的包体积得到减小。 + +### 🌟 [【WWDC22 10026】沟通影像世界的新桥梁——实况文本 API 介绍](https://xiaozhuanlan.com/topic/2861437095) + +实况文本(Live Text)是 Apple 为 iOS 15 和 iPadOS 15 新增的实用功能之一,简单来说,实况文本是一个系统级的 OCR 工具,它能够帮助我们把照片、相机界面当中的文字转化为可交互的文本。在 iOS 16 系统中更是开放了一系列封装好的实况文本 API,让我们可以方便在应用中集成实况文本功能。 + +### 🌟 [【WWDC22 10110】如何搭建一个国际化的应用](https://xiaozhuanlan.com/topic/6498107253) + +随着苹果的服务遍布全球,开发者的应用也被世界各地的用户使用。在这样的背景下,开发者们应该如何将自己的应用完成本地化呢? + +### 🌟 [【WWDC22 110368/110369】Swift-DocC 新特性](https://xiaozhuanlan.com/topic/3658492071) + +去年 Swift-DocC 一经发布就在社区引起了不小的反响,而开源更是为它带来了更强的社区支持。让我们一起看看这一年,这个官方力推的文档工具有哪些方面的进化,一起探索 Swift-DocC 背后的实现原理。 + +### 🌟 [【WWDC22 110364】揭开 Xcode 构建并行化的神秘面纱](https://xiaozhuanlan.com/topic/0389142657) + +本文会从 Xcode 构建的核心概念开始,让读者对构建过程有个初步了解,并提出一个强有力的新工具——构建时间轴(Build Timeline)。最后从 Target 内部的并行优化和 Target 之间的并行优化两方面介绍本次主题。 + +## 新闻 + +### [Upcoming transition from the XML feed to the App Store Connect API](https://developer.apple.com/news/?id=yqf4kgwb) + +苹果预计将在 2022 年 11 月下线 XML Feed 的请求,苹果提供了 App Store Connect REST API 来进行代替。新的 REST API 可以支持对 IAP、订阅状态、元数据、定价 等功能的自动管理。XML Feed 将继续对现有的 Game Center 管理提供支持。 + +关于 App Store Connect REST API 的进一步具体使用与介绍可以查看我们今年的内参:[【WWDC22 10043/10044/110404】App Store Connect 中的新特性及最佳实践](https://xiaozhuanlan.com/topic/1502478369)。 + + +## 文章 + +### 🐕 [StoreKit2 实际接入时候的踩坑与解决实录](https://juejin.cn/post/7122458652945956878) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文主要内容如下 +- lipo 裁剪拼接,32 位(armv7)环境下也可以在同一个 framework 内集成 StoreKit2 +- 通过 md5/pkcs7 等方式处理用户凭证为 uuid,同时兼容 applicationUsername(Original StoreKit) 与 appAccountToken(StoreKit2) 以获得订单与用户的关联 +- 介绍兼容新旧两套的交易通知的验证逻辑,减少用户掉单的情况 + +### 🐎 [UIPasteBoard's privacy change in iOS 16](https://sarunw.com/posts/uipasteboard-privacy-change-ios16/) + +[@张嘉夫](https://github.com/josephchang10):在 iOS 16 中,用户可以在某个 app 尝试读取剪切板数据之前允许或拒绝读取权限。和位置等其他隐私权限类似,在 app 尝试访问剪切板数据时,会向用户显示一个警告弹窗。但在当前的 beta 版本中,`UIPasteBoard` 的隐私权限与其他权限在行为上存在几处不同之处,例如用户做出的选择在 app 重新构建之后不会被记忆,以及该权限不会在 app 的隐私设置中显示,以致用户在允许之后无法再进行更改等。此外,作者还提供了三种方式来避免在访问剪切板数据时显示权限弹窗: + +- 用户通过选项菜单主动粘贴 +- 用户使用键盘快捷键(Command+V)进行粘贴 +- 使用 iOS 16 新增加的 `UIPasteControl` + +### 🐕 [MemoryThrashing:抖音直播解决内存抖动实践](https://mp.weixin.qq.com/s/KSSWuk6y3A6qL7WPL9irvA) + +[@Leo](https://github.com/leomobiledeveloper):内存有较大波动的时候往往会导致峰值过高或者驻留对象过多,进而直接或者间接造成 OOM。本文是抖音直播基础技术团队提出的 iOS MemoryThrashing 解决方案,通过采样多个时刻的内存(主要监控 class 的实例个数), diff 出内存信息找出 top 增长,达到归因的目的。 + + +### 🐕 [一键释放iOS 64位App潜力](https://www.toutiao.com/article/7116717500678570507) + +[@红纸](https://github.com/nianran):本文主要讲述一个冷门知识,利用两个配置可以扩大虚拟内存的申请上限(com.apple.developer.kernel.increased-memory-limit、com.apple.developer.kernel.extended-virtual-addressing)。遇到申请虚拟内存失败导致 Crash 的可以试下。 + +### 🐕 [04 - 探究 iOS 底层原理 | ARM64 汇编](https://juejin.cn/post/7115302848270696485) + +[@AidenRao](https://weibo.com/AidenRao):在探究底层原理过程中,我们必须掌握一定的前知识,才具备探究底层原理的手段。因此,作者分享了 iOS 系统真机环境下,ARM64 硬件架构的相关汇编知识。浅显易懂,值得阅读。 + + +## 工具 + +### 🐎 [抢先体验! 在浏览器里写 Flutter 是一种什么体验?](https://mp.weixin.qq.com/s/BZgc2VWWqOvUjZyo1FS3nw) + +[@极速男孩](https://github.com/ztlyyznf001):Zapp 是一款由 Invertase 公司提供的在浏览器中构建 Flutter 应用的服务。提供了和桌面端类似的高亮语法、自动完成、调试、Git 代码管理、测试等功能,让我们在 iPad 上写 Flutter 成为了可能。具体可以在 [Zapp 应用主页](https://zapp.run) 了解。 + +### 🐕 [iOS 為多語系字串買份保險吧!. 確保 Localizable.strings 文字檔不被意外改壞 | by ZhgChgLi | ZRealm Dev. | Jul, 2022 | Medium](https://medium.com/p/48a8526c1300) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了使用 SwifGen & UnitTest 来确保多语言的安全。 +Localizable.strings 这样的纯文字经常会漏掉或者改错,又或者是 key 直接展示给用户,这些都是很不好的体验。 + +解决方案 +- 使用 swift 编写完整的检查工具 +- Xcode13 内建 Build Time 检查 Localizable.strings 的正确性 +- 使用 SwiftGen 取代原始 NSLocalizedString String Base 存取方式 +- UnitTest 检查 + + +### 🐎 [妈妈再也不用担心我找不到 iOS 学习资料啦](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247485043&idx=1&sn=d19ea1c32495eb40c78d6356819aa5e3&chksm=ceea4bd3f99dc2c55c8d8f8abf3071dd9aeca1a59cd4e764ac2b886ed785e81a661e441ad414&token=2062691669&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文分享了 iOS 相关的学习资料,包括 iOS 相关的在线学习资料(Awesome iOS),书籍以及公众号,另外也附上了 WWDC 和 Human Interface Guidelines 等官方资源。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10116】初见 CKTool JS](https://xiaozhuanlan.com/topic/8235470691) + +本文将带你了解如何使用 CKTool JS 自动化管理 iCloud 容器。展示如何配置 CKTool JS 来管理容器、修改记录以及操作数据。我们还将探讨如何将 CKTool JS 集成到自动化工作流程中。为了更好地理解,建议先了解 CloudKit、JavaScript 和 npm。 + +### 🌟 [【WWDC22 10097】What's new in App Clips](https://xiaozhuanlan.com/topic/6739528410) + +在今年的 session 中,iOS 16 将 App Clip 的包体积大小提升到了 15 MB,给了工程师更多的空间来创造更多天马行空的功能。App Clip 诊断工具也帮助工程师更好地解决 App Clip 链接配置问题。CloudKit 和 keychain 让我们可以更大程度地复用 App 中的代码来让 App Clip 的开发变得轻松。App Clip experiences API 可自动化管理你的 advanced App Clip experiences。 + +### 🌟 [【WWDC22 10038】SKAdNetwork 4.0 新特性](https://xiaozhuanlan.com/topic/3468519720) + +SKAdNetwork 是苹果于 2018 年推出的 App 安装归因框架,主要目标是在保护用户隐私的前提下,将归因数据发送给广告商,帮助广告主衡量广告的投放效果。在 WWDC 2022 上,苹果介绍了最新版本 4.0 的新特性,让我们一起来看看吧! + +### 🌟 [【WWDC22 10113/10114/110565】在 iOS 上探索 EDR](https://xiaozhuanlan.com/topic/1874509623) + +EDR(Extended Dynamic Range 扩展动态范围),是 Apple 的 HDR 渲染和像素表示技术,能更好地表示图像的亮暗细节,还原更真实的世界。2021 年 WWDC 苹果给不支持 HDR 的 Mac 带来了 HDR 的“支持”,今年苹果给不支持 HDR 的 iOS 也带来了 HDR 的“支持” -- iOS EDR 渲染技术。 + +### 🌟 [【WWDC22 10148】Meet Apple Music API & MusicKit](https://xiaozhuanlan.com/topic/1625743890) + +本文简要介绍了 MusicKit & Apple MusicAPI 的背景和能力,并通过一个简单的需求,详细介绍了在播放列表、搜索等场景下 Apple MusicAPI 的使用过程。 + +### 🌟 [【WWDC22 10162】使用网格着色器处理几何变换](https://xiaozhuanlan.com/topic/0723561894) + +本文主要讲述 Metal 3 新推出的网格渲染管线,其中包括对象着色器(Object Shader)和网格着色器(Mesh Shader),文章分为三个部分: +- 第一部分,新旧渲染管线对比,对网格渲染管线有个初步认识 +- 第二部分,通过两个具体的例子,更深入地感受网格渲染管线 +- 第三部分,网格渲染管线的一些限制,包括着色器限制以及运行新管线的设备要求 + +### 🌟 [【WWDC22 10157/10158】SF Symbols 4 使用指南](https://xiaozhuanlan.com/topic/8712590364) + +本文基于 WWDC 2022 Session 10157 和 Session 10158 梳理。本文从 SF Symbols 4 的新特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些优点以及该如何使用。在这次 WWDC 2022 中,除了符号的数量的增加到了 4000+ 之外,还有自动渲染模式、可变符号等新特性推出,让 SF Symbols 这把利器变得又更加趁手和锋利了。 + +### 🌟 [【WWDC22 10039】Xcode StoreKit 测试的新功能](https://xiaozhuanlan.com/topic/5842093617) + +本文主要聚焦于 In-App Purchase 内购商品的测试。在 Xcode 12 之前,App 内购买项目是不能在 Xcode 模拟器中进行购买,只能使用真机进行测试内购充值,因为模拟器无法连接到 App Store 服务器进行交易。苹果在 WWDC20 推出了 StoreKit Testing,通过 Xcode 12 创建 StoreKit 配置文件和搭建本地测试环境,实现本地 App 内购买和验证收据等测试流程,而无需依赖 App Store 服务器。而今年的 WDC22 苹果对 StoreKit 测试流程改进完善,包含 Xcode 14 中测试功能的优化,支持订阅商品更多场景的测试,还有 StoreKit 配置文件通过 App Store Connect 自动同步等等。 + +### 🌟 [【WWDC22 10096】What’s new in Privacy](https://xiaozhuanlan.com/topic/9482017536) + +苹果近几年一直致力于用户隐私保护方向的构建和优化,在技术的不断更新中,同时也给开发者们带来更加复杂的的交互,但是这无疑是增加了我们每个人保护隐私的意识。今年在 UIKit 框架中优化了对用户更加友好的使用后台定位 App 提示,Safety Check、PassKey 等等,这一篇文章更多的是给我们展示了关于隐私架构相关的概况,更多原理相关内容,可以根据文中链接尽情的阅读吧!愿我们的互联网环境的隐私越来越美好。 + +### 🌟 [【WWDC22 10117】“对讲机”的体验提升](https://xiaozhuanlan.com/topic/2863915470) + +本文主要是通过分析业内 app 中“对讲机”这类产品的功能痛点,结合 Session 10117:Enhance voice communication with Push to Talk 的内容,解析了 iOS 16 在解决这些痛点时的新增技术要点,并结合这些技术升级了“对讲机”的技术方案,最后讲述了 PushToTalk.framework 的如何集成、代码上如何使用,以及开发要点。 + +### 🌟 [【WWDC22 10126】Discover ARKit 6](https://xiaozhuanlan.com/topic/2439056187) + +本文将分两部分介绍 ARKit 相关的内容,第一部分是 ARKit6 相关的特性,第二部分是对 ARKit 历史版本从跟踪、理解、渲染三个角度进行梳理和归类。内容不深,应该容易读懂,感谢品尝。 + + +## 摸鱼周报 + +[@摸鱼周报 #61](https://mp.weixin.qq.com/s/WfwqRhC-9-isUanv8ZnvMQ):第 61 期摸鱼周报来了,来看下本期概要有没有你感兴趣的内容: + +* 本期话题: Developer 设计开发加速器|探索 Create ML Components +* 本周学习:解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题 +* 内容推荐:SwiftUI 相关的几篇博文 +* 摸一下鱼:几个摸鱼网站推荐 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#211-2022.08.01.md b/Reports/2022/#211-2022.08.01.md new file mode 100644 index 000000000..c30935ae8 --- /dev/null +++ b/Reports/2022/#211-2022.08.01.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #211 | 2022-08-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight 更新:支持上传使用 Xcode 14 beta 4 打包的 App](https://developer.apple.com/news/releases/?id=07282022b) + +2022 年 7 月 29 日,TestFlight 可以上传 Xcode 14 beta 4 打包的 APP 以供开发者进行分发测试,已支持的新特性有 WeatherKit、CloudKit、PushToTalk 等,但目前 Background Assets 还未获得支持。 + +### [Live Activities 文档放出](https://developer.apple.com/documentation/activitykit/displaying-live-data-on-the-lock-screen-with-live-activities) + +今年 WWDC22 上苹果有放出 Live Activities 相关信息,Slack 上也有众多开发者咨询,但当时苹果表示还没有更多可以放出的消息。目前已放出了示例代码与 API。需要注意的是,目前苹果已确认在 iOS 16 的第一个正式版中不会包含相关功能,真正使用上还需时日。 + +## 文章 + +### 🐢 [深入浅出依赖注入及其在抖音直播中的应用](https://mp.weixin.qq.com/s/Zp-OqCVVr9CbDv1Y1zWN-w) + +[@AidenRao](https://weibo.com/AidenRao):在软件工程中,依赖注入(dependency injection)的意思为:给予调用方它所需要的事物。本文试图从原理入手,讲清楚什么是依赖,什么是反转,依赖反转与控制反转的关系又是什么?一个依赖注入框架应该具备哪些能力?抖音直播又是如何通过依赖注入优雅的实现模块间的解耦?通过对依赖注入架构优缺点的分析,能对其能有更全面的了解,为后续的架构设计工作带来更多的灵感。 + +### 🐕 [Swift 中的 JSON 反序列化](https://mp.weixin.qq.com/s/lvX4uY1dGo7k3OGmEayJpg) + +[@Smallfly](https://github.com/iostalks):JSON 反序列化是非常基础的需求,本文对比了业界的几种方案,分析了它们的不足之处。同样,Swift 4.0 之后官方 Codable 也无法满足云音乐团队灵活定制的需求,最终推出了基于 Codable 扩展的自研方案,满足如下的场景需求: + +1. 支持默认值 +2. 类型互相兼容,如 JSON 中的 int 类型可以被正确的解析为 Model 中的 String 类型 +3. 解码失败允许返回 nil ,而不是直接判定解码过程失败 +4. 支持 key 映射 +5. 支持自定义解码逻辑 + + +### 🌟 🐢 [从零开始理解 JSC 中的 GC](https://webkit.org/blog/12967/understanding-gc-in-jsc-from-scratch/) + +[@Damien](https://github.com/ZengyiMa):在 JavaScript 语言中是依靠垃圾回收 (GC) 来回收内存的,你是否会对其中的 GC 的是如何实现的感兴趣?本篇文章来自斯坦福大学博士生,作者深入的探索了在 WebKit 中是如何实现 GC 内存回收的,本文会涉及较多的底层实现和原理,给你一个独特的视角从零开始了解 WebKit 中 GC 的实现细节,对相关话题感兴趣的同学请不要错过。 + +### 🐢 LLVM New Pass Manager + +[@kemchenj](https://kemchenj.github.io/):LLVM 13 修改了默认的 PassManager,新的 PassManager 最大的改变是将 Pass 和 Analysis 拆分开。 + +更加合理的架构除了让逻辑变得更加清晰,也让性能得到了提升,Rust 编译器在迁移到新的 API 之后观测到了 5-20% 的性能提升,Swift 近日也开始[迁移到新的 API](https://github.com/apple/swift/pull/60077)。 + +如果你好奇什么样的修改可以让性能有如此大的提升,那就一定不要错过,这一系列文章详细讲解了新 API 的设计和使用方式,以及与之前 API 的对比。 + +- [LLVM Pass 其零:新的 Pass 机制](https://homura.live/2022/06/19/llvm-pass-0/) +- [LLVM Pass 其一:PassManager](https://homura.live/2022/06/26/llvm-pass-1/) +- [LLVM Pass 其二:Analysis 与 AnalysisManager](https://homura.live/2022/07/03/llvm-pass-2/) +- [LLVM Pass 其三:PassBuilder](https://homura.live/2022/07/10/llvm-pass-3/) +- [LLVM Pass 其四:PassManager 的改进与迁移现状](https://homura.live/2022/07/17/llvm-pass-4/) + +### 🐎 [AssociatedObject 源码分析:如何实现线程安全?](https://juejin.cn/post/7124943924308738061) + +[@JonyFang](https://github.com/JonyFang): 本文通过 AssociatedObject 与 Property 的对比,探究他们是如何设计线程安全的。AssociatedObject 也是老八股了,推荐想对线程安全实现了解的同学阅读。 + +### 🐕 [幸福里 C 端 iOS 编译优化实践 - 优化 40% 耗时](https://mp.weixin.qq.com/s/EQ9FXuDbtMa3RtxIAaXtig) + +[@红纸](https://github.com/nianran):本文是一篇 iOS 编译优化实践,作者从以下几个方面对工程进行优化 + +1. dolphin 分布式编译缓存:字节 app infra 团队通过 hook LLVM Clang,将编译文件和依赖哈希成唯一 key,编译结果 .o 则根据 key 存储在本地或者云端 +2. 资源优化:移动主工程的图片资源文件至 POD 仓库内,降低主工程资源的编译耗时。在 POD 仓库内则可采用 **resource_bundles** 的形式引入,来降低资源的编译耗时 +3. 链接优化:使用基于 ld64 优化的 [zld](https://github.com/michaeleisel/zld) 来编译优化项目,zld 在 ld64 的基础上增加了并发数、并且使用效率更高的数据结构 + +### 🐕 [iOS 不必现崩溃的点对点解析以及治理](https://mp.weixin.qq.com/s/tGvE-2flzhm4skkrfbUIBA) + +[@J_Knight_](https://github.com/knightsj):本文介绍了用多种工具排查崩溃的时候,如 Bugly,崩溃日志解析等遇到的各种问题以及解决方案,并将该方案以开源工具的方式分享出来,感兴趣的读者可以找到文章末尾的 github 链接查看详情。 + +## 工具 + +### [开源一款苹果 macOS 工具 - AppleParty(苹果派)](https://juejin.cn/post/7081069026515877919) + +[@红纸](https://github.com/nianran):AppleParty 是 37 手游 iOS 团队研发,实现快速操作 App Store Connect 后台的自动化 macOS 工具。当前实现了以下几个功能: + +1. 内购项目管理(批量创建和更新) +2. 批量商店图和预览视频上传和更新 +3. 数据报表批量下载 +4. 邮件发送工具 +5. 二维码扫描和生成工具 + +### [腾讯柠檬清理](https://github.com/Tencent/lemon-cleaner) + +[@EyreFree](https://github.com/EyreFree):腾讯柠檬清理是针对 macOS 系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能,对上百款软件提供定制化的清理方案,提供专业的清理建议,帮助用户轻松完成一键式清理。此仓库为官方开源的 macOS 代码,对本软件内部实现感兴趣的朋友可以自行研究。 + +## 摸鱼周报 + +[@摸鱼周报 #62](https://mp.weixin.qq.com/s/HySX4Yaf3Zxy8Wn-LyUO0A):第 62 期摸鱼周报来了,一起来看下本期概要: + +* 开发资讯:Live Activity 上线 iOS 16 Beta 4; App Store 专家会面交流; Google 发布 Carbon 语言 +* 本周学习:iOS 使用 Pod 在现有项目上集成 React Native +* 内容推荐:性能优化文件以及 WWDC22 优秀内容推荐 +* 摸一下鱼:Flowful 用程序生成氛围音乐;柠檬清理开源;网页版便携小空调带给你夏季清凉 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#212-2022.08.08.md b/Reports/2022/#212-2022.08.08.md new file mode 100644 index 000000000..4e001c341 --- /dev/null +++ b/Reports/2022/#212-2022.08.08.md @@ -0,0 +1,155 @@ +# 老司机 iOS 周报 #212 | 2022-08-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 12 篇文章,目前总共已经更新了 86 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 3 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 110352/110353】拥抱 Swift 泛型](https://xiaozhuanlan.com/topic/7651204893) + +本文主要介绍 Swift 5.7 中关于泛型新增的语言特性。通过一个示例程序与你探讨泛型的使用场景与协议的接口设计,帮助你理解 some 与 any 修饰符在泛型中的使用。 + +### 🌟 [【WWDC22 10068】UIKit 新特性](https://xiaozhuanlan.com/topic/3805624917) + +UIKit 作为 iOS 开发过程中非常核心的一个 framework,每年的更新换代都会对其做出一些升级和调整。只不过以往更多是针对单独的改动出独立的 session,没有专门出一个 session 成去体系地介绍 UIKit 里的改动。自从 WWDC 2021 开始,第一次系统地介绍了 What's new in UIKit ,主要围绕的方面包括针对生产效率提升的改动,UI 改动及 API 的改动等等。今年沿用了去年的思路,继续围绕这几个方面展开介绍。这个 session 虽然没有办法展开介绍所有的 UIKit 改动的技术细节,但它会把 UIKit 新特性里最重要的部分归纳到一起,起到提纲挈领的作用,让大家对 UIKit 的变动有一个整体的了解。文中会附有一些 session 的链接以及苹果的官方文档,方便读者了解其更进一步的改动细节。 + +### 🌟 [【WWDC22 10136/10137/110340/110342】Swift Charts 高效图表的实现与优质图表设计要素](https://xiaozhuanlan.com/topic/2164358790) + +本文将会基于各种实例和 Swift Charts API 实现从简单到复杂的图表;同时了解一些优质图表的设计体验要素;相信会对计划在桌面小组件场景应用 SwiftUI ,提供一些图表绘制的帮助和指南。 + +## 文章 + +### [Switching between SwiftUI’s HStack and VStack](https://www.swiftbysundell.com/articles/switching-between-swiftui-hstack-vstack/) + +[@zvving](https://github.com/zvving):`HStack`、`VStack` 是 SwiftUI 基础的布局工具,在涉及设备横屏竖屏切换时,我们也会期望布局在 `HStack`-`VStack` 间动态转换。 + +`GeometryReader` 看似是可行的方案之一:通过计算容器宽高来选择布局方式,但同时也会带来布局细节及(横竖屏切换时的)动画问题。本文介绍如何使用 `Size classes` 和 iOS16 引入的 `AnyLayout`、`ViewThatFits` 更好地解决类似问题。 + +### 🐎 [使用 deno_core 开发一个 JavaScript 运行时](https://mp.weixin.qq.com/s/CLYFgEKnjPufoE07wKnzdQ) + +[@Smallfly](https://github.com/iostalks):本文介绍如何创建一个自定义 JavaScript 运行时 runjs,可以把它近似为简易版的 Deno。目标是开发一个命令行程序,实现执行本地的 JavaScript 文件,可以读文件、写文件、删文件,以及一个 console API。 + +### 🐢 [tcmalloc 源码解析](https://dirtysalt.github.io/html/tcmalloc.html) + +[@xuyafei](https://github.com/xiaofei86):tcmalloc 是 Google 开发的内存分配器,在 Golang、Chrome 中都有使用该分配器进行内存分配。其有效地优化了 ptmalloc 中存在的问题,当然为此也付出了一些代价。感兴趣可以阅读原文了解 tcmalloc 的具体实现。 + +### 🌟 🐎 [可支持动态插入业务元素的混合 MP4 方案 - YYEVA](https://juejin.cn/post/7126797460189478920) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍 YYEVA 整体框架,YYEVA 是 YY 推出的一款 MP4 支持动态元素的解决方案,包括 AE 插件、在线预览工具、渲染 SDK(支持 iOS、Android、Web),文末附有 YYEVA 开源的地址。YYEVA 框架相关的一些文档介绍: + +- [第一篇:直播间礼物动效 - 实现方案](https://github.com/yylive/YYEVA/blob/main/%E7%9B%B4%E6%92%AD%E9%97%B4%E7%A4%BC%E7%89%A9%E5%8A%A8%E6%95%88%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88.md) +- [第二篇:透明 MP4 礼物](https://github.com/yylive/YYEVA/blob/main/%E9%80%8F%E6%98%8EMP4%E7%A4%BC%E7%89%A9.md) +- [第三篇:变换矩阵在动画上一些应用](https://github.com/yylive/YYEVA/blob/main/%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5%E5%9C%A8%E5%8A%A8%E7%94%BB%E4%B8%8A%E4%B8%80%E4%BA%9B%E5%BA%94%E7%94%A8.md) +- [第四篇:YYEVA , 让 MP4 静态资源也能够动态起来](https://github.com/yylive/YYEVA/blob/main/YYEVA-%E8%AE%A9MP4%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E4%B9%9F%E8%83%BD%E5%A4%9F%E5%8A%A8%E6%80%81%E8%B5%B7%E6%9D%A5.md) +- [第五篇:YYEVA 设计规范](https://github.com/yylive/YYEVA/blob/main/YYEVA%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.md) +- [第六篇:YYEVA 数据结构](https://github.com/yylive/YYEVA/blob/main/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) + +### 🐕 [一文了解字节跳动“埋点验证平台”](https://mp.weixin.qq.com/s/4SnwKSswo0LJDUg6NoaAQw) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要从宏观视角介绍了字节跳动的埋点验证平台。从多角色、多节点、多方面,全方位保证了埋点质量,值得学习。 + +介绍大致分为: +- 埋点验证流程 +- 技术架构总览 +- 产品流程总览 +- 技术挑战和结果收益 + +### 🐕 [解决 Flutter 引起的 iOS 内存崩溃问题](https://juejin.cn/post/7123765829929762847) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 目前主流版本的 Flutter 在 iOS 平台上存在内存问题,但是却不易解决,本文通过两种方案帮助读者解决问题。同时,提供了保姆级魔改 Flutter Engine 的操作流程。小编提醒⚠️ : 该方案不建议小白用户尝试。 + +### 🌟 iOS 16 UIView/UIViewController 新变化 + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):最近在适配 iOS 16 时发现了一个新的异常:``Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application circumvented Objective-C runtime dealloc initiation for object.'`` + +经过 [pudge62](https://github.com/pudge62) 研究,iOS 16 里 UIViewController 多了一个方法叫 ``_objc_initiateDealloc``,内部代码是用来保证 VC 在主线程释放的。 调用链为: +> release - > -[UIViewController _objc_initiateDealloc] -> dispatch_async(_objc_deallocOnMainThreadHelper) -> -[UIViewController dealloc] + +以前的系统也有这个机制,看起来是 iOS 16 换了实现方式。而 ``_objc_initiateDealloc`` 这个名字和异常里的 ``dealloc initiation`` 看起来关联很大。 + +具体原因:工程内有代码覆盖了 UIViewController 的 ``+initialize`` 方法,这样会导致不调用 ``_class_setCustomDeallocInitiation([UIViewController class])``,最终发生崩溃。 + +解决方案:由于系统 UIView/UIViewController 有了 ``initialize`` 方法,推荐大家不要覆盖 UIViewController 的 ``+initialize`` 方法;如果一定要覆盖 ``+initialize`` 方法,那就要想办法先调用官方的,再调用自己的 ``+initialize`` 方法(不建议这么做)。 + +> 该具体分析与解决方案由 [pudge62](https://github.com/pudge62) 提供 + +### 🐢 阿里跨端技术演进 + +[@kemchenj](https://kemchenj.github.io/):阿里巴巴的千牛团队为我们带来的跨端技术演进分享,这个系列总共三篇文章: + +- [跨全端 SDK 技术演进](https://mp.weixin.qq.com/s/NMsZWEzP3oE-KexRQMesmQ):伴随业界跨平台技术发展与演进,千牛团队也沉淀了一整套基于 C++ 的跨平台技术体系,本文将以消息 SDK 为例,详述这一技术演进历程。 +- [跨桌面端 Web 容器演进](https://mp.weixin.qq.com/s/cAPAHzlChV-TjbAIj4YQ_Q):从容器的架构演进,容器的功能增强和稳定性保障及未来的演进,这 3 个方面介绍一下千牛的应用程序如何对接浏览器的能力。 +- [跨桌面端之组件化实践](https://mp.weixin.qq.com/s/t7apHNc9ZHF__dab1KKwIQ):主要介绍了千牛 PC 跨端框架中,关于组件化部分的思考、方案选择、遇到的一些问题和解法。 + +### [iOS 16 Live Activity](https://mp.weixin.qq.com/s/aKD-WBYHsepg96zOC378cg) + +[@享耳先森](https://github.com/iblacksun):WWDC22 Keynote 中介绍了 iOS 16 中一个比较亮眼的更新:Live Activity,开发者可以在锁屏页面上放置一个可以「实时」更新的 Widget,比如外卖或者打车应用,开启 Live Activity 后在锁屏页上实时看到 外卖小哥/司机 与我们的距离及预计到达时间。 + +这一 API 及对应功能终于在 iOS 16 Beta4 一起放出,但 Apple 明确不会随正式版的 iOS 16.0 一起发布,而是在今年晚些时候释出,具体时间没有给。 + +本文介绍了 iOS 16 Live Activity 的适配及注意事项,也分享了下开发 / 使用体验,文章最后也提供了一个 Demo 供大家参考,可以与[Experimenting with Live Activities](https://oleb.net/2022/live-activity/) 关联阅读。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10058 & 110343】SwiftUI on iPad](https://xiaozhuanlan.com/topic/3145670289) + +本文基于 10058 和 110343 两个 Session 的内容梳理,以官方 Places App 为范例,介绍了 SwiftUI 在 iPadOS 16 上的新特性。 + +### 🌟 [【WWDC22 10142】 通过并发编程更优雅的管理后台任务](https://xiaozhuanlan.com/topic/4708519362) + +这篇 session 结合场景和案例,基于 SwiftUI 和 Swift 并发特性来讲解如何以更好的方式来管理异步的后台任务执行流程,并介绍了 URLSession 的后台模式,以更贴合实际的方式来解释后台任务的原理和规则。 + +### 🌟 [【WWDC22 10066/10101/10104】 探索 Metal3](https://xiaozhuanlan.com/topic/9276153048) + +Metal 是 Apple 的高效低销图形计算 API 。它旨在以最快、最高效的方式驱动 Apple 产品背后强大的 GPU。本文介绍了 Metal 3 强大的新功能,包括快速加载资源、离线编译、MetalFX、Mesh Shaders、光线追踪管道、机器学习支持等内容。 + +### 🌟 [【WWDC22 10079】提高应用程序和服务器的 DNS 安全性](https://xiaozhuanlan.com/topic/4802516793) + +本文旨在探索如何确保 DNS 在应用程序中安全使用的最新方法。首先介绍了为什么 DNS 是不安全的,以及如何通过 DNSSEC 和使用 DDR 加密的 DNS 来保护他的安全性。 + +### 🌟 [【WWDC22 10032】使用新框架实现 Shortcuts](https://xiaozhuanlan.com/topic/7083456912) + +使用新框架 AppIntents 来为 App 扩展功能,以支持 Siri 和 Shortcuts app。 + +### 🌟 [【WWDC22 110367】使用 Concept 简化 C++ 模版](https://xiaozhuanlan.com/topic/6302984517) + +本 session 主要介绍了 Xcode14 上新支持的 C++20 中比较有代表性的新特性 concept,并从实际例子出发,使用 concept 对 C++ 的模版代码进行简化,最后还介绍了用于编译时计算的 constexpr 特性。 + +### 🌟 [【WWDC22 10016】使用 CarPlay 扩展你的 App](https://xiaozhuanlan.com/topic/5913846702) + +本文主要是介绍了 iOS 16 中 Carplay 的新特性,包括四个部分:第一部分是对 Carplay 的 UI 渲染方式-模板的讲解。第二部分介绍了新增的两种应用类型以及对应的一些应用。第三部分是讲解了新增的一种 Caplay 测试方式的使用讲解。最后则是介绍了 Carplay 如何和汽车的仪表盘联动。 + +### 🌟 [【WWDC22 10128】利用现实物体搭建 AR 场景](https://xiaozhuanlan.com/topic/5789132064) + +从你手边的现实物体(以及脑海中关于 AR 的 idea),到一个有趣的 AR App,需要经历什么过程?这个 session 也许能给出答案。本文对 Object Capture 进行了回顾,介绍了 ARKit 相机增强可与其结合使用的新 API,并以一个 AR 象棋游戏作为例子,展示了从获取现实物体的 3D 模型到构建 AR 应用的基本工作流。 + + +## 摸鱼周报 + +[@摸鱼周报 #63](https://mp.weixin.qq.com/s/nAMshUG4AjWLAAHOFPVqXg):第 63 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 企业家培训营已开放申请 +* 本周学习:Swift 当中的 Sequence +* 内容推荐:WWDC22 & SwiftUI 好文推荐 +* 摸一下鱼:React 实现的 Win11 在线体验,模拟 Windows 和 x86 系统的网站 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#213-2022.08.15.md b/Reports/2022/#213-2022.08.15.md new file mode 100644 index 000000000..9e105fa23 --- /dev/null +++ b/Reports/2022/#213-2022.08.15.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #213 | 2022-08-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 How To Boost Your iOS Code Performance:[Reduce Searching In Array](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-reduce-searching-an-array-55fbdfee2050) / [Reducing Collection Type Initialisation](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-by-reducing-collection-type-initialisation-564bffee94a3) + +[@Smallfly](https://github.com/iostalks):这两篇文章介绍了一些提高编码性能的小技巧。在遍历数组时,要警惕多层循环,多思考是否可以利用 Set/Dictionary 降低复杂度。在循环体内尽量避免创建集合类型,特别需要关注值类型的 Copy-on-write。 + +### 🐕 [货拉拉 iOS 司机端线程治理总结](https://juejin.cn/post/7129391597967376415) + +[@AidenRao](https://weibo.com/AidenRao):文章主要介绍了货拉拉 iOS 司机端,在线程治理方面的实践。如:队列的管理和分配,高并发业务的梳理和重构,线程使用的合理性评估与改造,线程相关 crash 的排查和修复,长效机制的建立。 + +### 🐎 [Content transition in SwiftUI](https://swiftwithmajid.com/2022/08/02/content-transition-in-swiftui/) + +[@Damien](https://github.com/ZengyiMa):SwiftUI 框架从第一个版本就提供了视图转换功能。每当视图被移除或添加时,可以使用特定的动画来进行呈现。但是在视图内容发生变化时,SwiftUI 框架无法应用动画转换效果, SwiftUI 框架在最新迭代中为我们带来了内容转换的新特性。它允许我们在视图内容发生变化时应用特定的过渡动画,具体怎么做呢?对 SwiftUI 感兴趣的同学不妨一读。 + +### 🐢 [Shared with You implementation and testing explained](https://www.avanderlee.com/swift/shared-with-you/) + +[@享耳先森](https://github.com/iblacksun):WWDC 22 中苹果将原来仅 Apple 可用的 `Shared with you` 开放给所有开发者,本文详解了其工作机制和适配方式。 + +### 🐎 [Advances in Swift Package Manager's dependency access control](https://www.polpiella.dev/advances-in-swift-package-access-control/) + +[@张嘉夫](https://github.com/josephchang10):在最新的 Swift 5.7 development snapshot 中 `swift` 可执行文件新增了一个叫做 `--explicit-target-dependency-import-check` 的 flag,改进了 SPM 的依赖系统,允许开发者启用或禁用一个新的构建验证步骤,以检测未在 target 的依赖列表中明确定义的 import 语句,并相应触发 warning 或 error。作者在这篇文章中实际测试了这个新的 flag。 + +### 🐎 [MachO 代码签名剖析](https://juejin.cn/post/7017842746937311246) + +[@kemchenj](https://juejin.cn/post/7017842746937311246):验证代码的正确性是计算机科学中最难的问题之一,因为不存在普遍意义的正确的算法,所以这一验证通常使用数字签名处理。大家可以通过阅读本文思考代码来源是否合法和代码是否被修改过的验证是如何实现的。 + +### 🐎 [RTC 场景下的屏幕共享优化实践](https://mp.weixin.qq.com/s/tyD_y0xhCMEJg0tfTelHfA) + +[@邦Ben](https://weibo.com/linwenbang):该文章和 iOS 其实并没有直接关系,主要说在飞书上共享屏幕的情况下,如果进行一个策略的优化。通过算法进行识别当前屏幕的内容,然后进行分析自动切换到不同的模式。 + +1. 清晰模式:主打清晰度,尽量保持高分辨率(如:最高 4K 原画质),带宽或性能不足的时候,只降低帧率(如:从 30fps -> 5fps),不降低分辨率。 + +2. 流畅模式:主打流畅度,尽量提升帧率(如:最高 30fps),带宽或性能不足的时候,优先降低分辨率(如:从 4K -> 720p),最后才考虑降帧率。 + +手动切换是个基本的选择,但是通过自动化更佳。识别算法主要是:光流法,决策树,颜色直方图,方向统计。文章大体做了一些介绍,但是也比较属于入门概念介绍,有兴趣的同学可以了解一下。 + + +## 工具 + +### 🐕 [Device List | AppleDB](https://appledb.dev/device-list.html) + +[@Barney](https://github.com/BarneyZhaoooo):**Device List** 可以方便地查询 Model、Name、Board、Soc 之间的对应关系。 + +## 摸鱼周报 + +[@摸鱼周报 #64](https://mp.weixin.qq.com/s/Bd9MZDqmvmgp1UTr5WKPig):第 64 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:今年 8 月,把握与 App Store 专家会面交流的机会 +* 本周学习:Swift 闭包中的变量捕获 +* 内容推荐:程序开发文档及资源网站 +* 摸一下鱼:一款体感识别空气投篮模拟器 App;To-D 杂志 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#214-2022.08.22.md b/Reports/2022/#214-2022.08.22.md new file mode 100644 index 000000000..bfb687c4d --- /dev/null +++ b/Reports/2022/#214-2022.08.22.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #214 | 2022-08-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [iOS 中的字节对齐](https://juejin.cn/post/7132403137725333518) + +[@Smallfly](https://github.com/iostalks):字节对齐是 C 语言中的概念,Objective-C 作为 C 语言的超集,iOS 开发者也需要对字节对齐有所了解。本文给出了一些字节对齐的建议,以及字节对齐的相关介绍: + +- 什么是字节对齐 +- 为什么要字节对齐 +- 字节不对齐的风险 +- 字节对齐对编程的启示 +- Objective-C 字节对齐实现 + +### 🐕 [iOS 底层原理 39:Instruments 系列(三)Animation Hitches](https://mp.weixin.qq.com/s/fTmgN5phGQtbQOUHZ7Pe3Q) + +[@Leo](https://github.com/leomobiledeveloper):由于高刷屏和动态帧率的设备出现,用 FPS 来衡量界面的流畅性已经不那么准确了,所以 Apple 提出了 Animation Hitche 这个概念来衡量滑动期间的掉帧情况。本文详细讲解了界面渲染的阶段和原理,并且涵盖了不同阶段引起 Hitche 的原因和解决办法,对流畅性优化有非常好的参考意义。 + +### 🐢 [网络通信 | HTTP(S) 那些事儿](https://mp.weixin.qq.com/s/YtyrIl8UWK43iYfjN4HUyQ) + +[@AidenRao](https://weibo.com/AidenRao):HTTP 在整个互联网是非常常见的,比如我们看剧、刷短视频、面向 Google 编程,都会用到它。作为研发,我们有义务深入了解它的结构、规范和设计思路。看完本文你将能够: + +1. 🔍 快速定位 HTTP 问题; +2. 🥣 熟悉 HTTP 报文里的常见头字段; +3. 🔐了解基本的加密知识。 + +最终拥有通过 WireShark、Chrome、Telnet 等工具,甚至 RFC 文档去自行深入学习 HTTP 的能力。 + +### 🐕 [iOS 16 NSURLComponents 行为变更] + +[@极速男孩](https://github.com/ztlyyznf001):在 HTTPURL 的 [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) 规范中规定,URL 中只允许包含以下四种: +1. 英文字母 +2. 数字 +3. ``-_.~`` 4 个特殊字符 +4. 所有保留字符,包括 ! * ’ ( ) ; : @ & = + $ , / ? # [ ] + +并且要求在使用特殊字符的时候将特殊字符转换成相应十六进制。 +所以在 iOS16 中如果你使用 +```[NSURLComponents componentsWithString:]``` +或者 +```[NSURLComponents componentsWithURL:resolvingAgainstBaseURL]``` +的方法去构建一个不符合 RFC3986 规范的 URL(常见的比如 URL 中包含 - 或者 _ )时会直接返回一个 nil。 + +### 🐕 [Flutter 状态管理新的实践](https://mp.weixin.qq.com/s/oNjRt2qGHetEXLtkDPU63A) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 声明式 UI 其实并不是近几年的新技术,但是近几年声明式 UI 框架非常的火热。单说移动端,跨平台方案有:RN、Flutter。iOS 原生有:SwiftUI。android 原生有:compose。Flutter 平台上就有多种方案,BLoc,Provider,RivePod,GetX 等。本文从函数编程方向做新尝试,是一份不错的学习资料。小编建议,对于 Rx 系列框架不熟悉的,不要轻易放到生产环境中 . + + +## 工具 + +### 🐎 [Xcode console 替代方案 - ConsoleRedirect](https://github.com/luoqisheng/ConsoleRedirect) + +[@水水](https://www.xuyanlan.com): ConsoleRedirect 是一款通过 redirect App 的 stderr 和 stdoutput 将 Xcode 的输出实时同步写到 macosx 下指定目录的工具。配合 klogg 等日志查看工具,可以实时查看、过滤、查找、高亮 Xcode 的控制台输出。用于代替功能比较单薄的 Xcode 控制台输出,操作比较简单,有需要的朋友可以一试。 + +### [Pulse 2.0 released](https://kean.blog/post/pulse-2) + +[@kemchenj](https://kemchenj.github.io):Pulse 是一个 Apple 平台的开源日志框架,不止提供了 AppKit/UIKit 集成,也提供了可视化的工具 App 查看日志。最近推出了 2.0 版本,进行了大量重写,包括了: + +- 新增 macOS/watchOS/tvOS 的日志查看工具,使用 SwiftUI 实现。 +- 性能提升: + - 日志存储空间减少 90%。使用苹果提供的 lzfse 进行压缩,并且使用 SHA1 替代之前的 SHA256。 + - 日志的预览图改为小尺寸的缩略图,并且使用 HEIF 编码,以 Demo 为例减少了 99% 的存储占用。 + - 文档格式优化。允许控制分享的时间范围,并且使用 lzfse 替代 ZIPFoundation,可以减少分享的文件大小。 +- 文档重写,使用 DocC 进行生成。 + +## 摸鱼周报 + +[@摸鱼周报 #65](https://mp.weixin.qq.com/s/lvMHf5qQHpnDGLz1KY-2dg):第 65 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:App Accelerator 分享会 & 什么是精准测试 +* 本周学习:iOS Memory 内存概念 +* 内容推荐:Swift 内容推荐 & Github 实用技巧 +* 摸一下鱼:两款动态图片生成器,iOS 16 Beta 6 和 iPhone 14 发布日期确认,系统设计课程以及 Go 语言教程,IAP 服务端通知状态码变化流程。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#215-2022.08.29.md b/Reports/2022/#215-2022.08.29.md new file mode 100644 index 000000000..41b1286bb --- /dev/null +++ b/Reports/2022/#215-2022.08.29.md @@ -0,0 +1,124 @@ +# 老司机 iOS 周报 #215 | 2022-08-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [以小窥大:IO 卡顿探寻苹果文件系统](https://mp.weixin.qq.com/s/_bdY3hvd8VBEAfgxmMVf_A) + +[@JonyFang](https://github.com/JonyFang):从一个用户反馈的不寻常的 I/O 卡顿入手,发现苹果 APFS 的一个严重 bug。结合问题场景分析问题,结合数据分析结果,发现苹果的文件操作存在的坑,并给出了相应建议。在日常缓存设计中,也需要留意相应的这些点。 + +分析问题 +- 寻找关键堆栈 +- 构造必现代码 +- dtrace 分析 +- Hopper 分析 +- 对比 HFS+ + +结合已有数据分析,发现苹果的文件操作里存在的坑: +- tmp 在极端情况下可能会存在 >90G 的占用; +- WebKit 随机 + 群众的方式删除网络缓存极端情况下的问题; +- NSURLCache 在 diskCapacity 设置过大时存在的问题; +- 密集删除文件导致 I/O 性能下降过快的问题; + +为了避免上述这些极端情况下会导致的 I/O 性能骤降,移动端 APP 也需要合理的设计存储结构。如需要分层管理文件,尽量不将单个文件夹或单个文件搞得过大,同时也需要定时清理临时缓存目录,来进一步优化存储空间占用和优化 I/O 效率。 + + +### 🌟 🐎 [不改一行业务代码,飞书 iOS 低端机启动优化实践](https://mp.weixin.qq.com/s/KQJ5QXHdhwHRN65KdD45qA) + +[@Leo](https://github.com/leomobiledeveloper):在性能优化中,并发是一个常见的手段。但 CPU 核数是有限的,意味着同时能执行的线程数量也是固定的,不合理的并发一方面会带来线程频繁切换的开销,另一方面也会引起一些意料之外的抢占,导致主线程得不到执行。本文结合 Lark 在低端机上的实践,详细地讲解了线程 QoS 优化的原理,对性能优化很有参考意义。 + +### 🐕 [在 SwiftUI 中用 Text 实现图文混排](https://www.fatbobman.com/posts/mixing_text_and_graphics_with_Text_in_SwiftUI/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI 提供了强大的布局能力,不过这些布局操作都是在视图之间进行的。当我们想在 Text 中进行图文混排时,需要采用与视图布局不同的思路与操作方式。本文首先介绍一些与 Text 有关的知识,并通过一个实际案例,为大家梳理出在 SwiftUI 中用 Text 实现图文混排的思路。 + +### 🐎 [响应式编程的复杂度和简化](https://mp.weixin.qq.com/s/7jUGbSmR87FkTRqsm20NFQ) + +[@Smallfly](https://github.com/iostalks):响应式编程思维能够降低异步编程出错的概率,但我们要把它和响应式框架区分开。本文从响应式编程的概念出发,通过具体的代码案例,分析了响应式编程实现的复杂度。最后介绍如何使用 Rx/Combine 和 AsyncSequence 框架对响应式编程代码进行简化,并对这两种实现方式作出了对比。 + +### 🐕 [基于汇编实现 objc_msgSend hook 方法耗时的方案](https://juejin.cn/post/7134877291716280328) + +[@kemchenj](https://kemchenj.github.io/):测算函数 / 方法执行耗时,对于每一位开发同学来说,似乎都是一道绕不过的坎。 + +本文通过引入货拉拉移动端研发过程中的痛点,产生方法耗时分析的需求,在调研业内各种分析工具和方案后,结合需求整合出他们的方案,感兴趣的同学可以点击前往阅读。 + +### 🐢 [【译】本地优先软件 Local-first software](https://www.zxch3n.com/local-first/) + +为了追求更好的工具,我们将许多应用程序转移到云端。然而,在云中,数据的所有权属于服务器,而不是用户,因此我们成了自己数据的借用者。在云应用中创建的文件注定会在这些服务的创建者不再维护它们时消失,云服务是无法长期保存的。 + +在这篇文章中,我们为未来的软件探索了一条新的发展道路。我们展示了用户有可能保留对其数据的所有权和控制权,同时也受益于云相关的功能:无缝协作和从任何地方访问。鱼和熊掌可以兼得。 + +### 🐎 [Implementing Parts of the Swift Compiler in Swift](https://forums.swift.org/t/implementing-parts-of-the-swift-compiler-in-swift/59524) + +[@张嘉夫](https://github.com/josephchang10):在过去几年中,Swift 编译器的一些组件已经开始用 Swift 实现,包括新的 [Swift Driver](https://github.com/apple/swift-driver)(用于协调 Swift 编译)、[正则表达式字面值](https://github.com/apple/swift-experimental-string-processing/) 的解析、一些新的 [SIL 优化](https://github.com/apple/swift/tree/main/SwiftCompilerSources/Sources/Optimizer) 通道等。但因为某些原因,这些组件都是非必要的。 + +作者在这篇帖子中提议,开始要求现有的 Swift 编译器能够构建 Swift 编译器,以开启用 Swift 实现编译器中必要部分的大门,同时又避免让开发 Swift 编译器或移植到其他架构变得过于复杂。作者随后还列出了对编译器中用 Swift 实现的必要部分的要求,以及它们的用例,同时还提出了包含 Swift 代码的 Swift 编译器的具体构建流程,以及持续集成等。 + +### 🐕 [抖音平台多产物代码隔离技术的实践与探索](https://mp.weixin.qq.com/s/fjeF3LLoGsPIQN4D3el67g) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了利用适配器模式进行代码隔离的整体架构思路和框架的实现思想。 + +介绍大致分为: +- 设计思想 +- 进阶图纸 +- 工程视角 +- 实战脚手架 + +### 🐕 [深入解析 Flutter 下一代渲染引擎 Impeller](https://mp.weixin.qq.com/s/GptJbPXPediNRc4KvZzr6g) + +[@xuyafei](https://github.com/xiaofei86):2022 年 6 月在 Flutter 3.0 版本中 Google 官方正式将渲染器 Impeller 从独立仓库中合入 Flutter Engine 主干进行迭代,这是 2021 年 Flutter 团队推动重新实现 Flutter 渲染后端以来,首次正式明确了 Impeller 未来代替 Skia 作为 Flutter 主渲染方案的定位。 + +在这篇文章中,我们尝试从 Metal 着色器编译方案,矢量渲染器原理和 Flutter Engine 渲染层的接口设计三个维度去探究 Impeller 想要解决的问题和渲染器背后的相关技术。 + +* Impeller 项目启动背景 +* Metal Shader Compilation 演进 +* 矢量渲染基础概念 +* Flutter DisplayList +* Impeller 渲染流程和架构设计 + +## 工具 + +### 🐎 [flutter_impression - Flutter 曝光事件检测工具](https://github.com/623637646/flutter_impression) + +[@水水](https://www.xuyanlan.com):此工具可以方便的检测 Flutter Widget 的曝光事件,目前 Flutter 还没有其他相关的开源工具。 +使用起来也很简洁: +``` +ImpressionDetector( + impressedCallback: () { + debugPrint('impressed'); // 此处可以实现曝光时你要做的任务,比如:埋点等 + }, + child: MyWidget(), +) +``` + +### 🐎 [ZReviewTender](https://github.com/ZhgChgLi/ZReviewTender) + +[@老峰](https://github.com/gesantung):ZReviewTender 是基于 Ruby 免费开源的 App Reviews 监控机器人工具,可自动监控 App Store iOS/macOS App 与 Google Play App 的使用者最新评论信息,其中 iOS 使用全新的 App Store Connect API 取得评价列表稳定可靠,可使用 Github Repo & Gtihub Action 免费部署。 + +## 摸鱼周报 + +[@摸鱼周报 #66](https://mp.weixin.qq.com/s/LP1qNAgjzEiDwrR7I32kuA):第 66 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Shazam 迎来问世 20 周年 +* 本周学习:将 NSImage 转换为 PNG 的方法;在 macOS 中找到以前最前沿的应用程序 +* 内容推荐:iOS 基础应用和优化内容推荐 +* 摸一下鱼:微软开源表情符大全,软件快捷键速查资源,以及可以制作猫咪插画的网站资源 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#216-2022.09.05.md b/Reports/2022/#216-2022.09.05.md new file mode 100644 index 000000000..cd669cb54 --- /dev/null +++ b/Reports/2022/#216-2022.09.05.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #216 | 2022-09-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 3.3 正式发布](https://mp.weixin.qq.com/s/-AYFnatRYNARGTxhzSY9Lg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 3.3 发布了 🎉🎉🎉,这是一个比较常规的版本,主要是新功能和优化: + +- 框架更新 + - 全局选择 + - 触控板操作 + - 随手写功能 + - 文本输入 +- Material Design 3 支持 +- 桌面端平台 + - Windows 桌面应用的版本可以通过 pubspec.yaml 和构建参数进行设置 +- 开发体验 + - VS Code 插件增强 + - Flutter 开发者工具更新 +- 性能及稳定性 + - Raster 缓存改善 + - 禁用 iOS 内存指针压缩 +- API 改进 + - FragmentProgram 更新 + - PlatformDispatcher.onError 改进 + - 布局小数处理 + - 停止支持 iOS 32 位设备 + - 停止支持 BitCode 😄 + +除此之外,小编偷偷地告诉各位一句:Skia 被抛弃了,Flutter 3.3 开始使用新的绘制引擎:Impeller. + +相关阅读: +- [Whats new in Flutter 3.3](https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff) +- [Announcing Flutter 3.3 at Flutter Vikings](https://medium.com/flutter/announcing-flutter-3-3-at-flutter-vikings-6f213e068793) +- [Flutter 3.3 中文解析](https://mp.weixin.qq.com/s/-AYFnatRYNARGTxhzSY9Lg) +- [Dart 2.18](https://medium.com/dartlang/dart-2-18-f4b3101f146c) + +## 文章 + +### 🐕 [How to improve iOS build times with modularization](https://www.runway.team/blog/how-to-improve-ios-build-times-with-modularization) + +[@享耳先森](https://github.com/iblacksun):随着业务的迭代,项目代码的复杂度越来越高,如果不能很好地架构我们的应用,将严重拖慢编译速度,从而影响开发体验。本文介绍「模块化」的方式(很多大厂也是这么做的),利用模块间的横向依赖(而不是垂直依赖)来解决这一问题。 + +### 🐎 [Moving “ The Swift Programming Language ” book to open source](https://forums.swift.org/t/moving-the-swift-programming-language-book-to-open-source/59989) + +[@Smallfly](https://github.com/iostalks):Swift-DocC 是苹果在 2021 年推出的文档编译器,它能通过编译源码中的注释来生成文档。近期苹果将 Swift 官方文档源码在 Github 开源,宣称未来会基于这个仓库使用 Swift-DocC 来构建文档。苹果期望和开源社区一起来完善 Swift-DocC,并期待开发者能为官方文档作贡献。 + +想了解更多关于 Swift-DocC 的内容,请参考内参文章[【 WWDC22 110368/110369 】 Swift-DocC 新特性](https://xiaozhuanlan.com/topic/3658492071)。 + +### 🐎 [云音乐 iOS 端网络图片下载优化实践](https://mp.weixin.qq.com/s/R1XLp9hjHDBdYcOI6w8psw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了网易云音乐团队的图片下载优化方案:通过拼接参数,在远端进行裁剪,质量压缩从而下载到不同的图片。具体的做法是将 SDWebImage 里的 SDWebImageManager 和 SDImageCache 进行改造,作者附上了代码和流程图分享了具体的改造方案。团队自测该方案将图片的下载速度提升了 50%,同时日均节约 至少 10% 的 CDN 的带宽。 + +### 🐎 [Clang Module 内部实现原理及源码分析](https://mp.weixin.qq.com/s/fm_Wxrs9o6V53jtGdp3v9w) + +[@Damien](https://github.com/ZengyiMa):本文来自阿里的钉钉团队,钉钉团队在支持 Swift 和适配 Clang Module 的过程中,遇到了各种各样的编译问题,由此作为切入点,从编译提供的参数出发,一步步深入挖掘了 Clang Module 内部的实现原理。 + +### 🐕 [How do we use SwiftUI in the Medium iOS application](https://medium.engineering/how-do-we-use-swiftui-in-the-medium-ios-application-8f7bd95416ce) + +[@JimQ](https://github.com/waz0820):随着 SwiftUI 近四年的迭代,尤其是本月即将迎来的 4.0 正式版,似乎预示着 SwiftUI 已经可堪大用。本文深入介绍了 Medium iOS 客户端中不断增长的 SwiftUI 的使用情况,其中一些常见场景的模式和用法以及遇到的问题和妥协,对我们把 SwiftUI “用起来”有很好的参考价值。 + +### 🚧 🐕 [Stop Xcode 14 beta from draining your battery](https://blog.nihongo-app.com/stop-xcode-14-beta-from-pegging-cpu/) + +[@水水](https://xuyanlan.com):Xcode14 betas 4~6 中有一个错误,当运行 iOS 16 iPhone 模拟器时,会导致 Postboard 进程中的崩溃循环,使得 CPU 使用率飙升,电池消耗非常快。在苹果解决这个问题之前,文章提供了一个解决办法。并且发现了一个不需要下载旧模拟器的解决方案。 + + +## 摸鱼周报 + +[@摸鱼周报 #67](https://mp.weixin.qq.com/s/8H7YnrVTubKvVnYJBXcF_A):大家好,第 67 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:WWDC22 视频现已提供简体中文字幕;现已推出 Xcode Cloud 订阅 +* 本周学习:移动网络的优化方向;DNS 解析的相关问题 +* 内容推荐:SwiftUI 相关的一些文章推荐 +* 摸一下鱼:Superhuman 3D 捏人;Swifty Compiler 是一个可以在 iPhone/iPad 上编写和运行 Swift 代码的 app;一款命令行版本的电脑状态管理器 iStats;一款极客范儿的浏览器主题 YuIndex。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#217-2022.09.19.md b/Reports/2022/#217-2022.09.19.md new file mode 100644 index 000000000..122dbd806 --- /dev/null +++ b/Reports/2022/#217-2022.09.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #217 | 2022-09-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [字节跳动 DanceCC 工具链系列之 Xcode LLDB 耗时监控统计方案](https://mp.weixin.qq.com/s/4DgbZosBit-kTVhYMwRlHw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 [字节跳动 DanceCC 工具链系列之 Swift 调试性能的优化方案](https://blog.csdn.net/YZcoder/article/details/124684083) 一文中,介绍了如何使用自定义的工具链,来针对性优化调试器的性能,解决大型 Swift 项目的调试痛点。为了精确测量经过优化后的 LLDB 调试 Xcode 项目效率提升效果,衡量项目收益,需要开发一套能够同时获取 Xcode 官方工具链与 DanceCC 工具链调试耗时的耗时监控方案。本文详述了 DanceCC 提出了一套专门的方案,方案原理基于 LLDB Plugin,利用 Fishhook,从 LLDB 的 Script Bridge API 层面拦截 Xcode 对 LLDB 调用,以此来进行耗时监控统计。 + +### 🐢 [这一年,我对终端组织与技术架构的思考【专家讲技术】](https://mp.weixin.qq.com/s/BGGsuYrlojMfTqfTo71VZg) + +[@莲叔](http://aaaron7.github.io/):闲鱼是国内较早进行 Flutter 业务尝试,也是较早的全面拥抱 Flutter 的 App。本篇文章里,闲鱼的技术负责人宗心分享了他对于移动开发行业从软件架构和组织形式两个视角的变迁,之后提出了未来可能的一种岗位分工:应用研发工程师和基础设施开发工程师,并且发布了闲鱼围绕这样的岗位分工开发的一套基于 Flutter 的 UI 开发渲染引擎 KUN。移动开发到如今已经发展的超过十年的时间,研发团队相比最开的 iOS/Android 开发已经演化出了更复杂的形式,这篇文章是对这些趋势一个比较不错的归纳,对自己技术栈觉得迷茫的同学也可以看看。 + +### 🐎 [基于 React Native 的动态列表方案探索](https://mp.weixin.qq.com/s/5Oa45FN3SECveu6_N89k2A) + +[@Damien](https://github.com/ZengyiMa):动态渲染框架大家一定不陌生,比如阿里的 DinamicX、Tangram 大家应该都很熟悉了,基于 DSL 的动态化方案虽然有性能上的一些优势,但是毕竟不是图灵完备的,一些需要逻辑动态下发的需求实现成本偏高,网易云音乐团队带来了他们的最佳实践,基于 React Native 的动态列表方案。简单来说就是将 ReactNative 容器内嵌在 RecyclerView 的 ViewHolder 中,页面主体框架还是由 Native 开发和渲染,首屏加载速度得到了保证,局部的 RN 实现也使页面获得动态化的能力。有兴趣的同学不妨一读。 + +### 🐢 [终极 C++ 避坑指南](https://mp.weixin.qq.com/s/Isr5-FojMTRK36g-Gh2_yQ) + +[@xuyafei](http://github.com/xiaofei86):C++ 是一门古老的语言,但仍然在不间断更新中,不断引用新特性。但与此同时 C++ 又甩不掉巨大的历史包袱,并且 C++ 的设计初衷和理念造成了 C++ 异常复杂,还出现了很多不合理的“缺陷”。本文主要有 3 个目的: +1. 总结一些 C++ 晦涩难懂的语法现象,解释其背后原因,作为防踩坑之用 +2. 和一些其他的编程语言进行比较,列举它们的优劣 +3. 发表一些我自己作为 C++ 程序员的看法和感受 + +### 🐢 [如何判断 ScrollView、List 是否正在滚动中](https://juejin.cn/post/7143002835192381471#heading-0) + +[@老峰](http://github.com/gesantung):SwiftUI 并没有提供这方面的 API 。本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。 +1. Introspect:通过访问其背后 Delegate 的 UIKit 控件;优点准确、及时、系统负担小;缺点向后兼容性差。 +2. Runloop:创建绑定于不同 Runloop 模式下的 TimerPublisher ,实现对滚动状态的判断;优点简单、准确、及时;缺点只支持 iOS,屏幕中只能有一个可滚动控件。 +3. PreferenceKey:子视图可以通过 preference 视图修饰器向其祖先视图传递信息;优点支持多平台,前后兼容;缺点需要为可滚动容器的子视图添加修饰器,判断的准确度没有前两种方式高。 + +另外作者针对以上方案写了 [IsScrolling](https://github.com/fatbobman/IsScrolling) 开源库,有需要的同学可以参考。 + +### 🐢 [你真的懂 iOS 的异常捕获吗?](https://juejin.cn/post/7142656591139962888#heading-16) + +[@邦Ben](https://weibo.com/linwenbang):我们的开发中一定会接触到异常捕获,本文作者从操作系统层面进行分析。在触发异常的时候,会让应用从用户态切换到内核态进行处理。文章中介绍到,异常分成两类:1. 硬件异常,2. 软件异常。触发了异常,一条包含异常信息的 Mach Message 会通过 Match Exception 机制进行传递到注册的端口,从而被处理。Mach Exception 如果没有在 tread 和 task 中得到处理,那么会转成成 Unix Signal 信号。所以需要做的就是捕获 Mach Exception 以及 Unix Singal,具体的代码,文章中进行了讲述。想详细了解的,具体看一下文章,同时可以去参考一些开源的 CrashReport 库。 + +### 🐕 [Clip control on the Apple GPU](https://rosenzweig.io/blog/asahi-gpu-part-6.html) + +[@AidenRao](https://weibo.com/AidenRao):Apple 最新的 Mac 系列包括他们内部的 "M1 " 系统芯片,具有一个定制的 GPU,既没有公共文档也没有开源驱动程序。苹果为 App Store 开发者提供的 Metal 只具备有限的 API,缺乏对 OpenGL 功能的支持。文章作者提供了多种解决方案,去支持 OpenGL 的 clip control,最终实现在 Mac OS 上运行游戏 [Neverball](https://neverball.org/)。 + +### 🐕 [特效侧用户体验优化实战 -- 包体积篇](https://mp.weixin.qq.com/s/3ZrRW0iRSBjqs0ix4FWzZA) + +[@JonyFang](https://github.com/JonyFang):在了解了特效基础的包体积组成,可以针对性的对编译选项、代码进行调整,以优化包体积。同时介绍了包体积监控工具,输出每个需求带来的包体积增长大小、包体积增长原因,及时给出包体积告警、定位异常增量 case,减缓包体积增长,推动业务优化。 + +### 🐕 [What's the "any" keyword? Understanding Type Erasure in Swift](https://swiftrocks.com/whats-any-understanding-type-erasure-in-swift) + +[@享耳先森](https://github.com/iblacksun):Swift 的强类型是程序健壮性的基石。但在过去,有些特殊场景下强类型给开发者带来一些不必要的规避工作,Swift 5.7 引入的 `any` 关键词很好的解决了这一问题。本文解释类型擦除的概念,以及过去是如何做的?有 `any` 后有什么不同?建议结合 [Existential any in Swift explained with code examples](https://www.avanderlee.com/swift/existential-any/) 一起阅读。 + +### 🐕 [iPhone 14 Screen Sizes](https://useyourloaf.com/blog/iphone-14-screen-sizes/) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了 2022 年 iPhone 14 屏幕尺寸变化的回顾,并配有简单易懂的样例图,一目了然。 + +## 工具 + +### [Regex101, 正则调试在线工具](https://regex101.com) +[@anotheren](https://github.com/anotheren/):Regex101 是一个正则调试的在线工具,提供了大量的帮助信息来优化正则编写,甚至还提供了 Code Generator 来直接生成相关语言的代码(支持 Swift)。不仅仅是方便新手,如果你也经常与正则打交道,可以试试这个工具。 + +## 摸鱼周报 + +[@摸鱼周报 #68](https://mp.weixin.qq.com/s/YNukagI-VTOsIkhlYM6dEQ):第 68 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:iPhone14 灵动岛创意前瞻 +* 本周学习:OC 泛型中的 `__covariant` 与 `__contravariant` +* 内容推荐:编译和热重载优秀文章推荐 +* 摸一下鱼:关于 iOS 开发国际化相关工具推荐 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#218-2022.09.26.md b/Reports/2022/#218-2022.09.26.md new file mode 100644 index 000000000..b0a16db5f --- /dev/null +++ b/Reports/2022/#218-2022.09.26.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #218 | 2022-09-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [中心化决议管理——云端分析](https://mp.weixin.qq.com/s/BcX73VpSBxAgjOwoKaEoEw) + +[@JonyFang](https://github.com/JonyFang):本文主要分享了目前字节跳动内部的一种 CocoaPods 云端化的优化方案,针对大量重复的 iOS 工程流水线构建任务进行了收敛和复用,在保证依赖决议正确性的前提下加速了依赖管理速率,提升了研发效能。目前云端分析服务已经完成第一阶段的开发并落地使用,已被内部几个核心的生产线使用。 + +内容结构: +1. 背景 +2. 什么是云端依赖分析 +3. 如何加速决议 + - 制品库(全量组件索引信息) + - 缓存机制(排序 Version 缓存、Spec 对象缓存、缓存复用) + - 物料剪枝 + - 决议策略兼容 + +### 🐎 [How to use UIViewController in SwiftUI](https://sarunw.com/posts/uiviewcontroller-in-swiftui/) + +[@Damien](https://github.com/ZengyiMa):在 iOS 开发中,SwiftUI 和 UIKit 将会长期共存,无论使用的是哪种框架,有时你都可能需要相互调用,幸运的是,Apple 可以轻松地将 UIKit 代码引入 SwiftUI 中使用,在本文中,作者将向你展示如何在 SwiftUI 使用 UIViewController。有兴趣的读者不妨一读。 + +### 🐎 [viewDidLoad() in SwiftUI](https://sarunw.com/posts/swiftui-viewdidload/) + +[@zvving](https://github.com/zvving):从 UIKit 来到 SwiftUI 世界,你可能会困惑:`viewDidLoad()`在 SwiftUI 下的等效方法是什么? + +在声明式视图框架体系下,苹果并没有提供 `load view` 的行为细节回调。在绝大多数场景,可以通过 `onAppear()` 模拟 `viewDidLoad()` 的近似方法。本文详细介绍了模拟过程,以及如何封装成 `view modifier` 方便使用。 + +### 🐕 [云音乐 iOS 启动性能优化「开荒篇」](https://mp.weixin.qq.com/s/XVd9QNvXgJx_9K3XHAcaSA) + +[@Smallfly](https://github.com/iostalks):启动速度是 App 的「门面」,影响用户第一使用体验,是非常重要的体验优化项。本文记录了云音乐 App 在 iOS 13 之后冷启动优化实践。 + +以 `main()` 函数作为分界点,分别从 T1 和 T2 两个阶段进行针对性的优化。T1 阶段的治理主要包括动态库治理、+load 方法、无用代码清理、二进制重排;T2 阶段的治理主要是高频 OC 方法、runtime 符号遍历、网络相关、系统接口、业务影响等等。 + +经过阶段性的启动性能专项优化,云音乐 App 启动性能提升了 30%+。 + +### 🌟 🐕 [大终端领域的新物种-KUN](https://mp.weixin.qq.com/s/tDDI9Wn5eUTOJKHxYL27xg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 动态化的尝试和建设在社区从未停止过,今年来各种方案层出不穷: AST 解析,JS Engine+,Lua VM 等,各有千秋;KUN 是咸鱼团队基于 Kraken 产出的一套夸多端的 Flutter 动态化方案,兼顾 iOS & Android 动态化的同时,对齐 W3C 标准做到 Web 端兼容,其整体方案的思路值得深入学习和借鉴,暂时并未开源。 + +## 音视频 + +### 🐎 🚧 [Dynamic Island Animation explained](https://twitter.com/BradEllis/status/1570892167807377409?s=20&t=T38Q6Acu_TAqOGhWbmQE0A) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):你是否很好奇灵动岛的动画是如何设计出来的,作者通过将两个圆叠在一起,先模糊(blur)再锐化(sharpen),得到蒙层,复现了同样的动效。 + +## 摸鱼周报 + +[@摸鱼周报 #69](https://mp.weixin.qq.com/s/Miy8xsHYHHSXsl5NtxswQA):第 69 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:使用 iOS 16.1 Beta 版和 Xcode 14.1 Beta 版,准备登陆灵动岛 +* 本周学习:了解符号 Symbol +* 内容推荐:Swift、SwiftUI 相关好文推荐 +* 摸一下鱼:iOS 16 锁屏组件以及几个有趣的小工具:emojimix、hexclock、能不能好好说话 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#219-2022.10.17.md b/Reports/2022/#219-2022.10.17.md new file mode 100644 index 000000000..40cc459a2 --- /dev/null +++ b/Reports/2022/#219-2022.10.17.md @@ -0,0 +1,133 @@ +# 老司机 iOS 周报 #219 | 2022-10-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [Apple 面向开发者推出 Ask Apple](https://www.apple.com.cn/newsroom/2022/10/apple-introduces-ask-apple-for-developers/) + +![Ask Apple](https://developer.apple.com/events/ask-apple/images/ask-apple-icon-array_2x.webp) + +Apple 宣布推出 [Ask Apple](https://developer.apple.com/cn/events/ask-apple/),这是一项全新的互动式 Q & A 和一对一咨询(Office Hour)系列活动,为开发者提供更多机会与 Apple 专家直接交流沟通,获取洞见、支持与反馈。 + +开发者需要加入 Developer 计划,并且下载 Slack 参与交流互动(与 WWDC22 的 Digital Lounges 模式相似,当时参与过的同学应该对讨论中的丰富信息记忆犹新)。欢迎大家注册参加 Q & A 的[大量话题讨论](https://developer.apple.com/cn/events/ask-apple/questions-and-answers/),例如灵动岛、SwiftUI、新平台和硬件的体验优化等。 + +同时还有中文开发者的 Office Hour 专场(共 4 场),时间也充分考虑到了国内开发者。 +- 咨询设计布道团队(大中华区) + - 10 月 21 日上午 10:00 - 12:00 + - 10 月 21 日下午 14:00 - 16:00 +- 咨询技术布道团队(大中华区) + - 10 月 21 日上午 10:00 - 12:00 + - 10 月 21 日下午 14:00 - 16:00 + +## 新手推荐 + +### 🐎 [Dynamic Island (and Live Activities): Quick start tutorial](https://nemecek.be/blog/171/dynamic-island-and-live-activities-quick-start-tutorial) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 +Xcode 14.1 Beta 中带来了灵动岛的相关 API ,本文主要介绍了如何简单的利用新的 Live Activities 的 API 来创建一个自己的灵动岛。 + +## 文章 + +### 🐕 [CPU 是如何与内存交互的](https://mp.weixin.qq.com/s/SaaHKPnNUSvDkmwKtip3HA) + +[@老驴](https://weibo.com/u/6090610445):今年上半年 M1 Pro/Max/Ultra 在 GPU 上实际表现没有达成预期之后引发了很多人对 M1 系列芯片的进一步探究,后来 TLB 容量不足的问题也被发现。那什么是 TLB?CPU 又是如何去映射内存的?本文就从当今主流 CPU 架构出发,科普当今的 CPU 是如何管理使用 L1/2/3 缓存和内存的。 + +### 🐕 [Apple’s use of Swift and SwiftUI in iOS 16](https://blog.timac.org/2022/1005-state-of-swift-and-swiftui-ios16/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS 16 刚刚发布,本文分析了苹果内置的应用程序使用 Objective-C、Swift、SwiftUI 以及 C 和 C++ 的占比。通过对比 iPhone OS 1 到 iOS 16 的各个系统,可以得出一些结论: + +- Objective-C 是 iOS 的核心,被大多数应用程序直接或间接使用 +- Swift 的使用在过去的 iOS 版本中迅速增加。今年 Swift 终于超越了 C++ +- 多年来C++的使用稳定 +- SwiftUI 开始引人注目,这是一个很好的迹象 +- C正在缓慢但肯定地消失 + +### 🐕 [一文让你理清 PrimaryScrollController](https://mp.weixin.qq.com/s/1kLtGleY6BiC3bkV6YK83Q) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 对苹果用户来说,大家基本都知道,iOS 手机应用有一个比较常见的功能:点击状态栏,列表就会滚动到顶部. 但是在 Flutter 的各种列表组件中并未带有该特性,本文教大家如何使用 PrimaryScrollController 来实现这一特性. + +### [Where View.task gets its main-actor isolation from](https://oleb.net/2022/swiftui-task-mainactor/) + +[@Damien](https://github.com/ZengyiMa): Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者在视图中使用基于 async/await 的异步代码,但是你知道 task 是如何获取自己所执行的线程吗?以及它和 MainActor 修饰词有什么关系?如果感兴趣不妨一读。 + +### 🐕 [Xcode 14.0 generates wrong concurrency code for macOS targets](https://oleb.net/2022/xcode-14-mac-concurrency-bugs/) +[@Cooper](https://github.com/cjlcooper):Mac 开发者在 Xcode 14.0 和 14.0.1 进行构建工程的时候可能会出现并发错误(concurrency bugs),因为 Swift 5.7 编译器在针对 macOS 12.3 SDK 时会生成无效代码。解决方案是在 Xcode 14.1 发布之前,使用 Xcode 13.4.1 构建工程。产生错误的原因如下: + +- 因为实现了 [SE-0338](https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execution-non-actor-async.md) ,Swift 5.7 编译器的执行器跳跃点(executor hops)与 Swift 5.6 不同 +- Swift 5.7 新增非官方属性 @_unsafeInheritExecutor,用于注释一些需要退出新规则的标准库函数,当编译器编译到该属性时,它会生成不同的执行器跃点 +- 产生编译错误的原因是在 Mac 开发中,Xcode14 使用了 Swift 5.7 的编译器和 Swift 5.6 的标准库,后者不包含 @_unsafeInheritExecutor 属性 +- Xcode14.1 和 macOS 13 SDK 发布后将会修复这个问题 + +### 🐢 [基于自建 VTree 的全链路埋点方案](https://mp.weixin.qq.com/s/FuL2zynvf1xGjg_RCZcc4Q) + +[@Barney](https://github.com/BarneyZhaoooo): 本文详细介绍了网易云音乐技术团队自研的一套全链路埋点方案,从埋点设计、到客户端三端(**iOS**、**Android**、**H5**)开发、以及埋点校验&稽查、再到埋点数据使用。从设计到背后的思考和上线实践都有详细的说明,适合仔细阅读思考。 + +### 🐢 [虚拟内存 & I/O & 零拷贝](https://mp.weixin.qq.com/s/DMWfSxrbu4kgCh4JCQ4XIQ) + +[@老峰](https://github.com/gesantung):内存管理也是操作系统的核心功能之一,本文主要讲解了 Linux 系统下内存管理技术,是一篇不错的科普文,主要包含以下四部分: +- 虚拟内存: 地址翻译、高速缓存、加速翻译&优化页表 +- 内核空间 & 用户空间:内核态与用户态 +- IO:(同步)阻塞 IO、(同步)非阻塞 IO、IO 多路复用、网络 IO 模型、异步 IO +- 零拷贝:传统 IO 流程、mmap + write、写时复制 + +## 工具 + +### 🐕 [妙言 - 更适合工程师用的 markdown 笔记应用](http://miaoyan.app/) + +[@水水](https://www.xuyanlan.com):一个简洁好看的开源的 Mac Markdown 编辑器,没有任何多余的功能。使用原生 Swift 开发,轻量性能高,安全纯本地使用,具备语法高亮、黑暗模式、自动格式化、单独编辑、演示模式、图床等功能。也可以做为备忘录、归档使用,我个人还是比较喜欢的。 + +- 下载链接:http://miaoyan.app/ +- 工具源码:https://github.com/tw93/MiaoYan + +## 代码 + +### [Semaphore](https://github.com/groue/Semaphore) + +[@Smallfly](https://github.com/iostalks):`Semaphore` 是一种信号量管理类,它和 `DispatchSemaphore` 区别是不会阻塞线程,而是在 Swift Concurrency 框架下提供更细颗粒度的资源管理能力,例如支持对 Task 的挂起和恢复等。 + +### [响应式编程 Demo - RxStudy、GetXStudy](https://github.com/seasonZhu/RxStudy) + +[@JonyFang](https://github.com/JonyFang): [RxStudy](https://github.com/seasonZhu/RxStudy)、[GetXStudy](https://github.com/seasonZhu/GetXStudy) 分别是基于 RxSwift/RxCocoa、GetX 框架的 Demo,可以结合两个项目,对比编程思路。 + +### [package-benchmark](https://github.com/ordo-one/package-benchmark) + +[@xuyafei](https://github.com/xiaofei86):package-benchmark 是一种用于轻松创建 “macOS 和 Linux 的 Swift 性能测试报告” 的工具。它既适用于主要关注运行时的临时小型代码片段(本着 Google [swift-benchmark](https://github.com/google/swift-benchmark) 的精神),也适用于更广泛的指标,例如内存分配、系统调用、线程使用等。 + +package-benchmark 支持本地使用和基准比较,用于单个开发人员的迭代工作流,但更重要的是,它很好地支持 GitHub CI 的集成。其提供的示例工作流用于在主分支和 PR 分支之间进行自动比较,以支持 PR 的强制性能验证(具有可定制的阈值),这也是该工具的主要预期用例。 + +## 摸鱼周报 + +[@摸鱼周报 #70](https://mp.weixin.qq.com/s/rSPC8lgvUKPKfgR53xdHqg):第 70 期摸鱼周报,一起来看下本期概要: + +* 本期话题:苹果 iOS / iPadOS 16.1 公测版 Beta 3 发布,为老款 iPad 支持台前调度 +* 本周学习:排查修复 App Store 上架项目闪退问题 +* 内容推荐:iOS 开发技巧及计算机基础内容学习 +* 摸一下鱼:计算麦当劳套餐卡路里的营养计算器,可以模拟木鱼声音的软件,以及插图绘制软件 + +[@摸鱼周报 #71](https://mp.weixin.qq.com/s/0mAKYvVuPLKEA2qnsNfCvQ):第 71 期摸鱼周报,一起来看下本期概要: + +* 本期话题:十月份还有 One More Thing?Apple 新增 QA 活动;Swift 和 SwiftUI 在 iOS 系统中的使用情况。 +* 本周学习:在 iOS 16 中更改文本编辑器背景;解决 Cocoapods 导致的 Showing Recent Messages 问题 +* 内容推荐:SwiftUI 好文推荐 +* 摸一下鱼:推荐一款图片在线处理网站以及老地图查询网站;供摸鱼的迷宫生成器。 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#220-2022.10.24.md b/Reports/2022/#220-2022.10.24.md new file mode 100644 index 000000000..f2acaf7de --- /dev/null +++ b/Reports/2022/#220-2022.10.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #220 | 2022-10-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [A Possible Vision for Macros in Swift](https://forums.swift.org/t/a-possible-vision-for-macros-in-swift/60900) + +[@kemchenj](https://kemchenj.github.io):前一段时间 Swift 团队决定将编译器的 Parser 改为使用 Swift 实现,并且将这一部分功能内置到 SwiftSyntax 里。 + +这意味着 **Swift 成为了语法 API 的一等公民**,我们可以很便捷地在 Swift 代码里里访问和修改自身(源代码),更进一步地说,我们可以通过代码去编写代码。 + +如果把这个功能集成到编译器和语法里,就成了我们熟知的**宏 (macro)**。趁着这个机会,Swift 团队思考了后续如何借助这套 API,提供宏的实现,并且分享了初步的设计思路到论坛里,希望大家可以一起参与讨论。 + +以往很多硬编码在编译器里的功能都可以改为通过宏系统进行实现,例如 `Equatable`/`Hashable` 的实现自动合成等等: + +```swift +extension Equatable { + macro func ==(lhs: Self, rhs: Self) -> Bool +} +``` + +### 🐎 [Which Collection?](https://khanlou.com/2022/10/some-collections/) + +[@Smallfly](https://github.com/iostalks):集合(Collection)是编程语言常用的类型,Swift 集合是值类型的,对于复杂的集合数据,频繁拷贝可能会带来性能问题。本文通过一个数独算法,介绍如何对数组做优化,主要利用了 `some` 关键字配合 Swift 5.7 协议支持关联类型的新特性实现。想了解更多请参考 [SE-0346](https://github.com/apple/swift-evolution/blob/main/proposals/0346-light-weight-same-type-syntax.md)。 + +### 🐕 [Xcode 中使用 SPM 和 Build Configuration 的一些坑](https://onevcat.com/2022/10/spm-in-xcode/) + +[@红纸](https://github.com/nianran):经喵神的相关测试发现,在 Xcode 中使用 SPM 的包编译时将参照 Build Configuration 的名字,自动选择使用 DEBUG 还是 RELEASE 模式来编译,这将导致编译宏、编译配置等一系列因素影响最终的二进制产物。 + +规则:若名字里包含有 Debug 或者 Development(不区分大小写)则选择 DEBUG 模式,反之则选择 RELEASE 模式。 + +### 🐕 [iOS 灵动岛开发实践](https://juejin.cn/post/7153236337074634788) + +[@anotheren](https://github.com/anotheren):灵动岛是 Apple 为 iPhone 14 Pro 系列带来的下一代交互体验。在 iOS 16.1 中,相关 API 已向开发者开放,并仅提供了 SwiftUI 版本的接口。本文从电商角度,带来了灵动岛开发的入门实践。但是并非所有功能都适合在灵动岛上展示,推荐核对 Apple 的人机交互设计指南中的 [Live Activities](https://developer.apple.com/design/human-interface-guidelines/components/system-experiences/live-activities) 部分。 + +### 🐢 [Swift Concurrency – Things They Don’t Tell You](https://wojciechkulik.pl/ios/swift-concurrency-things-they-dont-tell-you) + +[@Cooper Chen](https://github.com/cjlcooper):Swift Concurrency 提供了一种非常好的编写异步代码的方法,同时它也被宣传为使用安全。然而不幸的是 Swift Concurrency 编程有很多陷阱,而且编译器不会检查所有东西 +- 如果使用 async 关键字,确保在后台线程上调用,否则需要添加 @MainActor 属性 +- Swift Actor 不能保证在使用过程中避免数据竞争,不保证异步方法在调用另一个方法之前会被完全处理 +- 避免将锁和信号量等经典的同步方法与 Swift Concurrency 混合使用 +- 设置 Task 优先级,避免在单个队列上分派所有内容 +- 避免在 Task 中进行繁重的同步工作,例如当需要像图像处理这样的繁重工作时,请使用自定义 DispatchQueue +- 必要时请使用 await Task.yield() 允许更频繁地切换任务 + +## 代码 + +### [灵动岛开发示例代码](https://github.com/jordibruin/Dynamic-Islands) + +[@anotheren](https://github.com/anotheren):这是一份灵动岛开发的示例代码,包含了多个实例的展示,你可以结合上面灵动岛开发实践一起食用更佳。 + +## 音视频 + +### [Swift 视频教程 ChaoCode](https://space.bilibili.com/1911023449/video) + +[@EyreFree](https://github.com/EyreFree):Swift 视频教程 ChaoCode 从 [油管](https://www.youtube.com/c/ChaoCode/featured) 入驻 B 站,从基础的 Swift 语法到中级 Swift 内容、 SwiftUI、用 Swift 制作完整 App 等都有,比较适合入门学习 Swift,感兴趣的朋友可以关注。 + +> 由 [KeithBird](https://github.com/KeithBird) 推荐 + +## 摸鱼周报 + +[@摸鱼周报 #72](https://mp.weixin.qq.com/s/WUVAHbJe_dmA-DVFXpF2Qw):第 72 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:1024 程序员节在各个技术网站已经开始预热,有不少奖品可以捞一捞;App Store 现已开放 iOS 16.1 和 iPadOS 16.1 App 提交 +* 本周学习:当设置 `UIImageView` 高亮时,会暂停当前的动画;Xcode 14 编译包在 iOS 12.2 以下设备崩溃的解决方案 +* 内容推荐:灵动岛有很多玩法还待探索,本期推荐一些相关文章 +* 摸一下鱼:CleverToolKit:iOS 开发者辅助工具,页面简洁,体积小巧。目前包含 json2model 功能。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#221-2022.10.31.md b/Reports/2022/#221-2022.10.31.md new file mode 100644 index 000000000..f1115d534 --- /dev/null +++ b/Reports/2022/#221-2022.10.31.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #221 | 2022-10-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [全新升级 | 第十七届 D2 终端技术大会终于来了~](https://mp.weixin.qq.com/s/e1ilPhCaJDT9takQE9vpBA) + +D2 的前身是「前端技术论坛」,应该有不少前端朋友对它非常了解,去年大概有 2000 多个人报名。今年也升级成了「终端技术大会」,加入了不少客户端的内容,D2 不仅会重视内容的深度,同时也会拓宽内容的广度,希望和大家一起了解一线互联网在前端 / 客户端领域的技术探索与未来。此外,本届 D2 两大方向所擦出的火花,将为单一技术栈的同学带来更多方向性的输入。 + +从目前报名的议题上看含金量应该会非常不错。目前活动也已经正式官宣了,感兴趣的可以关注下。 + +### [Apple 的安全研究平台正式公开上线](https://mp.weixin.qq.com/s/M_NZF8F9r9PNkKTQbOycNg) + +苹果的安全平台 [Apple Security Research](https://security.apple.com/) 正式公开上线,可以看作苹果将更加重视社区提交的安全报告。苹果承诺将更快地对提交的内容做出回应,并且提供了更便捷地追踪提交漏洞的方式,开发者能够及时获得状态的更新。并且团队上线了一篇 XNU 内存安全的 [kalloc_type 介绍](https://security.apple.com/blog/towards-the-next-generation-of-xnu-memory-safety/)文章。 + +同时直到 11月 30 日截止,[Apple Security Research Device Program](https://security.apple.com/research-device) 还在接收报名,对安全研究感兴趣的同学可以报名。 + +## 文章 + +### 🐢 [iOS 高级之美(六)—— malloc 分析](https://juejin.cn/post/6844904033908424717) + +[@xuyafei86](https://github.com/xiaofei86):“iOS 高级之美” 是作者对自己工作中研究的一些总结,涵盖了常见的 Runtime 面试考点。此系列文章围绕底层进行源码分析、LLDB 调试、源码断点和汇编调试,共有 6 篇文章: + +1. iOS_objc4-756.2 最新源码编译调试 +2. OC 对象底层上篇 +3. OC 对象底层下篇 +4. isa 原理分析 +5. 类结构分析 +6. malloc 分析 + +本篇针对 malloc 展开分析,感兴趣的同学可以阅读原文一探究竟。 + +### 🐎 [iOS ADRP 汇编指令与虚拟内存](https://juejin.cn/post/7159152535062888479) +[@Damien](https://github.com/ZengyiMa):你了解 ADRP 吗? ADRP 意为符号的页数地址,那么它是如何生成和确定的呢?本文作者会从最基本的 UITextView 的使用出发,深入汇编源码,一步步为我们展示阐述其中的原理,感兴趣的同学不妨一读。 + +### 🐎 [iOS SIGKILL 信号量崩溃抓取以及优化实践](https://mp.weixin.qq.com/s/2S3XIpKXMnYNFayeBE_d2Q) +[@JonyFang](https://github.com/JonyFang): 和其他信号不同,SIGKILL 不可被捕获,这是 Linux/Mach 内核的限制,为了让操作系统在程序无法响应的时候,可以从上一层控制进程的生命周期。自 iOS 13 后,引入了 MetricKit 框架,可以用来汇总和分析有关异常和崩溃诊断以及电源和性能。本文即介绍了如何使用 MetricKit 收集 SIGKILL 信号量、获取崩溃信息,基于 Code 的含义解析 SIGKILL 日志的过程。最后,也介绍了百度 App 常见的 SIGKILL 问题。 + +### 🐎 [Compiling Swift generics, Part I](https://forums.swift.org/t/compiling-swift-generics-part-i/60898) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是讲解 Swift 泛型如何工作系列文章中的第一部,并且提供了文档和源码。文中首先对 Swift 泛型背后的关键思想进行了总体概述,然后继续讨论对理解 Swift 编译器很重要的基础材料:编译管道、模块系统、请求评估器、类型和声明,最后深入探讨了泛型实现的细节:从泛型声明的 AST 开始,然后讨论泛型签名、替换映射、一致性和泛型环境。 + + +## 代码 + +### [推荐一个 Swift Concurrency 拓展库](https://github.com/ChimeHQ/ConcurrencyPlus) + +[@Cooper Chen](https://github.com/cjlcooper):这是一个轻量级的 Swift Concurrency 拓展库,在开发 Swift 并发相关方面提供了一些优秀的工具拓展。 +- 提供基于 FIFO 排队的 TaskQueue +- 提供 CheckedContinuation 扩展用于提升效率 +- 在桥接非异步代码时提升任务扩展的性能 +- 提供了安全的异步集成 NSXPCConnection 扩展 +- 提供 MainActor.runUnsafely 来解决不受控制的错误或注释不足的代码 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [上海] 拼多多 - 特效团队 - Android/iOS +- [上海] 七猫小说 - iOS/Android/前端/go/大数据 高级、资深工程师 +- [武汉] 微派网络 - 会玩app/青藤之恋 - iOS/Android +- [杭州] 手机淘宝 - 基础链路客户端团队 - iOS/Android +- [杭州] 淘宝 - 原生研发模式 - iOS/Android +- [杭州] 淘宝 - 跨端引擎与开放技术 - iOS/Android/C++ +- [北京/深圳/广州/三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#222-2022.11.07.md b/Reports/2022/#222-2022.11.07.md new file mode 100644 index 000000000..2c0e0775b --- /dev/null +++ b/Reports/2022/#222-2022.11.07.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #222 | 2022-11-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦 ~ 欢迎陈家黎 (Cooper Chen) 加入周报组织。家黎目前专注在 Mac 桌面应用开发和架构设计,同时对编译器、链接器以及 CI/CD 等方向均有研究。希望家黎的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [挑战上岛:适配实时活动和灵动岛](https://developer.apple.com/cn/accelerator/) + +实时活动用于在 iPhone 锁屏以及灵动岛上显示来自 App 的最新信息,帮助用户及时查看当前任务和事件的进展。参与此次活动,开发者将了解如何设计和开发的实时活动,以及如何利用灵动岛带来更出色的用户体验。 + +参与讲座的开发团队可在讲座当天报名参与实时活动和灵动岛适配挑战,通过审核后可获得一对一的咨询与深度辅导。参加挑战,并能够在 2022 年 12 月 20 日前完成适配和上线的团队,将有机会获得更多 App 的推广机会。请在 2022 年 11 月 8 日前报名参加。 + +### [第二期字节跳动技术 iOS 技术沙龙正式开放报名](https://mp.weixin.qq.com/s/KTobjj9B8vuEYPIKggfeKA) + +[@Barney](https://github.com/BarneyZhaoooo):第二期字节跳动技术 iOS 技术沙龙正式开放报名了! +本期沙龙将围绕**静态分析**、**视频播放品质优化**、**首页 Feed 重构**、**自动化服务**及**端智能技术探索**等 5 大技术方向 , **11 月 12 日下午 2 点**沙龙将以免费线上直播的形式与大家见面。 +以下是具体主题: + +- **抖音 iOS 从静态分析到准入体系:进击的“钟馗”** +- **抖音 iOS 视频播放品质优化实践** +- **抖音 iOS 首页 Feed 重构探索与实践** +- **抖音 iOS 自动化服务:工具链演进与优化实践** +- **机器学习技术在抖音 iOS 的探索与实践** + + +## 文章 + +### 🐢 [自动化测试在美团外卖的实践与落地](https://mp.weixin.qq.com/s/vLR1FqGi6TiICEcWzOnHfQ) + +[@EyreFree](https://github.com/EyreFree):随着美团到家业务的发展,系统复杂度持续增长,外卖各个页面的技术形态也很多,除了 Native 代码,还包括 Mach(外卖自研动态化框架)、React Native、美团小程序、H5 等,研发人员一半时间在开发、一半时间在模拟环境和自测。因此引入自动化测试就显得十分有必要,本文介绍了美团外卖在自动化测试方向做的一些探索和实践,包括可溯源的自动化测试、跨 App 回放用例、埋点的录制回放等,推荐正在从事相关领域工作的同学阅读。 + +### 🐢 [Towards the next generation of XNU memory safety: kalloc_type](https://security.apple.com/blog/towards-the-next-generation-of-xnu-memory-safety/) + +[@Damien](https://github.com/ZengyiMa):内存安全漏洞是最常见,最广泛利用的漏洞问题,并且当今几乎所有流行的用户设备都依赖于用 C 和 C++ 等被认为 “内存不安全” 的编程语言编写的核心系统代码,本文来自 Apple 官方安全工程与架构团队文章,向大众展示了苹果在解决内存安全漏洞方面的努力,本文会从以下几个角度为我们完整的介绍了新的一代内存分配器 kalloc_type + +* 对安全问题的介绍,包括目标、设计原理和必须克服的挑战。 +* kalloc_type 安全分配器的技术实现原理。 +* 安全分析和评估,包括优势和劣势。 + +本文是安全问题的系列文章内容的第一篇,感兴趣的同学可以订阅 Apple 官方 Blog。 + +### 🐕 [深入理解 virtual 关键字](https://mp.weixin.qq.com/s/fvgU5iBP9_0yZOsX0no_Cg) + +[@莲叔](http://aaaron7.github.io/):virtual 是 C++ 最常用的一个关键字,绝大多数同学可能对于 virtual 的理解还停留在表面,认为是如果我们需要覆写父类的方法,则需要将对应的方法标记为 virtual。虽然这个习惯不能说不对,但本质还是一种盲人摸象。这篇文章深入浅出的介绍了 virtual 为什么可以为我们解决继承中遇到的问题,有无 virtual 在集成中的区别,以及最后还简要的介绍了 virtual 的实现原理,非常适合平时需要书写 C++ 的同学阅读,ROI 非常高(收获 / 阅读时间)。 + +### 🐎 [聊聊 iOS 中的像素对齐](https://juejin.cn/post/7124658703088910350) + +[@Smallfly](https://github.com/iostalks):像素对齐是 UI 开发中比较基础的概念,像素不对齐可能会出现视觉效果不符合预期,还会导致一些额外的性能损耗。本文采用通熟易懂的方式,介绍 iOS 系统中像素不对齐会产生的效果,以及在不同场景下像素对齐的处理方式。 + +### 🐕 [Resolver for iOS Dependency Injection](https://www.kodeco.com/22203552-resolver-for-ios-dependency-injection-getting-started) + +[@JonyFang](https://github.com/JonyFang):Resolver 是一个依赖注入 / 服务定位框架,它的核心逻辑是服务定位的设计实现。Resolver 的核心主要包含三个部分:`ResolverRegistration`、`ResolverScope`、`Resolver`,它们各有各的职责,遵循了职责单一的设计原则,并且实现了一个扩展性很强的策略模式。本文是 RAYWENDERLICH.COM 提供的一篇入门教程,可以根据实例 Demo 了解 Resolver 的使用。 + +### 🐕 [美团高性能终端实时日志系统建设实践](https://mp.weixin.qq.com/s/BAcB_LQ1Nr00Y7RxjRDK1g) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了美团是如何从 0 到 1 搭建高性能终端实时日志系统 Logan,其服务于移动端 App、Web、小程序、IoT 等终端场景下的实时日志解决方案,旨在提供高扩展性、高性能、高可靠性的实时日志服务,包括日志采集、上传、加工、消费、投递、查询与分析等能力,其中落地成果如下: +- 核心链路还原 +- 内测阶段排障 +- 日志数据分析 + +希望能为大家带来一些帮助和启发。 + +### 🐕 [智能测试实践之路 - UI 遍历技术](https://mp.weixin.qq.com/s/wetQa8iiOnKySehtFpbPtQ) + +[@老峰](https://github.com/gesantung):UI 测试在大促断网演练、线上问题巡检、功能回归测试兜底、埋点覆盖、流水线质量门禁等许多场景下有重要作用,但传统 UI 遍历技术依赖 uiautomator 和 wda 框架获取页面 Dom 数据结构,在稳定性、性能、兼容性方面均有一定痛点,本文是京东结合传统 dump hierarchy 获取视图树和 openCV 页面分割两种技术手段在智能测试方向的探索实践,包含以下内容: + +- 智能分割识别获取页面元素 +- 利用图像视觉和 AI 识别处理遍历过程弹窗 +- 利用图像 Hash 和分割轮廓特征标识页面 +- 多端兼容的指定页面遍历方案 +- 多种借力于 AI OCR CV 技术的断言方式 + +### 🐕 [iOS 灵动岛开发实践](https://juejin.cn/post/7153236337074634788) + +[@水水](https://www.xuyanlan.com/): 本文作者通过电商常用的抢购商品案例出发,从基础概念、开发准备、项目构思、项目代码实践到最终结果展示的完整的描述了灵动岛的开发实践过程,是非常好的参考资料。如果对灵动岛开发有兴趣的朋友们可以了解看看哦 ~ +关键词: +- Max 系统版本、编译器及 iOS 系统版本:>=MacOS12.4、>=Xcode14.0+beta4、>=iOS16.1+beta +- ActivityKit +- SwiftUI +- Widget + +### 🐕 [盒马 iOS Live Activity & “灵动岛”配送场景实践](https://mp.weixin.qq.com/s/6M3jaVwgTAaQ0A0Fsjcs1Q) + +[@J_Knight_](https://github.com/knightsj):盒马团队将灵动岛技术落地到了盒马 30 分钟配送的场景,作为第一批适配的应用,获得了 Apple Store Today 的推荐。本文首先分享业务落地效果,并结合整体的技术方案分享了在开发过程中遇到的技术难点(比如实时更新,机型适配,过渡动画等)以及解决方案。 + +### 🐎 [基于优酷业务特色的跨平台技术 | GaiaX 开源解读](https://mp.weixin.qq.com/s/2LW4qS2Sk4SV23pAE2xhuw) + +[@xuyafei86](https://github.com/xiaofei86):[GaiaX](https://github.com/alibaba/GaiaX) 跨端模板引擎是在阿里优酷、淘票票、大麦内广泛使用的 Native 动态化方案。其采用自定义 DSL 搭建 UI,Native 原生 UI 组件进行渲染的技术形态。使用 json 和 css 描述 UI 元素、数据绑定和动态扩展信息。GaiaX 还具备动态化能力,并提供相关的开发工具,感兴趣的同学可以关注此系列文章。 + +### 🐕 [Swift Package Manager 工程实践](https://mp.weixin.qq.com/s/q7jolU99K7FI9JvAxjwRwg) + +[@AidenRao](https://weibo.com/AidenRao):本文详细介绍狐友团队在引入 Swift Package Manager 进行工程实践中,探索和累积的相关知识和实践经验,从结构设计、资源处理、链接方式的选择、编译与链接参数设置、异常处理,这五个方面展开详细介绍,每个小部分结尾都提供了最佳实践的总结。希望能够帮助其他想要尝试 Swift Package Manager 的开发者顺利过渡。 + +> 由 [kingnight](https://github.com/kingnight) 推荐收录 + + +## 摸鱼周报 + +[@摸鱼周报 #73](https://mp.weixin.qq.com/s/Om_1TOGKWkMiNneB6Ittrw):第 73 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple Search Ads 新增广告位,遭遇质疑;macOS Ventura 初体验,更像 iOS,功能更强大。 +* 本周学习:Swift 函数派发方式总结 +* 内容推荐:网络监控内容推荐,iOS 博主在新西兰找工作的心路历程 +* 摸一下鱼:多种脚本语言中优雅处理参数的三方库;原神助手 mac 版 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [北京/杭州/上海] 抖音 - 西瓜视频 - iOS +- [上海/北京] 小红书 - 客户基础架构技术团队 - iOS - P6/P7/P8 +- [北京] 字节跳动 - APM 客户端团队 - iOS + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#223-2022.11.14.md b/Reports/2022/#223-2022.11.14.md new file mode 100644 index 000000000..3ecd9f881 --- /dev/null +++ b/Reports/2022/#223-2022.11.14.md @@ -0,0 +1,131 @@ +# 老司机 iOS 周报 #223 | 2022-11-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [波报 | Pofat 的 Swift 中文电子报](https://pofat.substack.com) + +[@kemchenj](https://kemchenj.github.io/):波报是聚焦于 Swift 语言与其相关领域的技术周报,宗旨是为中文开发圈注入一些不同面向的资讯。 + +摘选的内容主要是国外 Swift 开发者社区的资讯,内容包含但不限于: + +- Swift 和 LLVM 官方消息 +- Swift 和 LLVM 论坛新鲜事 +- Swift (或其它相关)的底层原理探讨 +- Swift 程式语言设计的学习和思考 + +### [iOS 16.2 Beta 投屏崩溃](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3673) + +[@Leo](https://github.com/leomobiledeveloper):iOS 16.2 Beta 系统投屏会出现 Invalid parameter not satisfying: outputDevice 崩溃,对投屏有强诉求的同学可以暂时别升级。 + +##  Developer - 设计开发加速器 + +### [Ask Apple November 14 to 18](https://developer.apple.com/events/ask-apple/) + +继上次 10 月下旬的 Ask Apple 之后,苹果会再继续进行 2 轮新的 Ask Apple 活动,一轮是下周,另一轮是 12 月份。明年 WWDC23 之前,这可能是最后的两轮 Ask Apple 活动了。活动照旧需要提前注册并下载 Slack 。 +这一次依旧会有中文集锦的频道,这个频道中除了回顾各个英文频道的精华内容之外,也鼓励中国开发者直接中文提问,而且会比上一轮放开更多的技术话题。 + +## 新手推荐 + +### 🐎 [Refactoring Swift: Best Practices to succeed](https://www.avanderlee.com/optimization/refactoring-swift-best-practices/) + +[@极速男孩](https://github.com/ztlyyznf001):重构是每个项目都会面临的问题,本文简单介绍了在代码重构时候索要注意的事项,以及如何借助 Xcode 中的比如 async/await ,to-do ,if let shorthand 等功能来对你的代码更容易去进行重构。 + +## 文章 + +### 🌟 🐕 [探秘越来越复杂的 ImageIO 框架](https://mp.weixin.qq.com/s/nbPIScJEZ3ReMSFuvNLkzQ) + +[@JonyFang](https://github.com/JonyFang):本篇会介绍,自 iOS 13 时代之后,苹果在 ImageIO 上做的一系列优化(“机制变化”),以及对开发者生态带来的影响。内容结构: +1. WebP/AVIF 新兴图像格式支持 + - WebP + - AVIF +2. IOSurface 和硬件解码优化 + - 50% 内存开销的奥秘 + - IOSurface 和跨进程 Buffer + - 开发者的痛,Public API +3. 不再安全的 ImageIO + - 从一个崩溃说起 + - 崩溃的背后 + - Workaround 方案 + +早期的 ImageIO 和各种上层框架的设计,是针对 iPhone 的低内存的机型做深入优化,希望能尽量利用惰性解码,mmap 缓存,换取较低内存开消,并且对各种无硬件解码的开源格式完全不感兴趣。而最近几年,随着苹果芯片团队的努力,高内存,M1 的统一内存,以及高性能芯片的诞生,苹果已经有充足的能力能够通过软件解码,共享内存,越来越多硬件解码器技术来满足主流的多媒体图像支持,本身这是一件好事。 + +不过问题在于历史遗下来的 API,依旧保持了之前的设计缺陷,Apple 团队却一直在通过越来越 Trick 和 Hack 的方式解决问题,并没有给开发者可感知的新机制和手段来跟进优化(除开这一点吐槽,AppKit 上的 `NSImage` 的 `NSImageRep` 这种代理对象设计,比 `UIImage` 的私有类 `UIImageContent` 设计要适宜的多,也灵活的多). + +软硬件一体加之闭源,会导致开源社区的实现,永远无法及时跟上其一体的私有集成,最终会捆绑到开发者和用户(开发者越强依赖苹果 API 和 SDK,就会越强迫用户更新 OS 版本,进而捆绑硬件换代销售),这并不是一个好的现象🙃 + +### 🌟 🐕 [手把手教你写 Dart ffi](https://mp.weixin.qq.com/s/zmOH4p2932oaXzsF-MA5fA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在 Flutter 开发中与 Native 层的 lib 交互 Channel 是最为大家所熟知的。但其性能历来饱受诟病,随后官方推出了更为高效的交互方式 ffi(foreign function interface), ffi 不但更高效,且可以直接跟 C/C++ 之类更为底层的 lib 进行交互。本文采用 step by step 的方式示例如何使用 dart-ffi 进行编程,比较适合新手学习,小编强烈推荐。 + +### 🐕 [Result builders in Swift explained with code examples](https://www.avanderlee.com/swift/result-builders/) + +[@Smallfly](https://github.com/iostalks):Swift result builders 是一种组合构建代码的方式,在构建闭包内,多个同类型返回值的表达式,执行结果将会被隐式组合,返回一个集合类型的结果。SwiftUI 利用该特性实现了 `@ViewBuilder` 用于组织 View。 + +Result builders 特性能够用来设计 DSL,简化代码逻辑,增加可读性。本文通过自定义实现 `AutoLayoutBuilder` 来简化 AutoLayout 的使用,推荐感兴趣的同学阅读原文。 + +### 🐎 [When does a SwiftUI Environment get retained?](https://tiagolopes.blog/2022/11/01/when-does-a-swiftui-environment-get-retained/) + +[@Cooper Chen](https://github.com/cjlcooper):Environment 是 SwiftUI 的独特功能之一,这是我们以前在 UIKit 中所没有的。本文介绍了在 SwiftUI 的开发过程中应该如何对 Environment 进行内存管理。其中核心的观点如下: +- 处理任何不再使用的 SwiftUI 视图变量 +- 处理不再使用的 UIHostingController 引用 + +同时需要注意以下方面的内存泄漏: +- SwiftUI 中使用的 UI 视图 +- UIView 和 Environment 对象之间的引用 +- UIViewController 显示 UIHostingController +- Environment 对象本身 + +### 🐕 [百度 APP iOS 端内存优化实践 - 内存管控方案](https://mp.weixin.qq.com/s/dETOGD3NYU2SdZhxGu0SZg) + +[@AidenRao](https://weibo.com/AidenRao):该方案重点解决的问题是在内存水位很高的情况下,保证 APP 稳定性又兼顾用户体验,延长 APP 使用时长同时避免 OOM。 + +- 针对不同机型制定了相应的内存水位可以更加从容地释放内存。本技术方案结合 Jetsam 机制和百度 APP 线上内存数据,制定了 iPhone 各机型允许使用的内存水位线,给业务和框架更大的空间释放和清理内存。 +- 实时内存监控和精细化页面内存预测,在实时内存监控的基础上,开发了页面级的内存度量方案,可以估算出用户在新开一个页面内存涨幅多少,在未来一段时间内存会不会达到危险水位。 +- 内存管控方案提供主动和被动通知两种方式获取内存水位状态,实现了各业务层根据手机内存情况实时降级,时效性更强,跟之前服务端降全量降级方案相比,更加灵活,性能更好。 + +### 🐕 [How Xcode 14 unintentionally increases app size ](https://www.emergetools.com/blog/posts/how-xcode14-unintentionally-increases-app-size) + +[@莲叔](http://aaaron7.github.io/):包 Size 是目前的移动开发者都不得不面对的一个问题。近期,Xcode 14 携带了众多新特性,其中一点值得开发者注意的就是将不会默认开启 bitcode,这将会导致潜在的包 size 增加。文章的作者团队进行了些初步的分析发现很多 APP 在切换使用 Xcode 14 打包以后都产生了 30%-60% 的 size 膨胀,这还是很惊人的。文章不仅分析了现状,还对膨胀的原因做了深入的分析。对于面临 Xcode 14 适配的开发者们不容错过。 + +### 🐎 [Should we manually call @StateObject initializer](https://sarunw.com/posts/manually-initialize-stateobject/) + +[@Damien](https://github.com/ZengyiMa):在 Swift 2.0 中苹果推出了属性包装器 @StateObject,当 View 发生更新时,@StateObject 修饰的对象不会进行销毁,但是能否在 init 方法方法中来手动调用 @StateObject 初始化器呢?答案是肯定,本文会进行深入的研究,并且指出了手动初始化 @StateObject 时应该注意的事项,对 @StateObject 感兴趣的同学不妨一读。 + +## 代码 +### [CSProgress](https://github.com/CharlesJS/CSProgress) +[@享耳先森](https://github.com/iblacksun):`CSProgress` 是一个高性能且易使用的 `NSProgress` 替代方案。 或许你对 `NSProgress` 并不熟悉,因为在业务开发中比较少用到,但还是建议你阅读下 `CSProgress` 项目的 READMEE,详细阐述了 NSProgress 性能问题及糟糕的 API 设计,对自己也是种警惕。 + +## 摸鱼周报 + +[@摸鱼周报 #74](https://mp.weixin.qq.com/s/lhhV0Qlc9NtFoM6nF7gZbA):第 74 期摸鱼周报来了,看下本期概要有没有你感兴趣的内容: + +* 本周学习:iOS NSDateFormatter 设置问题 & iOS 16 部分 pods 库签名问题 +* 内容推荐:SPM 工程实践以及性能优化好文推荐 +* 摸一下鱼:本期推荐一款跨平台的摸鱼网站、和两款坐姿监控 APP,摸鱼的时候也不要忘记保持正确坐姿;一个根据年历、地图、人物等生成文学图谱的网站;帮助从 intel 平缓过渡到苹果自研 M 系列芯片的软件检测 App。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考。 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#224-2022.11.21.md b/Reports/2022/#224-2022.11.21.md new file mode 100644 index 000000000..0500c3513 --- /dev/null +++ b/Reports/2022/#224-2022.11.21.md @@ -0,0 +1,120 @@ +# 老司机 iOS 周报 #224 | 2022-11-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift project in 2023](https://www.swift.org/blog/focus-areas-2023/) + +Swift 团队发布明年的开发路线图,今年新增了工作组机制: + +- **语言组**:负责编译器和标准库的开发 +- **网站组**:管理 swift.org 的网站内容 +- **文档组**:负责文档工具的开发 +- **C++ 交互组**:提高与 C++ 的可交互性,孵化相关提案 + +这里节选了一些亮点内容: + +- **宏系统**开始进行设计和实现,最快可能明年 WWDC 就能看到 +- 添加语法层面的功能让我们可以控制值的**所有权**,减少不必要的拷贝和引用计数 +- 优化**编译系统**和编译器的交互逻辑,让编译过程变得可靠 +- **编译器一部分使用 Swift 进行重写** + +## 文章 + +### 🐕 [云音乐 iOS 端代码静态检测实践](https://mp.weixin.qq.com/s/5ZcGBCnrUYwUA0RXyPJt9w) +[@水水](https://www.xuyanlan.com/): 随着项目的扩大,依靠纯人工 Code Review 来保障代码质量、防止代码劣化变得”力不从心“。此时有必要借助代码静态分析能力,提升项目可持续发展所需要的自动化水平。针对 C、Objective-C 主流的静态分析开源项目包括:Clang Static Analyzer、Infer、OCLint 等。 +本文基于可定制性最强的 OCLint 作为代码静态检测工具,从以下四点介绍了 OCLint 的实践应用过程: + +- OCLint 环境部署、编译和分析。 +- 自定义规则实现。 +- 静态检测耗时优化。 +- 利用静态检测能力持续对启动性能防劣化控制。 + +### 🐕 [三代终端容器 KUN 的首次大考【架构演进】](https://mp.weixin.qq.com/s/26SCEM6QPhAazydRUq9h3Q) +咸鱼自研的 KUN 容器框架,是一套用前端编写代码,用 Flutter 来做渲染,目前已经在闲鱼号上应用。本文同时对 KUN 框架、Weex、WebView 渲染做了对比,KUN 框架在体验、性能等方面均表现不错,同时,KUN 框架对双端渲染一致性问题也做了一定的优化,避免代码中大量 if-else 判断。 + +### 🐕 [HOME ARTICLES BOOK ABOUT When .animation animates more (or less) than it’ s supposed to](https://oleb.net/2022/animation-modifier-position/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI 中 animation 修饰符,在 iOS 16/macOS 13 中,其相对于非渲染修饰符的放置与决定是否对更改进行动画处理无关。作者在文中列举了自己测试的所有案例对此进行了说明。 + +### 🐎 [React 中的重新渲染](https://mp.weixin.qq.com/s/ADx8PuNvg4xVVLBeh265kw) + +[@Damien](https://github.com/ZengyiMa/):本文来自阿里巴巴终端技术团队文章,在客户端动态化方案中,React Native 是一个成熟且高效的解决方案,作为动态方案重中之重就是渲染,想知道 React 的重渲染为何如此高效吗?不妨来深入了解下本篇文章内容,本文会深入源码,为我们一步步揭露面纱。 + +### 🐎 [Binary Targets in Swift Package Manager](https://www.avanderlee.com/optimization/binary-targets-swift-package-manager/#the-upsides-of-binary-targets) + +[@Smallfly](https://github.com/iostalks):Swift Package Manager(SPM) 是苹果官方的 Swift 源代码管理工具,它负责自动化完成依赖库的下载、编译和链接。以源码的方式集成依赖库,会对集成和编译效率有较大的影响。 + +Binary Target 让 SPM 支持以二进制产物的方式集成依赖库,能有效节约集成时间,同时也适用于分发闭源库。不足之处是二进制格式不支持调试,而且只支持 XCFramework。 + +本文详细的介绍了 Binary Target 的优缺点,以及使用方式,最后还介绍了如何构建 XCFramework,以支持 Binary Target。 + +### 🐕 [Combining opaque return types with primary associated types](https://www.swiftbysundell.com/articles/opaque-return-types-primary-associated-types/) + +[@zoeGuo](https://github.com/zoeGuo):Swift5.7 引入了 Primary associated types 的概念,即可以在协议中使用 associatedtype 声明自定义类型。使用 some 声明包含 Primary associated types 的协议的返回值后,调用者可以不再需要使用强制类型转换和手动类型擦除,并且能够保证完全的类型安全。文章就使用 associatedtype 的优点,以及 associatedtype 结合 some、any 关键字的使用进行示例和介绍。 + +### 🐕 [Flutter 多引擎渲染,在稿定 App 的实践](https://mp.weixin.qq.com/s/fpbVBg-Usuu7I6lCbPhlsQ) + +[@老峰](https://github.com/gesantung):一直以来 Flutter 社区关于 multiple-flutters Flutter 多引擎实践的参考的资料比较少,本文作者介绍了利用脚本开发了一套 FGUIComponentAPI 工具链来链接 Native 与 Flutter UI,自动生成开发基类、宿主调用类、通信层 API、测试用例、开发文档的实践思路,以及在多引擎实践中踩到的坑。 + +### 🐕 [Stack unwinding](https://maskray.me/blog/2020-11-08-stack-unwinding#中文版) + +[@xuyafei86](https://github.com/xiaofei86):在 C++ 中抛出异常时,当前函数将暂停执行,通过函数调用栈查找匹配的 catch 子句。如果异常没有在抛出它的函数中被处理,就会退出当前函数,从函数调用栈中删除函数实体并释放栈上的局部变量,继续到调用栈上层查找,直到找到可以处理该异常的 catch,这个过程称为栈展开(stack unwinding)。其主要用于调试器、崩溃报告、垃圾回收器中。本文将带大家简单了解 Stack unwinding 的实现,感兴趣的同学可以阅读原文了解。 + +## 代码 + +### 🐕 [GitHub - ole/swiftui-layout-inspector: A tool for learning how the SwiftUI layout system works, and for debugging your own layout code.](https://github.com/ole/swiftui-layout-inspector) + +[@Barney](https://github.com/BarneyZhaoooo):对于学习 SwiftUI 布局的朋友们是一个福音,这款工具可以很好地帮助 debug 布局代码,方便大家学习理解 SwiftUI 布局。 + +A Swift library (and iOS/Mac app) for learning how the SwiftUI layout system works, and for debugging your own layout code. Inspect the layout behavior of SwiftUI views, i.e. what sizes views propose to their children and how a view determines its own size. + +## 音视频 + +### 🐢 [Standardizing build system using modern Swift Packages in LINE](https://attendees.bizzabo.com/417034/agenda/activity/1022649) + +[@kemchenj](https://kemchenj.github.io/):来自 LINE 的工程师介绍了他们使用 SPM 改造构建系统的过程。随着 LINE iOS 端的迭代,代码行数现在已经增长到了两百万以上,编译速度也就慢慢成为了一个“问题”。 + +他们自然而然也选择业界流行的方案 Bazel 来解决这个问题,整个构建过程分为两步: + +1. 所有依赖库都使用 Bazel 进行打包成二进制库 +2. 主工程 App 引用上一步的库,使用 Xcode 进行编译和调试 + +但使用 Bazel 的同时也带来了一些问题,学习成本高,维护成本高,缺乏依赖管理。付出如此高的代价,但实际带来的编译速度提升还不如 Apple Silicon(M1) 的升级。 + +最后他们将眼光投向了 SPM,打算直接使用它来替代 Bazel 打包二进制库,同时也为此开发了一个工具 [Scipio](https://github.com/giginet/Scipio),用于将 Swift Package 打包为 XCFramework,并且自定义了一套缓存策略。 + +## 摸鱼周报 + +[@摸鱼周报 #75](https://mp.weixin.qq.com/s/nguqKvkuzDBR9o-Yw6y3KQ):第 75 期摸鱼周报来了,一起来看下本期概要吧: + +* 本期话题:远程工作在国内的推行为什么困难重重?iPhone 14 / Pro 系列卫星 SOS 紧急求救服务已在美国和加拿大正式推出 +* 本周学习:iOS16 中的 3 种新字体宽度样式 +* 内容推荐:Ask Apple 2022 十月问答汇总;Swift 以及 SwiftUI 相关的好文推荐 +* 摸一下鱼:一个快速学习编程语言或开发工具的网站 Learn X in Y minutes、B 站 up 主开源的一套免费商用的字体得意黑、一个 SwiftUI 开发的开源单词游戏项目、Google 推出的能够模拟面试的网站 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#225-2022.11.28.md b/Reports/2022/#225-2022.11.28.md new file mode 100644 index 000000000..9075b3bdb --- /dev/null +++ b/Reports/2022/#225-2022.11.28.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #225 | 2022-11-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +[近期线上活动:在 iPhone 锁屏上扩展你的 App 体验](https://developer.apple.com/cn/accelerator/) + +内容简介:发现如何利用 iPhone 锁屏上的特性,进一步扩展你的 App 体验。学习如何利用锁屏小组件、实时活动以及通知,为用户创造更丰富的体验。感兴趣的同学可以在 12 月 7 日前进行报名。 + +## 文章 + +### 🌟 🐢 [当谈论协程时,我们在谈论什么](https://mp.weixin.qq.com/s/IO4ynnKEfy2Rt-Me7EIeqg) + +[@Leo](https://github.com/leomobiledeveloper):一篇关于协程的优秀文章,内容由浅到深,通过一些实际例子回答了以下四个问题: + +- 为什么需要协程? +- 到底什么是协程? +- 怎么实现协程 (库)? +- 使用协程时需要注意什么? + +### 🐕 [双十一|探索 KUN 的加载性能与增强体验](https://mp.weixin.qq.com/s/NWRCembLGrqPzelf7Evw-A) + +[@Crazy](https://github.com/jiyan135960):Kun 是闲鱼自研的终端渲染容器,从页面表现的结果来看已达到接近原生展开的性能。本文同时对如何处理 Kun 与 Web 兼容的问题进行了简单的阐述,并且在优化首屏模块渲染效率的问题上提出了一个完整的设计思路。本文中提到,在解决渲染速度慢的问题上,除去简单的资源预加载与接口预请求的方式外,还可以将将互动区域代码合并到页面渲染框架中来提升整体页面渲染速率。并且可以优化接口返回,实现本地与远端合并页面 ui 的方式,来达到近似于原生的加载速度。当然后面两项优化脱离不开整体 Kun 框架的帮助,对 Kun 感兴趣的同学可以更加关注 Kun 的开源动态,本文值得大家仔细阅读。 + +### 🐕 [淘宝拍立淘 iOS 相册架构设计小结](https://mp.weixin.qq.com/s/ldbwl9nLxWyyBmk3bgX82A) + +[@zoeGuo](https://github.com/zoeGuo):拍立淘相册作为拍立淘业务的基础功能,已经在线上运行多年。随着不断迭代发展,业务代码也不断增多,遇到了模块化能力与业务代码耦合、架构分层不清晰和一定的用户体验问题。文中详细介绍了相册整体架构的分层设计与实现: +- 接口层:相册的对外接口(适配层、API) +- 视图定制层:相册的展示链路(MVVM 架构) +- 逻辑管理层:相册的读取链路(包括读取 Asset 和获取源文件)、相册的变更链路(观察者模式)、相册的体验优化(预加载、缓存回收) + + +文章结尾还介绍了有关相册实现的几个细节:App 隐私报告、“ Limited Photo Library Access ” 、支持 iCloud 选取、多线程问题。文章对正在开发相册类功能或对相册类应用感兴趣的读者会有所帮助和启发。 + +### 🐎 [优先级反转那些事儿](https://mp.weixin.qq.com/s/kp6cdDrdQ4rhfdXH-_Q8IA) + +[@Damien](https://github.com/ZengyiMa):优先级反转,是指某同步资源被较低优先级的 进程/线程 所拥有,较高优先级的 进程/线程 竞争该同步资源未获得该资源,而使得较高优先级 进程/线程 反而推迟被调度执行的现象。本文是字节跳动终端技术团队基于线上卡死问题出发,从底层分析了出现的优先级反转的场景以及处理方案。对多线程相关感兴趣的同学值得一读。 + +### 🐕 [@dynamicCallable in Swift explained with code examples - SwiftLee](https://www.avanderlee.com/swift/dynamiccallable/) + +[@Barney](https://github.com/BarneyZhaoooo):本文用丰富的示例,对 @dynamicCallable in swift 进行了详细介绍。 + +- **Why does Swift provide dynamic interpolation?** +- **What is @dynamicCallable used for?** +- **How to implement @dynamicCallable** +- **Combining @dynamicCallable with @dynamicMemberLookup** + +### 🐎 [clipped() doesn’t affect hit testing](https://oleb.net/2022/clipped-hit-testing/) +[@Smallfly](https://github.com/iostalks):SwiftUI 提供 `clipped()` 函数对视图进行裁剪,但是该裁剪函数不会影响事件响应,被裁减区域依然支持点击。`contentShape(_:)` 用于定义视图事件响应区域,配合该函数可以屏蔽裁减区域的点击事件。 + +### 🐕 [Using complex gestures in a SwiftUI ScrollView](https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view) + +[@享耳先森](https://github.com/iblacksun):SwiftUI 因其高级的封装大大的简化了界面搭建复杂度,但在某些特定场景中显得能力不足。本文介绍了在 ScrollView 内部嵌套其他手势时遇到的问题以及可能的解决方案。 + + +## 工具 + +### 🐎 [LaunchAtLogin: Add “ Launch at Login ” functionality to your macOS app in seconds](https://github.com/sindresorhus/LaunchAtLogin) + +[@Cooper Chen](https://github.com/cjlcooper):`LaunchAtLogin` 是一个针对 Mac 桌面应用开发者,在 macOS13 以下系统,给程序快速添加登录自启动功能的三方库。相较于系统自带的 `SMAppService` 接口,`LaunchAtLogin` 在与系统旧版本的兼容性、API 设计方面以及对 SwiftUI 支持方面都有较好的实践。 + +## 代码 + +### [Xcode 14 打包,iOS 16 ,`-[AVPlayer replaceCurrentItemWithPlayerItem:]` 崩溃](https://github.com/Baseflow/XamarinMediaManager/issues/814) + +[@JonyFang](https://github.com/JonyFang): 一般使用场景是在画中画切换视频的时候需要用到(如果分辨率变了需要加一段黑屏的),适配了 ` 画中画 ` 的 APP 记得处理。对应的解决方案,可做参考。 + + +## 摸鱼周报 + +[@摸鱼周报 #76](https://mp.weixin.qq.com/s/UmXvtKYS6Z0a30yPRyIV9g):第 76 期摸鱼周报来了,一起来看下本期概要: + +* 本周学习:程序员如何有效提问 +* 内容推荐:SwiftUI 相关的一些博客推荐 +* 摸一下鱼:Combine 操作符辅助理解的图示总结;Token,Session,JWT 这些鉴权技术有哪些区别?Mac 版微信为何不断往电脑中写日志?;Github 开源两款字体;一个摸鱼小网站。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 - AliExpress -iOS/Android/FE + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#226-2022.12.05.md b/Reports/2022/#226-2022.12.05.md new file mode 100644 index 000000000..8dad40cc6 --- /dev/null +++ b/Reports/2022/#226-2022.12.05.md @@ -0,0 +1,90 @@ +# 老司机 iOS 周报 #226 | 2022-12-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [How to fix "The compiler is unable to type-check this expression in reasonable time" error](https://sarunw.com/posts/how-to-fix-the-compiler-is-unable-to-type-check-this-expression-in-reasonable-time/) + +[@zoeGuo](https://github.com/zoeGuo):"The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions" 可能是新手经常遇到的编译器报错,出现问题时,注释可疑代码可以快速定位问题,对问题代码中的表达式做出合理简化即可解决报错。文章提供了一些良好的分解、简化表达式的示例,对新手开发者会有所帮助。 + +## 文章 + +### 🌟 🐢 [C++ exception handling ABI](https://maskray.me/blog/2020-12-12-c++-exception-handling-abi#%E4%B8%AD%E6%96%87%E7%89%88) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍的虽然是 C++ 的 Exception 处理,但其实 iOS 开发者非常熟悉的 NSException 其实也是由 ``objc_exception_throw()`` 方法中调用 ``__cxa_throw()`` 抛出的,而 ``__cxa_throw()`` 其实就是 C++ 的异常抛出。因此可以说 NSException 的抛出链路以及后续处理是与在 C++ 中直接 ``throw`` 是一摸一样的。之前我们也介绍过 [Stack unwinding](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2022/%23224-2022.11.21.md#-stack-unwinding) 相关的内容,大家可以先了解 unwinding 相关的内容再阅读本文,这对于我们加深对栈回溯以及如何实现 Exception handling 会有更深的理解,甚至也可以尝试 `` 捕获没有被 catch 的 NSException 防止崩溃并恢复到合适的调用栈让程序运行下去 `` 类似的线上兜底方案。本文大致内容如下: +- 介绍了简化版本的 exception 处理流程(从 throw 到 catch) +- Level 1 Base ABI,描述了语言无关的 Stack unwinding 部分,定义了 _Unwind_* API ,llvm 中也有 [libunwind](https://github.com/llvm-mirror/libunwind) 对应的实现 +- Level 2 C++ ABI,定义了 ``__cxa_*`` 开头的对应 API ,上文提到的 ``__cxa_throw()`` 就是在这一层定义的 + +### 🐕 [领域驱动设计四论](https://mp.weixin.qq.com/s/SMAycMJPWr018sU04kbfbQ) + +[@莲叔](http://aaaron7.github.io/):很多同学在学校中,学《软件工程》读《人月神话》,往往对复杂软件工程充满了幻想。但毕业投身互联网公司后,发现绝大多数项目的节奏、架构与实现似乎都与理论知识相去甚远。慢慢的我们不再关注那些伟大的设计思想,只剩满脑子的敏捷开发、动态化和热修复。这篇文章从略微偏理论的角度总结了领域驱动设计思想的几个方面,分别用于解决什么问题,怎么解决的。读完颇有一种如沐春风的感觉,不仅仅是对于这一理论的学习,更多的是从了解 DDD 如何解决软件工程复杂度获得启发,获得一个全新的视角去看待目前手头的业务与项目。推荐你耐心读完,会有启发。 + +### 🐎 [Testing async/await exceptions](https://arturgruchala.com/testing-async-await-exceptions/) + +[@Smallfly](https://github.com/iostalks):单元测试是保障代码健壮性的重要手段,Apple 先后提供了 `XCTAssertThrowsError(expression:)` 和 `@frozen enum Result where Failure : Error` 等异常检测方法,但对于 `async/await` 这样的协程来说并不友好。本文介绍了一种 `async/await` 风格的异常测试方法,能简化一些重复代码,推荐有需要的同学阅读。 + +### 🐕 [支付宝客户端体验度量与诊断](https://mp.weixin.qq.com/s/SC2DI2kWveSE1L3aBrP7og) + +[@Crazy](https://github.com/jiyan135960):本文是一篇针对性能监测设计方案讲解的佳作,写出了客户端现有的几种耗时类场景的监测方案与处理方案,虽然本文是以 Android 开发者视角来进行讲解,但其中的设计思路以及分析流程值得所有客户端开发者借鉴。本文通过以下四个方面来讲解了支付宝的性能监测是如何实现的: + +- 场景度量手段 +- 场景度量精度提升 +- 场景性能诊断 +- APM 性能平台 + +其中关于场景度量手段、场景度量精度提升与 APM 性能平台部分的讲解值得所有客户端开发者阅读,而关于场景性能诊断的讲解值得 Android 开发者仔细阅读。 + +### 🐕 [Stable Diffusion with Core ML on Apple Silicon](https://machinelearning.apple.com/research/stable-diffusion-coreml-apple-silicon) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):自 2022 年 8 月首次公开亮相以来,Stable Diffusion 已被充满活力的艺术家、开发人员和爱好者等社区采用,只需输入文本即可创建前所未有的视觉内容。苹果公司通过对 Apple Silicon 芯片的进一步优化,Core ML Stable Diffusion 模型可以更充分利用 M 系列芯片中的神经引擎和苹果 GPU 架构的优势。如要开始使用,可以访问[Core ML Stable Diffusion](https://github.com/apple/ml-stable-diffusion) 代码存储库以获取有关基准测试和部署的详细说明。 + +### 🐕 [一个 WebKit Bug 导致小程序页面跳转失败的问题的排查经历](https://mp.weixin.qq.com/s/Qif83v-b9MSae-a3D3IQAQ) + +[@水水](https://www.xuyanlan.com/):作者从收到一个小程序在调用 my.redirectTo() 之后,再调用 my.navigateTo() 时无响应,无法跳转下一个页面的线上问题反馈说起,到排查到是因为一个 WebKit Bug 导致的过程完整的进行了阐述。是一个比较少见的排查难度较高、问题根因较深的问题,文章将排查期间的思考记录下来,希望也可以为读者做参考。作者最后也提醒我们:人的固定认知,不一定就是对的 ~ + +## 音视频 + +### 🐢 [How to contribute a new feature to Swift?](https://www.youtube.com/watch?v=E1iMyjRpGHk) + +[@Cooper Chen](https://github.com/cjlcooper):众所周知,Swift 语言作为新一代的开发语言,其开源的特质使得开发者能够更加灵活高效的为其提供新的特性,本视频详细叙述了开发者如何为 Swift 贡献新的 feature ,其中针对开发者如何从提交一个提案到最终解决方案上线给出了详细的流程步骤解释。而对于想要为 Swift 社区提供建议和想法的开发者,视频也给出了如下建议: +- 定期阅读和浏览 Swift 表单 +- 积极在社区进行反馈,并及时了解社区正在寻找的功能是什么 +- 分享你的想法,并且将这个想法让更多人了解 +- 尝试自己动手或与其他开发者合作 +- 关注其他人的反馈 + +## 摸鱼周报 + +[@摸鱼周报 #77](https://mp.weixin.qq.com/s/yYdGO1kRcwQJ3-z-aavHYA):第 77 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:圣诞节将至,请为您的 App 做好准备; Developer 设计开发加速器|如何在游戏中支持手柄、在 iPhone 锁屏上扩展你的 App 体验 +* 本周学习:class_rw_t 与 class_ro_t 的区别,面向面试的知识总结 +* 内容推荐:Swift 优秀文章推荐,涉及协程,类型转换以及 `inlinable` 关键字讲解 +* 摸一下鱼:CSDN 上线的工具箱工具「猿如意」;Roadmap.sh 一个总结技术路线图的网站;email 是如何工作的,一张图来告诉你;正则表达式速查卡 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#227-2022.12.12.md b/Reports/2022/#227-2022.12.12.md new file mode 100644 index 000000000..29ae58bc0 --- /dev/null +++ b/Reports/2022/#227-2022.12.12.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #227 | 2022-12-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Foundation 将使用 Swift 重新实现](https://www.swift.org/blog/future-of-foundation/) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队宣布计划 Foundation 将使用 Swift 重新实现: + +- **不再基于 C 的实现进行封装**。不再基于 CoreFoundation,不会再有额外的性能消耗在桥接上。纯 Swift 实现,以便社区参与开发和讨论。 +- **拆分成多个模块,不再作为一个单一模块存在**。核心部分只保留 Swift 需要的功能(`Data`/`URL` 等),其余的按照功能分类拆分开,以便提升跨平台开发体验。 +- **统一 Foundation 的实现**。目前 Foundation 分为两个版本,一个是 Darwin 平台的版本,另一个是跨平台开源的 [swift-corelibs-foundation](https://github.com/apple/swift-corelibs-foundation),后续会统一并且开源。 + 其中 Objective-C 的基础功能和 Apple 平台的业务功能可能不会开源,在 Darwin 平台继续使用之前的版本。 + +目前还在计划阶段,**最终目标是将新版 Foundation 开源出来**,正在积极获取社区的反馈,初步拆分计划也可以看 [Swift 论坛的帖子](https://forums.swift.org/t/what-s-next-for-foundation/61939)。 + +一句话总结,Swift is the new Foundation! + +### [Apple 宣布 App Store 定价机制最重大升级,新增 700 个价格点](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3771) + +Apple 宣布对 App Store 进行问世至今最全面的定价机制升级,为开发者提供新增的 700 个价格点和全新定价工具,让开发者更轻松地针对不同国家和地区的 App Store 设定价格、管理外币汇率变化等。 + +##  Developer - 设计开发加速器 + +### [Ask Apple starts December 12](https://developer.apple.com/events/ask-apple/) + +今年最后一次 Ask Apple 在本周二正式开始,苹果在 周二中午 12 点-下午 1 点 特地为中文开发者开设了 App Review 相关的开放式问答机会,交流频道位于 " 集锦-简体中文 "。据悉本次 App Review 频道的内容只有中文频道会有,这是对于审核相关内容的直接交流途径,大家有相关问题可以直接在频道内进行提问,苹果会尽量回答每一个问题。 +同时本次 Ask Apple 也惯例会有其他主题的咨询,错过本次活动就得 WWDC23 才有更好的机会了。 + +## 文章 + +### [性能提升 2.5 倍!字节开源高性能 C++ JSON 库 sonic-cpp](https://mp.weixin.qq.com/s/ExKL8G-Tgx4sXW6a4NwY4w) + +[@anotheren](https://github.com/anotheren): JSON 作为一种可读性较高的数据交换格式,广泛使用于各种前后端数据交互的场景。本次字节开源的 [sonic-cpp](https://github.com/bytedance/sonic-cpp) 主要是作为服务端的性能优化方案推出。大部分情况下,客户端不会遇到这种性能/资源问题,更多考虑的是便捷程度以及和同网络组件的系统集成问题。如果你也面临大数据量的 JSON 读写,可以看看这个库。 + +### 🌟 🐕 [Flutter 的下一步, Dart 3 重大变更即将在 2023 到来](https://mp.weixin.qq.com/s/L4yMoTlAcVcBV58OdBIo8w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):在过去的四年里 Dart 已经发展成为一门高效、可移植的现代化语言. 下一个版本 Dart 3 将达到可靠的 null 安全语言. 同时也带来了一些新特性,比如 `patterns`。 Dart 开发团队同时也在努力支持将 Dart 代码编译为 Wasm ,Wasm 能让 Flutter Web 在浏览器中作为完整的原生代码运行。 + +### 🐎 [Metal 每日分享 - 系列专栏](https://juejin.cn/column/7168399660153831460) + +[@Damien](https://github.com/ZengyiMa): Metal 是 Apple 推出的一个和 OpenGL ES 类似的面向底层的图形开发套件,通过使用相关的接口可以直接操作 GPU,本专栏是基于 Metal 技术的系列文章,囊括了很多 Metal 实战相关的技术文章,并且更新频率较高,对 Metal 相关领域感兴趣的同学不妨收藏阅读。 + +### 🐢 [Flutter for Web 首次首屏优化 - JS 分片优化](https://mp.weixin.qq.com/s/aeI_64dT9nHMrHajeQctAw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter for Web 上线已久,国内在用的团队不多,所以本篇是一个不可多得的经验篇。使用 Flutter for Web 时有一个明显的问题:其编译产物 main.dart.js 较大,初始的 Hello world 工程编译后产物 js 大小为 1.2 MB,本文详细解讲解了如何通过 JS 分片优化编译产物加载提升首屏加载速速,感兴趣的同学可以参考一番. + +### [聚焦探索 In-App Purchase 新特性](https://mp.weixin.qq.com/s/zzeFoUKA7jXcCaKtcgaiiQ) + +[@iHTCboy](https://github.com/iHTCboy):本文主要聚焦于 In-App Purchase 内购商品的测试。在 Xcode 12 之前,App 内购买项目是不能在 Xcode 模拟器中进行购买,只能使用真机进行测试内购充值,因为模拟器无法连接到 App Store 服务器进行交易。苹果在 WWDC20 推出了 StoreKit Testing,通过 Xcode 12 创建 StoreKit 配置文件和搭建本地测试环境,实现本地 App 内购买和验证收据等测试流程,而无需依赖 App Store 服务器。而今年的 WDC22 苹果对 StoreKit 测试流程改进完善,包含 Xcode 14 中测试功能的优化,支持订阅商品更多场景的测试,还有 StoreKit 配置文件通过 App Store Connect 自动同步等等。 + +### [App Store Connect 中的新特性及最佳实践](https://mp.weixin.qq.com/s/ljMZXAhVZhxzoeMU7VAssw) + +[@chenjiamin1130](https://github.com/chenjiamin1130):本文对本次 WWDC22 中更新的三个 session:10043、10044、110404 进行了归纳整理,梳理了本次更新中 App Store Connect 的新特性,并对其中的重要更新功能:增强的 App Store 提交体验、应用基准测试工具、用户订阅状态即时获取,展开了最佳实践讨论。 + +## 工具 + +### 🐕 [实现无入侵式 C++ 代码 mock 工具](https://mp.weixin.qq.com/s/Kc16Q9Fh30sK9eFB8SfADQ) + +[@J_Knight_](https://github.com/knightsj): 本文作者基于开源 Hook 框架 Frida-gum 提供的 API,利用 C++ 模板进行封装,编写了一个可跨平台的(MacOS、Linux、Windows、Android、iOS 等) mock 工具。作者先结合代码介绍了该工具的主要功能(函数替换,mock 函数的调用次数,函数的回滚操作等等),然后再结合代码来讲解如何使用该工具来实现这些功能。 + +## 摸鱼周报 + +[@摸鱼周报 #78](https://mp.weixin.qq.com/s/27J4NguYRsxYWmff_6iDcg):第 78 期摸鱼周报来了,一起来看下本期有哪些有趣的内容: + +* 本期话题:用 ChatGPT 做点好玩的事:微信聊天机器人「wechat-chatgpt」和 VSCode 插件「ChatGPT 中文版」;App Store 定价机制最重大升级 +* 本周学习:解决 Mac Intel 转 Apple Silicon 开发环境配置问题 +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖 ChatGPT、SwiftUI、Swift 等方面的内容 +* 摸一下鱼:本期摸鱼带来可以无限生成配色组合的网站 **randoma11y**,听猫咪不同状态声音的网站 **purrli**,由前任天堂设计师的创意团队建立的像素风格的透明素材网站 **dotown**,以及在 Webstorm 中配置 Touchbar 的指南。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#228-2022.12.19.md b/Reports/2022/#228-2022.12.19.md new file mode 100644 index 000000000..95f2d0ffc --- /dev/null +++ b/Reports/2022/#228-2022.12.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #228 | 2022-12-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [D2 脑图 | 第十七届 D2 终端技术大会](https://www.yuque.com/d2conference/17thd2map) + +上周末 D2 完成了所有的分享,内容干货满满,这是对所有 22 场分享的笔记,错过直播的同学可以快速查看浏览脑图整理。 + +## 文章 + +### 🐕 [How to manage build settings using Xcode configuration files](https://www.danijelavrzan.com/posts/2022/11/xcode-configuration/) + +[@享耳先森](https://github.com/iblacksun):相信大家的 App 都会遇到多环境构建的问题,比如 QA 、预发、Production 环境,一不小心在提审时候还容易搞错版本。本文介绍了利用 `xcconfig` 文件做环境配置,比如不同环境使用不 App Icon 或 App Name。 + +### 🐕 [从 Linux 零拷贝深入了解 Linux-I/O](https://mp.weixin.qq.com/s/j1KjR5bRQV6oGrU5tsyHgg) + +[@老驴](https://weibo.com/u/6090610445):腾讯技术出品的一篇介绍 Linux 零拷贝的文章。在 iOS 开发中,大家可能或多或少都接触过 mmap,但是可能知道 mmap 只是零拷贝其中一种的同学并不多,Linux 还有其他的零拷贝实现形式来优化数据的读写。 + +### 🐎 [Security Application Static Analysis applied to iOS and Gitlab CI](https://benoitpasquier.com/2022/07/security-application-static-analysis-applied-to-ios-and-gitlab-ci/) + +[@红纸](https://github.com/nianran):在本文中作者分享将安全测试工具([MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)) 集成进入 Gitlab Runner 中,以此来检测代码的安全性,并自定义脚本转换输出结果,产出可靠的分析报告。对于 CI/CD 感兴趣的同学可以做个参考。 + +### 🐕 [any Idea How to Use some Generics?](https://async.techconnection.io/talks/frenchkit-2022/antoine-van-der-lee-any-idea-how-to-use-some-generics/) + +[@AidenRao](https://weibo.com/AidenRao):一篇关于泛型的视频演讲。在你的实现中可能并不喜欢使用泛型,因为它看起来很复杂且难以编写。本篇演讲有丰富的代码实例,帮助你在 swift 中理解和使用泛型。如果你不喜欢看视频,也可以阅读这篇博客,它包含视频演讲里的所有内容:[Generics in Swift explained with code](https://www.avanderlee.com/swift/generics-constraints/) + +### 🐕 [哔哩哔哩 Android 打包优化与云编译](https://mp.weixin.qq.com/s/xls_AL9IyR3580zz8CfCOA) + +[@Crazy](https://github.com/jiyan135960):本文是一篇侧重于 Android 云编译方面的介绍性文章,讲解了云编译的流程与打包优化的方向。本文主要对 d8 的流程以及 hook 方案进行了分析与讲解,并且对编译的优化也提出了切实可行的方向性建议,值得有需要开发云编译平台或思考如何优化打包速度的同学进行学习与参考。 + +### 🐕 [Understanding SwiftUI view lifecycles](https://oleb.net/2022/swiftui-view-lifecycle/) + +[@EyreFree](https://github.com/EyreFree):作者编写了一个展示 SwiftUI 生命周期的应用,这个应用能让你观察不同的 SwiftUI 结构和容器如何影响视图的生命周期,包括它的状态的生命周期和 `onAppear` 什么时候被调用。应用的代码开源在 GitHub([ole/swiftui-view-lifecycle](https://github.com/ole/swiftui-view-lifecycle))上,可以在 iOS 和 macOS 平台编译,正在学习 SwiftUI 的同学可以试试,对理解视图树和渲染树以及视图生命周期和状态有一定的帮助。 + +### 🐕 [Testing Apps with an iPhone and the CarPlay Simulator](https://www.createwithswift.com/testing-apps-with-an-iphone-and-the-carplay-simulator/) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了如何使用 Apple 全新独立 CarPlay 模拟器应用程序在 iPhone 和 Mac 上测试支持 CarPlay 的应用程序。 + +### 🐢 [利用 Virtualization 构建虚拟机,从未如此简单](https://mp.weixin.qq.com/s/t7WNfN4snPM70Q91rc-ScQ) + +[@mellow](https://github.com/midmirror): 本文介绍了平台虚拟化技术的方案类型,分析了 macOS 上的虚拟化方案。通过 Virtualization.framework 和基于这个框架的命令行工具,我们一起创建可用的 macOS 虚拟机、Linux 虚拟机(GUI)、Linux(CLI),感受现代虚拟机强大的性能。利用 Virtualization 打造属于专属自己的虚拟机,从未如此简单! + +## 工具 + +### 🐎 [iOS 代码规范工具 SwiftLint SwiftFormat](https://juejin.cn/post/7171725810544738317) + +[@zoeGuo](https://github.com/zoeGuo):文章简要介绍了 SwiftLint、SwiftFormat 两种代码格式工具的安装步骤以及使用技巧,读者也可以通过文中链接的各工具官网获取更多使用信息。 + +- SwiftLint:强制检查 Swift 代码风格和规定的工具,以 [Ray Wenderlich's Swift 代码风格指南](https://github.com/kodecocodes/swift-style-guide)为基础。 +- SwiftFormat :快捷格式化 Swift 代码的工具。 + +## 摸鱼周报 + +[@摸鱼周报 #79](https://mp.weixin.qq.com/s/HdEhmXt60853tzM6xiVUwA):第 79 期摸鱼周报来了,一起来看下本期概要 + +* 本期话题:iOS 16.2 发布,带来了无边记 App +* 本周学习:Xcode 僵尸对象 Zombie Objects +* 内容推荐:几篇 Swift 相关的文章 +* 摸一下鱼:再次解读灵动岛的定位;面相算法初学者的算法书「Hello 算法」;关于独立开发如何养活自己的讨论 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#229-2023.01.09.md b/Reports/2023/#229-2023.01.09.md new file mode 100644 index 000000000..036babfba --- /dev/null +++ b/Reports/2023/#229-2023.01.09.md @@ -0,0 +1,119 @@ +# 老司机 iOS 周报 #229 | 2023-01-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~欢迎慕牧(zoeGuo)加入周报组织。慕牧从事 iOS 开发多年,目前在做音视频、直播相关业务场景的开发,除了音视频相关的知识外,对 App 卡顿、稳定性也比较感兴趣。希望慕牧的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [AppCode 2022.3 发布以及停止销售和支持](https://blog.jetbrains.com/zh-hans/appcode/2022/12/appcode-2022-3-release-and-end-of-sales-and-support/) + +[@红纸](https://github.com/nianran):AppCode 是一款由 JetBrains 推出了 iOS 和 macOS 应用开发 IDE。由于没有达到官方希望的市场份额,官方近日宣布,在 AppCode v2022.3 发布后,将停用该产品。在 2023 年 12 月 31 日之前,官方将继续提供专门解决 Xcode 14 兼容性问题的技术支持和版本更新,以及必要的关键安全更新,更新的范围将仅限于这两个领域。 + +### [Flutter 深度用户,字节跳动如何落地实践?](https://mp.weixin.qq.com/s/s_91C-nSe3grUxOfKCvOJg) + +2023 年 1 月 14 日下午 2 点,字节跳动技术沙龙将作《深度解析 Flutter 技术探索与实践》主题分享,带来包括新一代渲染引擎 Impeller、Android 系统渲染线程 GLFunctor 的应用以及 HappinessX 开发套件强大功能等多个分享。此外,阿里集团 aliflutter 组织 Hummer 引擎技术专家也将作为特邀嘉宾带来精彩分享。对 Flutter 感兴趣的同学切勿错过! + +## 文章 + +### 🌟 🐕 [合集:SwiftUI 与 Core Data](https://www.fatbobman.com/tags/swiftui/) + +[@JonyFang](https://github.com/jonyfang): 合集共分4篇,依次介绍 SwiftUI 与 Core Data 的问题、数据定义、数据获取及安全地响应数据。 + +1. 第一篇 - [SwiftUI 与 Core Data -- 问题](https://www.fatbobman.com/posts/modern-Core-Data-Problem/): 列举了一些在 SwiftUI 中使用 Core Data 所遇到的困惑及期许。 +2. 第二篇 - [SwiftUI 与 Core Data -- 数据定义](https://www.fatbobman.com/posts/modern-Core-Data-Data-definition/): 从数据( 对应 Core Data 的实体、属性 )的定义谈起,尝试通过泛型、类型擦除等方式从定义中移除托管环境。 +3. 第三篇 - [SwiftUI 与 Core Data -- 数据获取](https://www.fatbobman.com/posts/modern-Core-Data-fetcher/): 介绍如何在视图从 Core Data 中获取数据的操作这一过程中实现与托管环境解耦,创建一个可以接受 Mock 数据的自定义 FetchRequest 类型。 +4. 第四篇 - [SwiftUI 与 Core Data -- 安全地响应数据](https://www.fatbobman.com/posts/modern-Core-Data-Respond-Data-safely/): 探讨如何在 SwiftUI 中安全地响应数据,如何避免因为数据意外丢失而导致的行为异常以及应用崩溃。 + +### 🐢 [Using C++ from Swift](https://github.com/zoecarver/swift/blob/docs/interop-roadmap/docs/CppInteroperability/ForwardVision.md) + +[@AidenRao](https://weibo.com/AidenRao):目前要在 Swift 中使用 C++ API,必须封装在 C 或 Objecive-C 桥接层中。这些桥接层通常是错误、性能问题和表达能力限制的根源,允许 Swift 直接使用 C++ API 将可以删除这些桥接层。 + +本文档阐述了 C++ 和 Swift 互操作性的开发愿景草图,它设定了推动项目设计决策的总体目标,概述了一些与 C++ 互操作性相关的高级主题,最后研究了一组特定的 API 模式,并为编译器导入它们提出了可能的方法。 + +### 🐎 [Prototyping SwiftUI interfaces with OpenAI's ChatGPT](https://www.createwithswift.com/prototyping-swiftui-interfaces-with-openais-chatgpt/) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了最近很火的 ChatGPT 可以根据给定的提示生成对应的可使用的 SwiftUI 代码。例如在文章中,用户要求 ChatGPT 创建一个显示所有心形表情的列表和表情的名称的 SwiftUI 应用程序,ChatGPT 能够快速地生成其实现代码。通过 ChatGPT 生成可用的 SwiftUI 代码,可以进行快速原型化或为复杂的界面生成代码,对于开发人员来说是一个比较有用的工具。 + +### 🐎 [一种大幅提升iOS In-App Purchases 内购测试效率的方法](https://juejin.cn/post/7173942907890565151) + +[@Smallfly](https://github.com/iostalks):大部分 App 都包含内购项,iPhone App 虚拟支付,只允许走 In-App Purchase。苹果推荐使用 TestFlight 包进行内购测试,然而生成该内购包流程需要经过构建上传机审等等,测试成本非常高。本文推荐了一种企业包重签名的方式,将生成内购测试包控制在 30s 内,大幅度提高内购测试效率。 + +### 🐕 [一文读懂 Xcode 代码索引原理](https://cloud.tencent.com/developer/article/2204613) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Xcode 代码索引的工作原理:SourceKit 与 Xcode 通过 XPC 通信生成 Index Store;同时也解析了 Index Store 的构成(包括 DataStore 和 UniDB)。然后分享了一种跨设备共享代码索引的方案,在企微落地后优化了90%的全量索引耗时。 + +### 🐕 [Announcing Lottie 4.0 for iOS. A new rendering engine with significant… | by Cal Stephens | The Airbnb Tech Blog | Dec, 2022 | Medium](https://medium.com/airbnb-engineering/announcing-lottie-4-0-for-ios-d4d226862a54) + +[@Barney](https://github.com/BarneyZhaoooo) : 本文主要介绍了 Lottie 4.0 for iOS 那些令人振奋的改变! +简单总结如下: +1、使用 Core Animation 使性能进一步提升,不再因主线程繁忙而丢帧。 +2、支持 [dotLottie 动画文件](https://dotlottie.io/) ,其大小比标准 JSON 文件小得多。 +3、新的动画解码实现,比之前基于 *Codable* 的实现快约 2 倍。 + +### 🐢 [How to manage your Flutter monorepos](https://medium.com/flutter-community/how-to-manage-your-flutter-monorepos-b307cdc9399a) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):源码管理在大型项目上历来都是一个老大难,近年来比较流行的一个解决方案便是 `Monorepos` 。本文即是阐述如何在 Flutter 项目上实施 `Monorepos` ,手把手级别的教程,并且对该方案做了优劣对比,有相关难题亟待解决的同学可以参考学习一下。 + +### 🐕 [Faster Apple Builds with the lld Linker](https://eisel.me/lld#integrating-lld) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):链接是增量构建的主要瓶颈之一,每年有成千上万的开发人员时间花在等待调试构建链接上,因此链接器优化是一个重要主题。这篇博文将讨论 Apple 平台链接器优化的过去、现在和未来。其中 lld 是更快链接 iOS、macOS 等调试二进制文件的绝佳选择,它的完成时间是 ld64 的 50-80%,不过虽然谷歌将它用于生产构建,但作者认为 lld 目前并不适用于发布版本,lld 缺失 ld64 的某些功能,例如 ld64 的链式修复尚未针对 lld 进行充分测试,不过很明确的是链接速度现在正在获得应有的关注。 + +### 🐕 [头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患](https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg) + +[@xuyafei86](https://github.com/xiaofei86):ARC 环境下在多线程中执行赋值代码可能会产生野指针,导致 EXC_BAD_ACCESS 崩溃。这种崩溃发生的概率很低,在开发和灰度阶段即使执行到相应代码也很难崩溃,因此容易遗漏到正式环境。在上亿级用户的 App 往往会成为 Top 问题,对指标造成影响,并且很难排查。 +今日头条在治理 Crash 的过程中彻底解决了数十个此类崩溃,发现其具有一定共性。本文详细分析崩溃发生的过程,以及总结了容易出现问题的场景,希望在大家遇到此类问题时能提供一些思路。 + +### 🐕 [Static vs Dynamic Frameworks on iOS — a discussion with ChatGPT](https://www.emergetools.com/blog/posts/static-vs-dynamic-frameworks-ios-discussion-chat-gpt) + +[@老驴](https://weibo.com/u/6090610445):这段时间 ChatGPT 挺火,很多人开始思考 AI 是不是真的已经到了可以替代人类完成一些技术类型的编码工作了。这篇文章用 ChatGPT 作为引子,给读者介绍了 iOS 开发中静态库和动态库从工作原理到性能影响的区别,介绍的非常深入,值得一度。不过最后,从 ChatGPT 的不完善的回答中,还是能看出现阶段 AI 还是有其一定局限性,还不能完全替代人类在编程上的作用。 + +### 🐕 [Swift 正则速查手册](https://onevcat.com/2022/11/swift-regex/) + +[@zoeGuo](https://github.com/zoeGuo):Swift 5.7 中引入了正则表达式的语法支持,笔者在文章开头提出:“构建一个正则表达式的方式,分为传统的正则字面量构建,以及通过 Regex Builder DSL 的更加易读的方式。后者可以内嵌使用前者,以及其他一些已有的 parser,在可读性和功能上要强力很多。”文中就常见字面量、Builder DSL、常用 Parser、匹配方式进行了示例和解释;文末还对 Swift Regex 优缺点进行了总结。对 Swift 正则表达式的使用有疑惑的读者也许可以从文中寻找到答案。 + +## 音视频 + +### 🐢 [2022 LLVM Dev Mtg: Implementing Language Support for ABI-Stable Software Evolution in Swift and LLVM](https://www.youtube.com/watch?v=MgPBetJWkmc) + +[@kemchenj](https://kemchenj.github.io):今年的 LLVM 大会苹果工程师 Doug 分享了 Swift 实现 ABI Stability 的过程和细节,整个演讲思路清晰,层层深入讲得非常简单易懂,让我感受到了高级开发工程师的深厚功力,其中让我印象最深的是关于 Resilience Domain 这个抽象的引入。 + +实现 ABI 稳定需要付出一些额外的性能成本,因为不同版本的库,对于同一个结构体可能有不同的实现,例如新版本增加了字段,导致内存布局产生了变化,此时为了抹平这些实现的 ABI 差异,就需要引入额外中间层,一般来说这种性能消耗不会太大。 + +但对于 iOS/macOS 来说,引入了 Swift 的所有 SDK 都需要保持 ABI 稳定,大量的 SDK 互相调用时中间层带来的性能消耗就变得非常大。仔细想想其实它们之间互相调用时并不需要中间层进行转发,因为它们是一起编译出来的,它们的 ABI 对于同一版本的其它 SDK 来说是确定的。 + +Swift 将这样的一个“作用域”抽象为 **Resilience Domain**,处于同一个 domain 里的库互相调用的代码不会经过中间层的转发,指定好 Domain 之后 Swift 编译器就会自动为你处理好这一切,在保证 ABI 稳定的同时又尽可能地减少性能消耗,真的是非常棒的一个设计! + +## 摸鱼周报 + +[@摸鱼周报 #80](https://mp.weixin.qq.com/s/eIQLuAIsRQ7eeEnsrL5QuA):摸鱼周报第 80 期来了,一起来看下本期概要: + +* 本期话题: Developer 设计开发加速器|在 SwiftUI 中管理数据模型 +* 本周学习:iOS 堆栈调用理论回顾 +* 内容推荐:SwiftUI 文章推荐 +* 摸一下鱼:一款个人知识管理工具 MindForger,通过渲染高质量的图像、视频和动画展示数学之美;LearnGPT 了解 ChatGPT 有趣的回答;洞悉开源趋势的网站:ossinsight.io + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#230-2023.01.16.md b/Reports/2023/#230-2023.01.16.md new file mode 100644 index 000000000..a21a2c72c --- /dev/null +++ b/Reports/2023/#230-2023.01.16.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #230 | 2023-01-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Design Priorities for the Swift 6 Language Mode](https://forums.swift.org/t/design-priorities-for-the-swift-6-language-mode/62408) + +[@kemchenj](https://kemchenj.github.io):Swift 5 发布到现在已经快要五年了,Swift 6 预计最快明年就会发布,此前关于 Swift 6 的开发计划也曾在周报里收录过,这次 Swift 团队又发布了另一份关于功能开发优先级的声明,包括: + +- **Data-race safety by default**。Sendable 和 actor-isolated 检查将会默认以最严格的级别执行。 +- **Performance predictability**。大概率会有 source-break 的修改,以便提高运行速度和编译速度,另外也有一部分编译器 bug 需要调整语义才能够修复。 +- **Package ecosystem scalability**。 + +虽然 Swift 6 会有 source-break,但这个版本也会提供源码兼容模式,可以用 Swift 5 的模式进行编译,所以大家也不用过多担心。 + +## 新手推荐 + +### 🐕 [iPad大屏&Flutter多引擎适配之路](https://mp.weixin.qq.com/s/lgW6nOzz3dyA_smxRD-9Pw) + +[@极速男孩](https://github.com/BarneyZhaoooo): 本文介绍了在大屏中如何适配分屏的几种方式,并简单介绍了在 Flutter 中如何通过修改 c++ 层的代码,实现一个多引擎的方案既能同时显示两个视图,也能让 isolate 以及图片字体等资源实现共享。 + +## 文章 + +### 🐢 [Swift Native method swizzling](https://www.guardsquare.com/blog/swift-native-method-swizzling) + +[@Cooper Chen](https://github.com/cjlcooper):本文对 Swift 原生的方法交换的原理进行了分析。其中 Swift 的运行时将动态函数分派的责任从调用者转移到被调用者。Swift 在进行方法交换时,使用全局数据结构取代了对中间 objc_msgSend 函数的需要,这种设计保证了动态函数更好的运行时性能,并且对没有使用此功能的代码没有性能影响。随着新的动态特性的加入,Swift 和 Objective-C 之间的差距变得更小。 + +### [iOS APP添加桌面快捷方式](https://mp.weixin.qq.com/s/z_CfthCni7m1mKtM0KzH6g) + +[@JonyFang](https://github.com/jonyfang): 诉求:APP 内的某些功能,能够把入口添加到桌面,点击桌面的入口可以直接跳转至 APP 对应界面。其实很多APP目前都已经实现了类似的功能,比如支付宝、云闪付等等,其中的每一个独立功能都可以单独添加到桌面,本篇做的是方案调研、整理及试错,有类似诉求的读者可以参考下。 + +### 🐕 [Rive · GitHub](https://github.com/rive-app) + +[@Barney](https://github.com/BarneyZhaoooo): Rive 是一款全平台轻量级动画库,官网描述比 Lottie 体积小 10 倍,运行更快。这又小又快的 Rive 还不快来试一试~ + +### 🐎 [Limit Swift Concurrency's cooperative pool](https://alejandromp.com/blog/limit-swift-concurrency-cooperative-pool/) + +[@EyreFree](https://github.com/EyreFree): 本文介绍了如何通过设置和修改环境变量 `LIBDISPATCH_COOPERATIVE_POOL_STRICT` 来调整并发线程数,可以强制 Swift 运行时将协作池限制为特定数量个线程,对于某些调试情况和学习目的很有用,有需要的朋友可以看看。 + +### 🐕 [Swift Concurrency – Things They Don’t Tell You](https://wojciechkulik.pl/ios/swift-concurrency-things-they-dont-tell-you) + +[@zvving](https://github.com/zvving):Swift Concurrency 宣称为并发编程带来安全性的同时,也带来性能提升和更易读易维护的代码表达,避免数据竞争/线程爆炸/代码难以维护等一系列问题。在理想情况下(比如规避如下所有问题的情况下),的确可以达到『卖家秀』的效果: + +- 主线程调用 async / Task 不能假设执行是在特定(主)线程,包括同一函数的挂起/恢复,前后线程也不一定一致 +- Swift 并发模型应避免与经典同步方法(锁、信号量等)混合使用 +- Actor 不意味着不存在数据竞争 +- Task 需要管理优先级比避免 UI 任务阻塞 +- 模拟器与真机并发行为不一致 + +作者整理了 Swift Concurrency 使用的典型问题,通过这些问题的理解&规避,可以帮助你更好的使用苹果提供的并发编程模型。 + +### 🐕 [How to build a Chrome extension with Flutter Web](https://medium.com/flutter-community/how-to-build-a-chrome-extension-with-flutter-web-6518f9845171) + +[@Crazy](https://github.com/jiyan135960):本文是一篇关于 Flutter Web 在 Chrome 插件领域的一种运用,这是对 Flutter 应用场景的一种新的拓展。本文详细的阐述了从配置 manifest.json 到最后构建 pipeline 发布到 Chrome Web Store 的全部流程。大家可以根据文章中的图文讲解自己进行实践,创建一个属于自己的 Chrome 插件。 + +## 工具 + +### 🐎 [Managing multiple versions of Swift locally](https://www.polpiella.dev/managing-multiple-swift-versions-locally) + +[@zoeGuo](https://github.com/zoeGuo):我们的本地的可能会有多个 Swift 版本:可能有 Swift 发布的正式版本、 Swift Development Snapshots,还有可能有为其他架构而下载版本(比如 [WebAssembly](https://github.com/swiftwasm/swift/releases/tag/swift-wasm-5.7.1-RELEASE))。那么当本地有多个 Swift 版本时用什么工具管理呢?文章介绍了两种工具和他们简单的用法: +1. 使用 [Xcode ToolChains 功能](https://www.swift.org/download/#snapshots)可以切换或者删除相应 Swift 版本; +2. 使用命令行工具 [swiftenv](https://github.com/kylef/swiftenv) 可以安装、删除还可以指定 Swift 版本的作用域为全局或者某个目录下。 + +关于这两种方式的更多解释和用法可以到对应官网进行深入了解。 + +## 代码 + +### [swift-dependencies](https://github.com/pointfreeco/swift-dependencies) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个灵感来自于 SwiftUI 环境启发的依赖管理库。依赖项是应用程序中与不受控制的外部系统交互的类型和功能,这可能会在你的代码库和开发周期中导致许多问题: +- 不受控制的依赖性使得编写快速、确定性的测试变得困难 +- 许多依赖项在 SwiftUI 预览中无法正常工作 +- 与第三方、非 Apple 库(如 Firebase、web socket 库、网络库等)交互的依赖项往往是重量级的,需要很长时间才能编译 + +由于这些以及更多原因,我们应该控制依赖项,但是控制依赖项仅仅是个开始,一旦控制了依赖关系,就会面临一整套新问题: +- 如何才能以一种比在任何地方显式传递它们更符合人体工程学但又比拥有全局依赖性更安全的方式在整个应用程序中传播依赖性 +- 如何只覆盖应用程序的一部分的依赖项 +- 怎么能确定覆盖了一个功能在测试中使用的所有依赖项 + +这个库解决了上述所有问题,可以通过[查看文档](https://pointfreeco.github.io/swift-dependencies/main/documentation/dependencies/)来探索这个库附带的所有工具。 + +## 摸鱼周报 + +[@摸鱼周报 #81](https://mp.weixin.qq.com/s/Ek6W0MTBDP6PN1uxWQ5M_A):第 81 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题: Developer 设计开发加速器|探索 iPad 最新技术,Apple 推出 Apple Business Connect +* 本周学习:基础知识回顾:iOS 中的 const 修饰符 +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖如何保护剪切板内容、SwiftUI 的视图风格、iOS 应用启动优化等方面的内容 +* 摸一下鱼:基于 MarkDown 的写作工具以及一文多发的工具 openwrite;从 TimeMachine 中移除开发依赖包的工具 Asimov;查看个人 Github 全年使用趋势的 Github Trends;一份开源软件使用指南;AI 辅助 Code reivew 的工具。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#231-2023.02.06.md b/Reports/2023/#231-2023.02.06.md new file mode 100644 index 000000000..3403ccecc --- /dev/null +++ b/Reports/2023/#231-2023.02.06.md @@ -0,0 +1,125 @@ +# 老司机 iOS 周报 #231 | 2023-02-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 3.7 稳定版发布](https://mp.weixin.qq.com/s/DOUELDqCD5MlgGfW7bMpEw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.7 稳定版本发布,为开发者带来了不少新功能的同时也对原有功能做了不少优化和改进. + +- 新功能 + - 增强对 Material 3 的支持 + - 菜单栏和级联菜单 + - Impeller 预览版在稳定版渠道发布 + - 自定义上下文菜单 + - 后台 isolate + - 文本放大镜 + - 废弃 Bitcode + - iOS 平台视图应用 BackdropFilter + - 将 toImageSync 新增至 dart:ui 中 +- 工具 & 工程 + - 开发者工具 DevTools 的更新 + - iOS 发布校验 + - 字体资源支持热重载 + - 放弃对 macOS 10.11 到 10.13 版本的支持 + - 插件代码迁移至 Swift + - 国际化工具和文档 +- 优化 & 改进 + - 内存管理优化 + - 滑动优化 + - 全局的选择优化 + - 自定义着色器支持的改进 + - 减少 iOS 设备上动画效果的卡顿 + +### [AFNetworking 官方宣布正式弃用](https://github.com/AFNetworking/AFNetworking) + +AFNetworking 终于也到了寿终正寝的一天,虽然十分不舍,但拥抱 Swift 是大势所趋,推荐大家可以切换到 Alamofire 继续进行 iOS 开发。 + +##  Developer - 设计开发加速器 + +[探索 iPad 最新技术](https://developer.apple.com/events/view/) + +探索新近发布的全新 iPad 和 iPad Pro 的最新特性。很多 App 已经充分利用了 iPad 硬件、iPadOS 和 Apple Pencil 的能力,并开发了出色的 App 体验。本次课程将通过一系列创新性 App 的演示,带领您充分了解 iPad 最新技术特性,学习如何利用功能强大的 API 来让您的 App 在 iPad 的体验更上一层楼。报名时间截止 2 月 15 日。 + +## 文章 + +### 🌟 🐢 [通向 AGI 之路:大型语言模型(LLM)技术精要](https://zhuanlan.zhihu.com/p/597586623) + +[@xiaofei86](https://github.com/xiaofei86):“ChatGPT 出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型(LLM,Large Language Model)效果能好成这样;惊醒是顿悟到我们对 LLM 的认知及发展理念,距离世界最先进的想法,差得有点远。我属于既惊喜又惊醒的那一批,也是典型的中国人,中国人善于自我反思,于是开始反思,而这篇文章正是反思的结果。” + +### 🐢 [序列化和反序列化](https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html) + +[@Cooper Chen](https://github.com/cjlcooper):在大型软件工程中,为了实现与上下游各系统进行良好的对接,序列化和反序列化的选型往往是我们做系统设计的一个重要考虑因素。本文针对这个问题在多个角度进行分析和讲解,并对比了当前流行的几种序列化协议,给出了有价值的选型建议。 + +### 🐢 [OC 局部变量未初始化的危险性](https://juejin.cn/post/7187664196492853308) + +[@莲叔](https://github.com/aaaron7):千万不要被文章的名字骗了,文章的内容比标题所描述的详实得多。变量未初始化导致的问题几乎是所有程序员的老朋友了,毕竟稳定 bug 并不可怕,就怕他一会儿有一会儿有没有。未初始化变量的行为会随着语言、编译器、系统架构的不同而不同,经常会导致非常隐蔽的问题。这篇文章从一次 OC 遇到的未初始化变量问题开始,分析了在ARM架构中,OC 对象和其他数据类型在不初始化的时候的表现, 并通过汇编拆解了表象背后的原因,相信你看完本文对于这个问题会有很多的收获。 + +### 🐕 [BSBackTracelogger 学习笔记](https://juejin.cn/post/6910791727670362125) + +[@AidenRao](https://weibo.com/AidenRao):于一个 app 来说,检测主线程的卡顿是性能优化的一个重点,而其中一个重要的操作就是当在子线程监控到主线程卡顿时需要抓取主线程的堆栈来进行后续的操作,这篇文章主要来探索一下 BSBacktraceLogger 的原理,能增加对于操作系统的一些认识以及对于 mach-o 文件的了解。 + +### 🐕 [How To Speed Up Swift By Ordering Conformances](https://www.emergetools.com/blog/posts/how-order-files-speed-up-protocols) + +[@zvving](https://github.com/zvving):Swift 类型转换涉及大量类型一致性检查,运行性能一致为开发者诟病。文章结合 iOS16 对一致性检查的改进,通过二进制重排来提升小部分场景的启动性能。受限于优化针对低系统版本及类型转换代码,整体启动时间优化不会太显著,但作者围绕 iOS16 公开新方案结合经验进一步整合的思路值得参考。 + +### 🐕 [Swift 之 struct 二进制大小分析](https://juejin.cn/post/7191406877819797561) + +[@J_Knight_](https://github.com/knightsj):本文来自京喜开发团队,介绍了 struct 对比 Class的一些优劣势,重点分析对包体积带来的影响及规避措施。文章首先从安全性,效率性和内存泄漏这三个方面对比了 class 类型和 struct 类型的区别。然后重点分享了 struct 类型的内存问题以及对包体积大小的影响问题。最后介绍了如何平衡安全,效率,内存,二进制大小这几方面的方法。 + +### 🐕 [百度APP iOS端内存优化-原理篇](https://mp.weixin.qq.com/s/6_FGFU7-X7URMms6-ucyZQ) + +[@老峰](https://github.com/gesantung):本文介绍了 Mach 虚拟内存的特点包括内存报警、Jetsam机制、 内存压缩技术;以及内存管理的数据结构和Mach内核提供的内存操作接口等基础概念,同时对 OC 内存分配核心函数 alloc 做了源码分析,此外对iOS 端内存报警机制做了详细的源码分析涉及整体报警流程,系统初始化,报警线程等。 + +### 🐕 [69 篇文章带你系统性的学习音视频开发](https://mp.weixin.qq.com/s/oFXvXb0Lr_wETmHn7GqJxA) + +[@JonyFang](https://github.com/jonyfang): 这是一篇 iOS、Android 客户端开发同学系统性学习音视频开发知识的指南,其中索引的几十篇文章,覆盖了音视频基础知识、工具使用、工程示例、实战经验等主题,这些文章基本上构成了入门音视频开发并做一些功能实现和指标优化工作所需要的知识框架。 + +## 代码 + +### [dotdrop](https://github.com/deadc0de6/dotdrop) + +[@Smallfly](https://github.com/iostalks):用户根目录下的隐藏文件如果不小心被覆写,将无法撤销。`dotdrop` 提供了点文件的备份能力,并支持在不同主机上自定义同步。 + +### [Docker-OSX](https://github.com/sickcodes/Docker-OSX) + +[@红纸](https://github.com/nianran):Docker-OSX 是一个使用 Docker 容器在 OSX-KVM 上安装 macOS 的项目。它提供了 macOS Big Sur、Monterey、Catalina 等多个版本的镜像。你可以使用其在 Windows、Linux 上做一些安全研究。 + +### [AttributedString Builder](https://github.com/objcio/attributed-string-builder) + +[@zoeGuo](https://github.com/zoeGuo):AttributedString Builder 是一个可以将不同类型来源转化为 AttributedString 的 Swift 实现的开源工具,可以支持的类型有:普通格式的文本、Markdown、图片、SwiftUI Views、表格和 PDF 文档。实现思路值得学习~ + +## 摸鱼周报 + +[@摸鱼周报 #82](https://mp.weixin.qq.com/s/ck4Jn4Cq-yOs_mjAO-WacA):第 82 期摸鱼周报,一起来看下本期概要: + +* 本期话题:设计开发加速器线下活动:女性开发者社区日 +* 本周学习:Python 如何调用 Swift 程序 +* 内容推荐:涵盖现代 SwiftUI 编程探讨、可变视图、NSTimer、Swift Charts 等方面的文章推荐 +* 摸一下鱼:去中心化社交软件 Damus;2022 年最后欢迎的 Chrome 插件;一款通过工作流驱动提效的办公工具 monday + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#232-2023.02.13.md b/Reports/2023/#232-2023.02.13.md new file mode 100644 index 000000000..8d2789db5 --- /dev/null +++ b/Reports/2023/#232-2023.02.13.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #232 | 2023-02-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 5.7 在 iOS 16 以下的系统创建 Task 时可能会发生 Bad access](https://github.com/apple/swift/issues/63420) + +Swift 团队在迭代的过程中删去了 Concurrency 相关代码的一个字段,内存布局产生变化,导致 iOS 16 以下的系统在创建 Task 时,部分情况下内存访问会出错,导致崩溃。 + +目前已经在主线分支完成修复,按照去年的发布节奏,可能会在三月份发布的 Xcode 里带上这个修复。遇到这个问题的同学如果着急的话,可以先回退到 Xcode 13.x 版本。 + +##  Developer - 设计开发加速器 + +### [在 App 或游戏内创造无障碍体验](https://developer.apple.com/cn/accelerator/) + +通过 Apple 操作系统内置的辅助功能、辅助功能 API 和开发者工具,开发者们可以为每个用户创建绝佳的无障碍体验。了解如何通过视觉设计和辅助功能技术适配,让你的 App 或游戏对每个人可用。报名截止 2 月 20 日。 + +## 新手推荐 + +### 🐎 [如何实现 iOS 16 带来的 Depth Effect 图片效果](https://mp.weixin.qq.com/s/9ITEbW1_EGu_2vrVfrZ9lA) + +[@zoeGuo](https://github.com/zoeGuo): iOS 16 系统为我们带来了比较惊艳的桌面锁屏效果:Depth Effect。它可以使用一张普通图片当背景,同时可以在适当的地方遮拦住部分桌面组件,形成一种景深的效果。那么我们可以在自己的 App 实现类似的效果吗?文章介绍了如何使用[苹果机器学习官网](https://developer.apple.com/machine-learning/models/)提供的机器学习模型 DeeplabV3 一步步实现 Depth Effect 效果的。虽然 DeeplabV3 模型在具体应用中还有一定的局限性,但作为尝鲜体验也是非常不错的~ + +## 文章 + +### 🐕 🌟 [夸克 iOS Top1 JSC 崩溃攻克之旅](https://mp.weixin.qq.com/s/0DidXWLDeqXpsjGBv69ITQ) + +[@Leo](https://github.com/leomobiledeveloper):Top Crash 的排查一直是 iOS 开发中的一个难点,尤其是内存相关的问题,往往会崩溃到系统符号里,排查起来经常一头雾水。这篇文章是夸克团队在排查 JSC 崩溃的实践,涵盖了 Crash 分析的整体思路、工具建设和崩溃原理,文章质量较高,推荐阅读。 + +### 🌟 🐢 [The evolution of Facebook’s iOS app architecture](https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Facebook for iOS (FBIOS) 是 Meta 最古老的移动代码库。自 2012 年该应用程序被重写以来,它已经由数千名工程师共同开发并交付给数十亿用户,它可以支持数百名工程师同时对其进行迭代。经过多年的迭代,Facebook 代码库已经不像典型的 iOS 代码库了,本文将阐明演变背后的技术决策及其历史背景: +- 2014,建立自己的移动框架:React +- 2015,减轻和改进启动所需的更改 +- 2016,动态库和模块化 +- 2017,重新思考 FBIOS 架构 +- 2018,生成代码的激增 +- 2020,Swift 和语言架构 +- 2022,架构演变完成了 1%,未来仍将继续 + +### 🐕 [iOS APP 虚拟内存用量初探](https://juejin.cn/post/7196931784328626234) + +[@ChengzhiHuang](https://github.com/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](https://blog.eidinger.info/prevent-copy-paste-into-other-ios-apps) + +[@Smallfly](https://github.com/iostalks):iOS 系统的封闭性给不同 App 之间的通信增加了门槛,而剪切板是为数不多的跨应用通信方案。为了保护用户的隐私,在 iOS 14 之后应用读取剪切板需要用户的授权,但在低系统或者用户误操作的情况下,依然存在剪切板数据被窃取的可能性。 + +本文介绍了两种保护剪切板数据安全的方法,一种是在 App 进入后台时,清空剪切板内容;另一种是强制使用 `custom pasteboard`,具体实现方案可参阅原文。 + +### 🐕 [Flutter 3.7 之快速理解 toImageSync 是什么?能做什么?](https://mp.weixin.qq.com/s/ziOCR-sudMGbE0iW3MKewQ) + +[@Crazy](https://github.com/jiyan135960):作者从 toImageSync 方法入手,详细的描述了 toImageSync 性能上带来的优势与副作用。 toImageSync 优势是生成的图像会在 GPU 中常驻,所以它的绘制速度会更快,并且可以重复利用,提高效率。并且 toImageSync 为同步方法,在方法调用上更加自由。作者更是通过对 Flutter 中 SnapshotWidget 的调用方式来详细分析 toImageSync 与标准动画的差别,并通过对比明显展示了 toImageSync 的副作用:“冻结” child 控件。 + +最后作者更是通过源码对比以及各版本之间的命名差异分析 toImageSync 的设计初衷与作用,这种对源码分析的严谨与执着更是值得开发者的学习。 + +## 摸鱼周报 + +[@摸鱼周报 #83](https://mp.weixin.qq.com/s/Ty95hGBIevHaJQ5TU774aQ):第 83 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:各大搜索引擎开始接入类 ChatGPT 功能 + +* 本周学习:Python 中的匿名函数与闭包 + +* 内容推荐:iOS 越狱检测、获取虚拟内存状态、使用 KeyChain 进行持久化等内容 + +* 摸一下鱼:Stable Diffusion 功能尝鲜;关于技术规划的思考;大厂复盘文档 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#233-2023.02.20.md b/Reports/2023/#233-2023.02.20.md new file mode 100644 index 000000000..f137d68b7 --- /dev/null +++ b/Reports/2023/#233-2023.02.20.md @@ -0,0 +1,130 @@ +# 老司机 iOS 周报 #233 | 2023-02-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3 Beta Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes) + +包含 Swift 5.8 以及 iOS/iPad OS 16.4 的 SDK。其中 Swift 5.8 的改动中包含了 [SE-0370](https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md) 等新特性。 + +```swift +class ViewController { + let button: Button + + func setup() { + button.tapHandler = { [weak self] in + guard let self else { return } + dismiss() // refers to `self.dismiss()` + } + } + + func dismiss() { ... } +} +``` + +##  Developer - 设计开发加速器 + +### [探索增强现实](https://developer.apple.com/events/view/9HU22DPP7P/dashboard) + +现在就是开始在 Apple 平台上使用增强现实的最佳时机,加入我们了解如何为数亿台支持 AR 的活跃设备构建 App。通过本次活动,您可以全方位的了解 Apple 提供的 AR 技术栈,包括 ARKit 和 RealityKit 等功能强大的框架,以及 Reality Composer 和 Reality Converter 等创意工具,从而在 AR 中将您的想法变为现实。报名截止 2 月 22 日。 + +## 新手推荐 + +### 🌟 🐕 [每天都在用,也没整明白的 React Hook](https://mp.weixin.qq.com/s/wpJvXYf4Q3jFQEEpICtoSg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 日常开发中不少同学也在做前端相关开发,本文小编和大家一起学习一下 React Hooks 的用法,重新认识常用的 useState、useCallback、useContext 等,甚至于那些不常用到的 hooks 的使用方法,[本篇](https://mp.weixin.qq.com/s/wpJvXYf4Q3jFQEEpICtoSg)由字节团队提供,强烈推荐正在使用 React 或者打算尝试的同学深入学习。 + +## 文章 + + +### 🐢 [我们是如何追逐元宇宙、XR 等“概念股”浪潮的?](https://mp.weixin.qq.com/s/Q9VNdOXGlsA4OXRUc5_-xw) + +元宇宙已经不是一个很新的概念,但是我们大多数人可能更多的是听过这个词,但是并没有真正体验过,很多元宇宙的产品也是在雏形状态。淘宝人生在过去一段时间完成了淘宝人生小屋项目的正式上线,也这让我们可以很方便的体验元宇宙的世界。从一个展示页面变成元宇宙,相信大家一定很好奇淘宝团队是如何做到的,这里面涉及对于端上而言大量新的技术,以及去落实这样一个项目,该如何分工等等,那就可以好好看一下这篇文章,相信可以有所受益。 + +### 🐕 [企业微信 Flutter 与大型 Native 工程跨四端融合实践](https://mp.weixin.qq.com/s/Fc6bdgKshZ8WFX1Pcr4LHg) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了在企业微信中实践四端 Flutter 与 Native 的跨平台使用。本文主要介绍了其在跨平台中遇到的困难与挑战并且是如何解决的: +- 企业微信代码复杂,业务模块中多,使用 add2app 的方式将 Flutter 工程集成到原生工程中。 +- 参考 grpc 的设计流程 , 设计了一套跨语言的 rpc 调用模型 , 通过 protoc 来生成 dart 端 和 c++ 端的代码。并且实现了一套相比 pigeon 更便捷的 channel 的自动化框架:rpc-channel。 +- 通过修改引擎代码,解决了部分在跨平台时 Windows 和 Mac 遇到的通信,UI,内存等问题。 +- 完善和统一导航栏,文字等基础组件在在不同端上的体验。 +- 对各个业务提供独立的 example application 运行的能力。通过 grpc 的远程调用宿主 APP 的服务的方式来和主工程进行解耦。 + +### 🐎 [Debouncing with Swift concurrency](https://sideeffect.io/posts/2023-01-11-regulate/) + +[@Cooper Chen](https://github.com/cjlcooper):本文简单介绍了 debouncing 在 Swift 多线程中如何进行定时执行和函数防抖,并通过简化任务次数提高了性能和效率,可以为有相似应用场景的开发同学提供一些有用的参考信息。 + +### 🐎 [iOS 内存优化之工具介绍](https://juejin.cn/post/7190296873373007931) + +[@老峰](https://github.com/gesantung):本篇文章主要介绍了 Xcode 内存图和 leaks 工具的使用,以及排查内存问题的流程与思路,涉及以下方面: +- 运行项目,测试覆盖场景 +- 使用内存图 / leaks 查看内存泄露情况 +- 针对场景检查是否有隐式间接持有场景 +- 根据情况修复问题 +- 回归 + + +### 🐎 [Swift Cookbook](https://www.kodeco.com/books/swift-cookbook) +[@Damien](https://github.com/ZengyiMa):Swift Cookbook 是 kodeco 团队整理的 Swift 入门书籍,汇集了常见的 Swift 语言特性的说明和使用最佳实践,以便可以在需要的时候可以提供参考。学习 Swift 的新手同学不妨收藏使用。 + +### 🐕 [跨端通信终结者|看我是如何保证多端消息一致性的 🔥 - 掘金](https://juejin.cn/post/7196970992576708663) + +[@Barney](https://github.com/BarneyZhaoooo):本文完整介绍了作者从问题出发,思考如何优雅地保证多端消息一致性的过程。 +- 以 iOS - Web 通信桥接为例,解释了当下方案难以维护的原因。 +- 介绍以 YAML 标准化语言定义组件的 DSL 解决方案。 + +### 🐎 [理解 Clang Module 和 Module Map 语法](https://juejin.cn/post/7195394554760003644) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Clang Module 的功能特点,以及它的缓存机制,在 Xcode 中的使用方法,也结合代码讲解了如何制作一个模块的方法。另外还介绍了 Module Map 的作用以及它的声明方法。 + +### 🐕 [Text Buffer Reimplementation - VSCode](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3843) + +[@红纸](https://github.com/nianran):本文是 VSCode 代码缓冲区的一次优化改造,基于传统的 piece table 数据结构来替代原有基于行的 ModuleLine 的 line array 。旧行数组结构需要耗费大量的构造时间,并占用大量内存。新的数据结构有着内存开支小、初始化快、插入和查询效率高等优势。如果对数据处理感兴趣的话,本文值得一读。 + +> 译文:[【译】重新实现 Text Buffer](https://macplay.github.io/posts/text-buffer-reimplementation/) +> 扩展阅读:[Piece Table 数据结构](https://zhuanlan.zhihu.com/p/268726520) + +### 🐢 [从大前端“穿越”到终端,开发者应该必备什么技能? | 解读终端的 2022](https://mp.weixin.qq.com/s/t0xLKrMF4al4cgAXeCwyow) + +[@享耳先森](https://github.com/iblacksun):现下裁员不断,新增招聘岗位越来越少,终端开发者何去何从?本文介绍了过去几年移动端领域技术发展;对比了现有跨端技术;同时,针对未来技术演化作者也给出了一些预测,希望对大家有帮助。 + +## 代码 + +### [ChatGPT Jailbreak](https://github.com/gayolGate/gayolGate/blob/index/ChatGPTJailbreak) + +[@老驴](https://weibo.com/u/6090610445):ChatGPT 这类的 LLM 模型,一般都会存在特殊 prompt 来越过系统限制。链接中的就是其中之一,可以让 ChatGPT 回答一些正常情况下不能回答的问题。大家可以试试看,权当娱乐。 + +## 摸鱼周报 + +[@摸鱼周报 #84](https://mp.weixin.qq.com/s/fKutqWAHfzkbbFgYCvPfIA):第 84 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:开发加速器:在 App 或游戏内创造无障碍体验 +* 本周学习:Any 和 AnyObject 以及 AnyClass +* 内容推荐:依赖注入、自定义 Button 外观与行为、正则表达式、创建 XCFramework 以及创建可配置的小组件文章推荐 +* 摸一下鱼:一个白噪音网站;ChatGPT 飞书机器人配置;在线 NodeJS 平台 AirCode;ChatGPT for stackoverflow 浏览器插件 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#234-2023.02.27.md b/Reports/2023/#234-2023.02.27.md new file mode 100644 index 000000000..4d2a413eb --- /dev/null +++ b/Reports/2023/#234-2023.02.27.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #234 | 2023-02-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [设计挑战(亚太) 演讲:探索卓越的导航流程设计](https://developer.apple.com/events/view/R67PUKP9H9/dashboard) + +与 Apple 设计布道师一起学习重要设计原理的实践方式,并在两项设计挑战当中展示您的设计技能。探索如何运用优秀的导航设计模式来创建更符合直觉的 App,并注册一对一咨询来和 Apple 设计布道师讨论您的设计概念与想法。 + +在挑战活动的最后,您还有机会和其他参与挑战的开发者进行交流,并与 Apple 设计布道师一起分享各自的想法、设计案例和洞见。 + +## 文章 + +### 🌟 🐕 [云音乐 iOS 跨端缓存库 - NEMichelinCache](https://mp.weixin.qq.com/s/jZ6QEuc0qoAn27lYzN1Yfw) + +[@JonyFang](https://github.com/jonyfang): 跨端缓存方案类似操作系统缓存模式中的回写模式,在缓存库方案设计过程中需要着重解决回写的缺点,如保证内存缓存、引擎、磁盘缓存数据一致性。基于目标做对应的方案设计,侧重如下几点: + +1. 业务接口层。减少接入的难度,还需使接口可控,不让业务方随意访问磁盘等; +2. 责任链模块。为后续日志模块、错误模块设计做准备; +3. 责任链 Runner。支持优先级队列能力、支持优先级高的链插队; +4. 解压 / 合并模块。可自定义配置解压缩库能力,同时减少对三方库依赖(可替换); +5. 数据库升级; +6. 多版本并存; +7. 本地 Bundle 缓存清理机制; + +新缓存框架设计整体的切入点和侧重关注点可供参考,也期待网易云后续放出 `NEMichelinCache` 对应的开源。 + +### 🐕 [Safely pinning SPM dependencies to exact versions](https://www.polpiella.dev/safely-pinning-spm-depedencies-to-exact-versions/) + +[@kemchenj](https://kemchenj.github.io):使用 Cocoapods 集成依赖时,我们通常会将 Podfile.lock 也加入到 Git 的文件追踪列表里,保证在每次运行 `pod install` 后就能能够导入一样的依赖库版本,让所有人都在同样的环境下开发。 + +但 Xcode 项目直接集成 Swift Package 时情况会稍微不同,它不会根据 lock 文件来决定导入的 Package 版本,而是会在**版本约束的范围内升级到最高版本**。 + +例如说 Xcode 项目里 Alamofire 的版本约束是 `2.0.0 - Next Major`(`~> 2.0`),我们在开发时本地使用了 2.0 版本,传到 CI 上打包时刚好 2.1 版本发布了,就会自动升级到 2.1,导致 CI 打出来的包跟本地不同。 + +这篇文章就介绍了相关的情况以及他们的解决方法,如果大家在工作中也遇到了类似的问题,可以参考这篇文章进行解决。 + +### 🐎 [Electron 的 GUI 和 Ruby 的 CLI 的一种交互实践](https://mp.weixin.qq.com/s/UmzeZip3KtHH44dkiijujg) + +[@红纸](https://github.com/nianran):本文探索了跨语言进程间的通信方案的实现,总结出文件、Unix Domain Socket 和管道这 3 种通信方式,并将其应用在基于 Ruby 的 CLI 和基于 Electron 的 GUI 在实际开发过程中,最后给出了开发调试的一些实用分析和建议。 + +### 🐕 [FlutterEngine 桌面端架构浅析](https://mp.weixin.qq.com/s/iKAHo8chgE85zix3ktHfUQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 作为一个跨端开发框架,在移动端可谓是遍地开花,其本身是完全支持桌面端开发的,但 Flutter 桌面端的资料相对少很多。本篇由钉钉开发团队在落地 Flutter 桌面端的同时对 Flutter 桌面端架构的研究,层层递进,对相关架构的同学可以深入学习。 + +### 🐕 [云音乐 Android 内存监控探索篇](https://mp.weixin.qq.com/s/tHndnmpxeDihYTIZmsafbg) + +[@Crazy](https://github.com/jiyan135960):内存泄漏问题一直是 Android 开发者最头疼的问题,本文介绍了网易云音乐技术团队在内存泄漏监控方案的探索与实践的思路。作者结合了 Android 主流的内存泄漏监控框架 LeakCanary 与 Koom 的功能,并针对自己软件的实际情况,设计了一套线上线下结合的内存泄漏监控框架。作者更是针对 Android 大图监控(分为线上大图监控与本地图片资源监控)与内存大小监控(分别为启动内存、运行内存和 Java 内存监控与线程监控)进行了详细的介绍,可以给在做内存优化的同学提供一个切实有效的思考方向。 + +### 🐕 [How to use macOS Assistive Technologies to test in the Simulator](https://www.basbroek.nl/cheating-the-system-for-fun-and-profit) + +[@EyreFree](https://github.com/EyreFree): 本文介绍了如何在无需处理 Accessibility Inspector 的情况下使用 macOS 的辅助技术,如 VoiceOver、Voice Control 以及 Hover Text 来更容易地在模拟器中检查和测试某些辅助功能(Accessibility),作者通过视频演示了相应测试方法,并且同时也提示应该始终以真机测试的结果为准,有需要的朋友可以看看。 + + +### 🐕 [使用 RoomPlan 扫描创建参数化三维室内场景](https://mp.weixin.qq.com/s/HCvy7MJJcBUANXt5y47mkA) + +[@ZibYang](https://github.com/ZibYang): 本文将主要聚焦于 Apple 的 AR/MR 新 API:RoomPlan 。全文共分为 3 个部分: + +- 第一部分是 Apple 的 AR/MR 技术发展回顾,以及 RoomPlan 和 Object Capture 技术背后的原理简介。 +- 第二部分是对于 RoomPlan 技术的介绍,包括如何使用官方 API 快速在相关 App 中使用 RoomPlan,以及如何通过数据 API 自定义 RoomPlan 的使用。 +- 最后一部分是关于 AR/MR 应用设计的相关建议。 + +### 🐢 [利用 Xcode 和设备上的检测工具排查卡顿](https://mp.weixin.qq.com/s/5sIJKDozsD1LSOh38hHYTg) + +[@WessonWu](https://github.com/WessonWu): 今年 Apple 在开发全链路过程中对于卡顿问题的排查分析工具上做了一次相对较完整的更新,借此机会笔者想将结合本次 WWDC22 的更新内容与大家一同探讨下日常卡顿的治理思路。本文篇幅有点长,大家可以先浏览下文章的思维导图,能够帮助大家提前梳理本文的主体脉络。 +![思维导图](https://mmbiz.qpic.cn/mmbiz_jpg/deSLfic6WeGV1vjuiaOVezFaosibTAdxcZ6FeHJ0N9CicGgPSJJI5kMSvBE4Q6Qk08o8OoI2ib00kiaNfppvZGfMjuFw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1) + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [上海] 小红书 - 社区客户端团队 - 基础体验方向 - iOS/Android +- [深圳] AirBrush - 美图海外事业部 - iOS 高级工程师 +- [上海] 七猫小说 - iOS / Android/ 前端 / go / 大数据 高级、资深工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#235-2023.03.06.md b/Reports/2023/#235-2023.03.06.md new file mode 100644 index 000000000..010b2ebe2 --- /dev/null +++ b/Reports/2023/#235-2023.03.06.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #235 | 2023-03-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [T 沙龙新官网(www.tsalon.tech)上线啦,欢迎大家关注!](https://www.tsalon.tech/) + +[@EyreFree](https://github.com/EyreFree): T沙龙,全称为 T 技术沙龙,是一个以促进开发者之间技术交流为目的的技术沙龙组织,成立后一直在定期举办各种面向开发者的线上 & 线下沙龙活动。从 2016 年 3 月份开始,在北京、上海、成都、杭州和深圳等地相继举办了 30 多场线下沙龙活动,同时也举办了多场线上活动。本次 T 沙龙官网更新,感兴趣的朋友可以关注,获取第一手活动资讯,🎉 + +## 文章 + +### 🌟 🐕 [淘宝 APP 网络架构演进与弱网破障实践](https://mp.weixin.qq.com/s/YomDksoRv_Chuw7oHBzzFA) + +[@JonyFang](https://github.com/jonyfang): 本文主要介绍手淘终端统一网络库 AWCN (Ali Wireless Connection Network) 演进的过程。讲述如何围绕体验持续构建南北向从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术/多协议择优调度手段,贴合厂商附能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。 + +文中针对网络库设计的理念及方案演进介绍的比较全,思路可做参考学习。 + +### 🐕 [QQ音乐高可用架构体系](https://mp.weixin.qq.com/s/G00cwGYAr6l2Px6-DiwXLA) +[@莲叔](https://github.com/aaaron7): 这是一篇服务端视角的高可用架构的介绍文章。如何处理故障是几乎所有分布式系统的最关键的一环。文章分享了 QQ 音乐在面向故障处理的思考以及演进出的一套行之有效的技术体系,从架构、工具链和可观测性三个角度来实现了优雅的处理故障的能力。虽然是服务端视角偏多,但整体行文比较浅显易懂,相信客户端同学也能够有所收获,尤其是在当下很多技术都是端到端的,所以具备一定的服务端视角也能帮助我们更好的设计技术架构,定义技术体系。 + +### 🐕 [SwiftUI views versus modifiers](https://www.swiftbysundell.com/articles/swiftui-views-versus-modifiers/) +[@Damien](https://github.com/ZengyiMa): SwiftUI 最有趣的方面之一是从本质上将视图相关的描述也视为数据。SwiftUI 视图不只是在屏幕上呈现的像素,也是定义了给定的 UI 应该如何工作、外观和行为,本文就是会通过几个例子来描述 SwiftUI 视图与修饰符的使用和介绍,对 SwiftUI 感兴趣的同学不妨一读。 + +### 🐢 [正则表达式是如何运作的?](https://mp.weixin.qq.com/s/i_C4ATnajxRDGlTA8dJDHg) +[@zoeGuo](https://github.com/zoeGuo):在日常的开发工作当中,我们必不可免的会碰到需要使用正则的情况。正则在很多时候通过不同的组合方式最后都可以达到既定的目标结果,而不同的撰写方式,匹配的效率也有很大的不同。文章从正则表达式与有限自动机(FA)开始,逐步深入描述:不确定有限自动机(NFA)及确定有限自动机(DFA)、正则如何替换成 NFA、NFA 转换成 DFA 及其简化;并解释了体现正则不确定性的“回溯”的相关概念。文章整体理论性很强,需要耐心好好阅读,相信认真阅读之后,会对正则表达式有一个更加具体,立体的认知。 + +### 🐕 [网易云音乐基于 C2D2C 的「无损」设计协同](https://mp.weixin.qq.com/s/ngQXWLhwV7wDyTMlr3QxmQ) + +[@J_Knight_](https://github.com/knightsj):本文首先介绍了传统设计协同(在设计师和开发的合作下,将产品需求转化成代码的过程)中存在的一些问题(比如沟通成本高,开发效率低等)。然后介绍了基于 C2D2C 的无损设计协同方案(C2D,全称是 Code2Design,也就是将代码转成设计稿;D2C,则是其逆过程,将设计稿转成代码)。并通过流程图以及设计和代码示例展现了其无损协同的几个优势: +- 首先,是维护成本低。因为只需在开发侧维护一套组件库即可。 +- 其次,是协作效率比较高。因为设计细节无损保存在元数据中,免去了反复确认。 +- 最后,是局部效率比较高。因为设计师可以利用 C2D 快速生成设计稿,开发者利用 D2C 快速还原 UI。 + +### 🐕 [Pattern matching on error codes – Ole Begemann](https://oleb.net/blog/2023/catch-error-code/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简单介绍了一个 error 匹配的小技巧,正如文章开头如下所说。 + +- Foundation overloads the pattern matching operator ~= to enable matching against error codes in catch clauses. + +### 🐎 [What is the default target queue for a serial queue?](https://forums.swift.org/t/what-is-the-default-target-queue-for-a-serial-queue/18094) + +[@xuyafei86](https://github.com/xiaofei86): GCD 通过目标队列来管理系统全局队列和各种自定义队列的任务调度。目标队列共享相同的线程池,受到线程池 64 条线程数量的限制。在这条 Swift 社区的提问中,作者思考了自定义串行队列是否遵循这种策略的问题。从 [GCD 源码](https://opensource.apple.com/source/libdispatch/libdispatch-1173.40.5/src/queue.c.auto.html) 中可以看到,苹果隐藏了 overcommit(过载)队列的概念,overcommit 队列创建线程时不受线程池线程数量的控制。系统全局队列是非 overcommit 的,而自定义串行队列是 overcommit 的。继续阅读原文了解关于此问题在应用层面的讨论。当我们手动设置目标队列和 Precondition 时,这也将有利于我们避免崩溃发生。 + +### 🐕 [Xcode Header Template for Swift Packages](https://samwize.com/2023/02/28/xcode-header-template-for-swift-packages/) +[@水水](https://www.xuyanlan.com):如果您使用 Swift Packages 时,每当您创建一个新文件,可能会出现两个令人讨厌的问题: + +- No header template :头部信息中缺少一些包名和组织名称等 +- No prompt for filename:没有文件名命名提示 + +本文针对这两个问题提出了解决方案,感兴趣的读者可以尝试看看~ + +## 代码 + +### 🐎 [ChatGPT App](https://github.com/chenxi92/ChatGPT) + +[@Cooper Chen](https://github.com/cjlcooper):目前 ChatGPT 持续火热,这是一套由 SwiftUI 开发并且可以与 OpenAI Api 交互的 Mac App 和 iOS App 代码,为想要了解和学习 ChatGPT 的同学提供了一个快速便捷的入口,同时使用方法也十分简单: +- Mac App:在 Release 页面下载 ChatGPT.dmg 文件即可 +- iOS App:下载源码,然后使用自己的打包证书即可 + +## 摸鱼周报 + +[@摸鱼周报 #85](https://mp.weixin.qq.com/s/Hhb7ZCDDqEcpIRTlUKiGTQ):第 85 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:在线讲座:与 App Store 专家会面交流;加速器线上活动:设计挑战(亚太) +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖基于文本生成图像、SwiftUI 布局、Swift 静态代码检测、原生的 SwiftUI Markdown 渲染包等方面的内容 +* 摸一下鱼:ChatGPT 的 API 开发使用;Notion AI 体验;new bing 体验;针对程序员的智能搜索引擎 phind + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#236-2023.03.13.md b/Reports/2023/#236-2023.03.13.md new file mode 100644 index 000000000..28d4d6113 --- /dev/null +++ b/Reports/2023/#236-2023.03.13.md @@ -0,0 +1,114 @@ +# 老司机 iOS 周报 #236 | 2023-03-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store 的定价机制升级现已扩展至所有购买类型](https://developer.apple.com/cn/news/?id=dbrszv62) + +1. `` 增强全球定价机制 `` 的推出:在 5 月 9 日还未选择定价机制的 App ,默认会按照“全球定价”并以美元进行结算。开发者也可以即日起主动进行调整。 +2. 更新后的价格将根据金融数据机构提供的公开汇率信息做调整。 + +由此,通过汇率差或者切区充值的方式成为历史,如果开发者未选择上架的地区,用户即使通过切换地区也无法进行支付。 + +##  Developer - 设计开发加速器 + +### [在 iPad App 中支持多窗口](https://developer.apple.com/cn/accelerator/) + +多任务处理是让你的 iPad App 更加强大的方式。本次课程你可以学习如何轻松支持多窗口功能,了解如何创建、刷新和关闭窗口。你还可以了解如何利用高级手势创造更加出色的体验。报名时间截止 2023 年 3 月 15 日。 + + +## 文章 + +### 🐕 [SwiftUI + Core Data App 的内存占用优化之旅](https://juejin.cn/post/7207787191623335992#heading-0) + +[@Cooper Chen](https://github.com/cjlcooper):本文主要介绍了 SwiftUI 在图文混排等复杂应用视图情况下,如何进行内存占用进行优化的方案。通过视图 body 值优化、托管对象回归惰性状态、私有上下文、不持有托管对象等方式,大大提高了 SwiftUI 在复杂视图情况下的内存占用情况,为相关开发同学提供了许多优秀的建议,值得一读。 + +### 🐎 [Swift 5.7 / Xcode 14 incremental build time 10x slower than Swift 5.6 / Xcode 13](https://forums.swift.org/t/swift-5-7-xcode-14-incremental-build-time-10x-slower-than-swift-5-6-xcode-13/60568/2) + +[@zvving](https://github.com/zvving):如果你的项目在升级 Xcode14 后碰到增量编译时间大幅劣化的情况,大概率是 Swift 新版集成驱动的问题,不妨试试配置 `SWIFT_USE_INTEGRATED_DRIVER` -> `NO`,可能会有很好的效果。(配置后需要手动清空构建文件夹 `CMD+Shift+K`) + +### 🐎 [Xcode 编译加速之 Compile Asset Catalog](https://juejin.cn/post/7207848485856231482) + +[@anotheren](https://github.com/anotheren): 在项目规模变大后,资源文件也会不可避免的增多,导致生成 Asset.car 时占用大量时间进行图片压缩。这在 Release 时是必须的,但是在 Debug 时,我们可以跳过这个过程以优化编译时间。来看看具体如何操作。 + +> 推荐人:[gbfansheng](https://github.com/gbfansheng) + +### 🐎 [苹果:为了安全让 M2 吃灰](https://catcoding.me/p/apple-perf/) + +[@kemchenj](https://kemchenj.github.io/):macOS 本身有一个安全机制来防止恶意程序运行,在程序或脚本首次运行时会上传 checksum 到苹果服务器,与现有的恶意程序名单进行比对,如果没问题才会放行让程序执行,导致首次启动时需要较长的时间。 + +但在我们的日常开发中,可能会需要大量生成和运行一次性的程序,例如修改代码之后编译运行的程序,每次都是全新,意味着程序每次都需要到苹果服务器进行一次校验。 + +当程序达到一定数量的时候就会造成性能问题,例如文中提到的 rust 测试原本只需要 1 分 30 秒左右,受到这个安全机制的影响执行时间被拉长到 10 分钟,对于日常开发体验影响非常大。 + +文章观点可能有点偏激,但使用 macOS 的开发者确实有必要意识到这件事情,并且这个问题可以通过一些设置来解决,可以在系统设置里将开发用的 App 加入到白名单里绕过这个验证(例如 Xcode, VSCode, Iterm2 等等),解决上述的性能问题。 + +### 🐎 [iOS 底层之类的 cache 分析](https://juejin.cn/post/7206143969121943589) + +[@J_Knight_](https://github.com/knightsj):本文详细介绍了类结构体中的 cache 字段:具体从 cache 的数据结构、bucket_t 类型以及关键方法 insert 的源码讲解了缓存插入的逻辑,也介绍了缓存扩容的逻辑。最后在结尾处提供了 cache_t 的工作原理流程图,可以更直观地看到 cache_t 的机制。 + +### 🐕 [通过 Bazel 构建 iOS 应用](https://bazel.build/start/ios-app?hl=zh-cn) + +[@JonyFang](https://github.com/jonyfang): Bazel 是 Google 推出的一款开源的工程编译工具,类似于 Make、Maven 和 Gradle。Bazel 主要负责处理代码构建相关问题,如:大规模数据构建问题,共享代码库问题,从源代码构建的软件的相关问题。Bazel 支持多种语言并且跨平台,还支持自动化测试和部署、具有再现性(Reproducibility)和规模化等特征。这里主要是介绍通过 Bazel 构建 iOS 应用。 + +### 🐎 [迈向卓越 - 闲鱼终端场景 CI 能力体系化建设](https://mp.weixin.qq.com/s/1WaRRQXxsFZlWA1oT1jldA) + +[@xuyafei86](https://github.com/xiaofei86):“闲鱼从 2014 年创立,到 2022 年已经走过了 8 个年头,闲鱼 APP 也随之逐渐复杂。在这其中,我们也面临着大型 APP 共性的一些通病,例如:团队规模变大带来的研发效能瓶颈的问题,大量历史代码带来的代码腐化问题等。从解决实际问题出发,闲鱼终端团队和质量团队一起协作在 2022 财年进行了 CI 能力体系化建设,并已经通过在单测,代码质量,自动化测试 & 回归等方面的建设,形成了一整套的能力沉淀。通过这些能力,我们成功在闲鱼终端研发场景下实现了代码质量的稳步的提升,并在部分仓库现了向类主干开发模式的切换。本文将分享整个能力建设的过程以及我们在其中的思考,希望能给大家带去一些借鉴。” + +### 🐕 [这代码居然有差别?CPU 友好的代码该这样写](https://mp.weixin.qq.com/s/VXB4WqdN5ryc2TU7haxh_A) + +[@Crazy](https://github.com/jiyan135960):本文作者从循环效率入手,向大家简单的讲解了 CPU 的缓存机制,以及怎样写出优秀循环。作者通过一个矩阵相乘的三种不同的循环写法,用看似相同的代码,得到相同的结果,并计算这三种循环的效率。最后的结果却让人震惊,这三种循环方式其中的效率能够相差百倍之多。其中最大的问题就在于 CPU 的缓存命中率,利用先从左到右,再从上到下的循环方式读取数据,可以提升百倍效率。本文为开发者提供了一个少见却高效的性能优化的方向,了解一些硬件原理,顺应硬件的处理规则,才能写出更加行之有效的软件代码。 + +## 工具 + +### [ZMarkupParser](https://github.com/ZhgChgLi/ZMarkupParser) + +[@红纸](https://github.com/nianran):这个纯 Swift 的 GitHub 仓库使用正则表达式解析 HTML,并自动修正标签错误。它支持高度定制的 HTML 标签样式,比传统的 NSAttributedString.DocumentType.html 更高效,不依赖任何解析库。它的实现原理是使用 Tokenization 将 HTML 转换成抽象语法树,并使用 Visitor Pattern 将 HTML Tag 与抽象样式对应,得到最终的 NSAttributedString 结果。如果你需要一款快速、高效、准确的 HTML 解析器,这个仓库是一个不错的选择。 + +> 推荐人:[ZhgChgLi](https://github.com/zhgchgli0718) + +### [Swift Evolution proposals in Alfred](https://oleb.net/blog/2023/alfred-swift-evolution/) + +[@zoeGuo](https://github.com/zoeGuo): [Swift Evolution](https://www.swift.org/swift-evolution/) 记录了 Swift 主要或者次要版本的目标以及开发者对 Swift 的更改建议,还记录了这些想法是如何被提出、讨论、审查,并最终被接受到即将发布的版本中的。阅读 Swift Evolution proposals 可能在我们理解、使用 Swift 时起到关键性作用。那么 [Alfred](https://github.com/attaswift/alfred-swift-evolution) 就是一个能够帮助我们快速查找 Swift Evolution proposals 的工具,可以使用关键字或者 proposal id 搜索快速获取到对应文档的连接和相关 proposal 的状态等。之前已经用过的读者也可以去更新最新的 [v2.1.0](https://github.com/attaswift/alfred-swift-evolution/releases/tag/v2.1.0) 版本获得更好的体验。 + + +## 代码 + +### [buildbuddy-io / rules_xcodeproj](https://github.com/buildbuddy-io/rules_xcodeproj) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这个存储库包含了 Bazel 的规则,可以用来从工作空间中的目标生成 Xcode 项目。它包含了全面的 Bazel 规则支持、需要最少的配置等诸多特性,目前已有多个项目使用 rules_xcodeproj,可以根据[使用指南](https://github.com/buildbuddy-io/rules_xcodeproj/blob/main/docs/usage.md)进行构建。 + + +## 摸鱼周报 + +[@摸鱼周报 #86](https://mp.weixin.qq.com/s/y1_V0WKfdwsUL2WjP2zPyA):第 86 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 公布 iOS 16 的普及率已达 81% +* 内容推荐:继续推荐近期的一些优秀博文,涵盖 Swift 混编 Module、App Store 价格新政、内存优化、Xcode 命令行参数和构建配置等方面的内容 +* 摸一下鱼:一些新的基于 ChatGPT API 的工具如雨后春笋般产生,产品形态有这几个:移动端、watch 端、浏览器插件、网站等 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#237-2023.03.20.md b/Reports/2023/#237-2023.03.20.md new file mode 100644 index 000000000..ec4e91fde --- /dev/null +++ b/Reports/2023/#237-2023.03.20.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #237 | 2023-03-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [How to make an interactive picker for a Swift command-line tool](https://www.polpiella.dev/how-to-make-an-interactive-picker-for-a-swift-command-line-tool/) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 相较于 Javascript 等语言,处理用户输入的库总是不足,本文主要介绍了作者受 Javascript 工具 Nate Moore 的 clack 启发,如何为 Swift 命令行工具制作交互式选择器工具的思路和过程,另外作者将继续记录迁移该工具的过程,为有意向向 Swift 命令行增加更多能力的同学提供参考。 + +### 🐎 [淘宝 widget 链路方案总结](https://mp.weixin.qq.com/s/ZSt--YspkI4GHqbGCasvLQ) + +[@Damien](https://github.com/ZengyiMa):widget 是 Apple 推出的小组件功能,其意在希望 App 能一目了然地显示重要的内容,让用户可以快速访问你的 App 以获取更多详情,本文来自淘宝技术团队,阐述了从静态 widget -> 动态 widget -> 用户自定义布局完整的一套生态的演进过程,和各阶段的思考。 + +### [手工打造 HTML 解析器的那些事](https://medium.com/zrealm-ios-dev/%E6%89%8B%E5%B7%A5%E6%89%93%E9%80%A0-html-%E8%A7%A3%E6%9E%90%E5%99%A8%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B-2724f02f6e7) + +[@红纸](https://github.com/nianran):ZMarkupParser 是作者开发的 HTML 转 NSAttributedString 仓库。本篇介绍了其实现过程,其中包括代码解析、语法标准化、转换抽象树、MarkupComponent 转换、解析 MarkupSyle、转换 NSAttributedString 等。文章提供了详细的代码实现和实例演示,对于 HTML 解析器实现由兴趣的读者来说,该篇文章可以作为入门参考资料。 + +> 推荐人:[ZhgChgLi](https://github.com/zhgchgli0718) + +### 🐕 [What's new in Swift 5.8](https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8) + +[@zoeGuo](https://github.com/zoeGuo):文章对 Swift 5.8 更新的每个 proposal 分别做了简单解释和介绍。小编选出几个比较感兴趣的做了简单总结: +- SE-0373 Lift all limitations on variables in result builders:取消结果生成器中对变量的所有限制。 +- SE-0376 Function Back Deployment:增加了一个新的 @backDeployed 属性,一定条件下可以在旧版本的框架上使用新的 api。 +- SE-0365 Allow implicit self for weak self captures, after self is unwrapped:weak self 在 unwrapped 的情况下可以被捕获为隐式调用的 self,那这种情况下我们就可以将闭包中的 self 删除了。 +- SE-0274 Concise magic file names:看起来是只简化了文件名,但其实对于 Swift 编译器产生的二进制文件大小影响不容忽视,作者在这里建议大家仔细阅读 Swift Evolution 关于这一变化的描述。 +- SE-0375 Opening existential arguments to optional parameters :Swift 5.7 开始允许我们使用协议调用泛型函数,但只能使用不可选入参,在 Swift 5.8 中支持了可选入参。 + +文章中有代码示例以及更详细的说明,还提到一些其他的更新内容,有兴趣的读者可以阅读原文了解更多。 + +### 🐢 [All about LeakSanitizer](https://maskray.me/blog/2023-02-12-all-about-leak-sanitizer) + +[@老峰](https://github.com/gesantung):LeakSanitizer (LSan) 是一种内存泄漏检测器,它拦截内存分配函数,默认情况下在退出时检测内存泄漏。本文介绍了其用法:Standalone (-fsanitize=leak)、AddressSanitizer (-fsanitize=address)、AddressSanitizer (-fsanitize=address),实现原理概述,运行时选项,漏报,STW 以及其他类似工具等内容。 + +### 🐕 [网易云音乐开源全链路埋点方案-曙光埋点(dawn)](https://mp.weixin.qq.com/s/XRy4ajwAHGjOai7qERYjyw) + +[@JonyFang](https://github.com/jonyfang):曙光埋点是一套全链路埋点方案,从埋点设计、到客户端三端(iOS、Android、H5)开发、以及埋点校验 & 稽查、再到埋点数据使用,目前已经广泛应用于云音乐各个主要 APP,它集自动化埋点与全链路追踪等特点于一身,解决了传统埋点的痛点,兼顾了开发效率与埋点数据的高精度特点。好在是开源的,感兴趣的开发者可以通过源码细剖下实现细节。 + +### 🐕 [iOS 云音乐 APM 性能监控实践](https://mp.weixin.qq.com/s/nGLgQfq8k3pzxUaTZa8uNQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文详细介绍了云音乐 iOS APM 的实战经验,展现了较多细节与思考。 + +- **堆栈聚合** +- **监控** +- **CPU 高消耗** +- **Jank 卡顿** +- **ANR 卡死** +- **内存异常** + +### 🐕 [关于 App Store 苹果商店价格的那些事(历上最全版)](https://juejin.cn/post/7205562168358895671) + +@[ChengzhiHuang](https://github.com/ChengzhiHuang):本文内容详实,通过 App Store 价格的历史 、App 本地化的价格和购买限制、App Store 调价的影响和应对方案 三个方面来对苹果的定价策略等进行了阐述,十分推荐一看。 + +## 摸鱼周报 + +[@摸鱼周报 #87](https://mp.weixin.qq.com/s/TwugmMEiGoFKYQY9euhg6Q):第 87 期摸鱼周报,一起来看下本期概要: + +* 本期话题:App Store 的定价机制升级扩展;四位女性开发者与 App Store 的故事 +* 内容推荐:推荐近期的一些优秀博文,涵盖结构化并发、开发者故事、开发经验分享、Swift Builtin 函数等方面的内容 +* 摸一下鱼:Planning for AGI;GPT4 发布;stable-diffusion-webui 尝试;一个 Alfred 插件 AJTools;苹果新版定价解读 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#238-2023.03.27.md b/Reports/2023/#238-2023.03.27.md new file mode 100644 index 000000000..287459b88 --- /dev/null +++ b/Reports/2023/#238-2023.03.27.md @@ -0,0 +1,124 @@ +# 老司机 iOS 周报 #238 | 2023-03-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [使用 Xcode 14.1 提交的截止日期即将到来](https://developer.apple.com/ios/submit/) + +在 2023 年 4 月之后,所有新提交的 App 都将必须使用 Xcode 14.1 及之后的版本进行提交,还未迁移的同学需要加快进度啦。近期如果还在用老版本 Xcode 提交构建版本的同学应该也已经收到了 ITMS-90725: SDK Verison Issue 的警告。 + +## 文章 + +### 🌟 🐕 [bilibili-AVIF 图片格式落地](https://mp.weixin.qq.com/s/4HaVDdSCPgsRpT8HhWRsZA) + +[@JonyFang](https://github.com/jonyfang):在如今越来越看重体验的大环境下,对图片库的要求也日益攀升。从成本的角度来看,使用 AVIF 格式可以节省大量的网络带宽和存储空间,减少网站加载时间,并且可以改善用户体验,进而提高网站的效率和收益,从而节约大量的费用。本文介绍了 AVIF 图片格式在 bilibili 的落地,内容大纲: + +1. AVIF 图片格式研究 + - 图片格式编解码研究 + - AVIF 在 B 站落地的调研 +2. 分端实现 + - 服务端架构 + - Web 端实现 + - 移动端处理(解码器选择、请求策略、监控及降级策略、双端踩过的坑及怎么爬出来的) +3. 业务落地 + - Web 端 + - 移动端 +4. 数据监控 + - 服务端监控 + - 移动端监控 + - 带宽收益 +5. 推广过程中遇到的问题 + - 在线资源池容量 + - 负载不均导致利用率低 + - 研发资源不足问题 +6. 展望 & QA + +### 🌟 🐕 [Flutter Dart:泛型的协变与逆变](https://mp.weixin.qq.com/s/Vyl51PtpBQ_lCZR_uUMgZg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文对 Dart 范型体系做了详尽的讲解,深入浅出;每个讲解都有详尽的代码示例,对于不熟悉范型和不熟悉 Dart 范型体系的同学来说,是一个不错的学习资料,小编强烈推荐. + +### 🐎 [Keyboard shortcuts for Export Unmodified Original in Photos for Mac](https://oleb.net/blog/2023/photos-keyboard-shortcuts/) + +[@Cooper Chen](https://github.com/cjlcooper):本文针对 macOS 系统上的照片应用程序没有为“导出未修改的原始照片”命令提供键盘快捷键的情况,通过使用 shell 脚本的方式,可以为最多 20 个选定项目指定 Ctrl+Opt+Cmd+E 快捷键组合的方式来来导出未修改的原始文件。这为 Mac 桌面开发者提供了一些快捷键维护的思路,可以作为一些借鉴和参考。 + +### 🐎 [Wrapping functions in structs](https://paul-samuels.com/blog/2023/03/18/wrapping-functions-in-structs/) + +[@zvving](https://github.com/zvving):本文探讨了在特定场景下将函数包装到结构体中的合理性: + +1. 避免误传错误函数:使用结构体可以减少将错误函数传入的可能性,因为现在需要传递一个具体的类型。 +2. 提供命名空间:将函数包装到结构体中可以为其提供一个命名空间,便于组织代码。 +3. 提高代码可读性:使用结构体可以为函数参数添加标签,从而使函数调用更清晰易懂。 + +虽然将函数包装到结构体中并非在所有情况下都适用,但是它确实为开发者提供了一个有用的编程技巧,灵活选用可以提高代码的可维护性和可读性。 + +### 🐢 [苹果内购录:关于新定价规则的理解与思考](https://mp.weixin.qq.com/s/ZQlBFHuRoDYmYpMfgnsp2Q): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):2023 年 3 月,苹果发布了定价上的新能力 , 包括支持设定 App / IAP 所在区域及全球价格平衡、支持某地区自定义价格及禁止销售等能力。这些新能力给予了我们在定价上更多操作自由和风控能力,但同时新能力也给予了我们更多需要关注的点。对于普通开发者而言,后续需要做的主要是调整 App / IAP 基准地区。而对于中大型团队而言,除了更改基准地区,还可能涉及到风控策略、App Store Connect API 升级、监控工具链的升级等更多方面考量。想了解更多信息可详细阅读本文。 + +### 🐕 [Handling status bar color scheme and visibility in SwiftUI](https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui) +[@AidenRao](https://weibo.com/AidenRao):本文介绍了如何在 SwiftUI 中处理状态栏的颜色和可见性。作者开源了一个名为 ScrollKit 的开源库,该库提供了一些滚动视图包装器,使处理偏移跟踪、粘性头部等变得容易。作者还介绍了如何使用 .statusBarHidden() 视图修饰符来隐藏状态栏,并创建了一个 ObservableObject 来管理状态栏的可见性状态。最后,作者提供了一个自定义的视图修饰符,使状态栏的可见性自动更新。 + +### 🐎 [Removing Search Web from a context menu](https://vicegax.substack.com/p/removing-search-web-from-a-context) + +[@zoeGuo](https://github.com/zoeGuo):选中 UITextView 或者 WKWebView 中的文案时,会弹出一个 UIMenu,我们叫他 context menu。笔者遇到的问题是:不想要 menu 中的 Search Web 实现,因为这个默认实现仅支持了在 Safari 中搜索,用户如果在使用其他的浏览器作为默认浏览器,那么这个功能就不能使用了。解决方法是:重写 UIMenu 的 replacingChildren(_:) 方法,阻止其他的 item 被 Search Web 替换,之后再加入自定义实现的 item。文章中附有详细实现代码,有兴趣的读者可以进原文仔细阅读~ + +### 🐕 [为啥我的代码库那么大?聊聊 Git 使用坏习惯](https://mp.weixin.qq.com/s/6sC8evIQ7AZBWwJFRi6mww) + +[@Barney](https://github.com/BarneyZhaoooo):本文非常接地气的剖析了代码库越来越大的原因以及 Git 使用上的坏习惯,深入浅出,富有代表意义。 + +- 代码库变大的真实场景分析 +- Git 结构详解 +- 最佳实践 + +### [JVMTI 在手淘 Profiler 中的应用](https://mp.weixin.qq.com/s/_J8KaXmMy0yJ8vv5fiVLSQ) + +[@Crazy](https://github.com/jiyan135960):本文介绍了使用 JVMTI 监控线上版本状态的方法。作者通过修改 JDWP 和 Runtime 文件,介绍了如何绕过 JVMTI 只能在 Debug 模式下运行的限制,并提供了一些处理受限版本的方法。此外,本文还介绍了手淘封装的 TBProfiler 工具,它主要可以完成以下监控任务: + +- 运行监控:包括方法调用监控、线程和类监控、异常捕获以及主线程锁监控。 +- 内存监控 +- 内存 Dump:包括对象实例信息、JVMTI 生成的 Hprof 和 Mini Hprof。 + +从手淘使用的功能可以看出,JVMTI 提供的能力非常强大而且实用。当日志提供的信息不足以支撑我们分析线上问题时,JVMTI 可以让我们更接近 Runtime,获取更多运行时信息。因此,本文非常适合有线上监控需求的同学仔细阅读。 + + +## 代码 + +### [gptcommit](https://github.com/zurawiki/gptcommit) + +[@老驴](https://weibo.com/u/6090610445):最近几个月,是 AI 的集中爆发期。按照 NVIDIA 老黄的说法, AI 已经正式进入到了多年未见的科技行业的 "iPhone Moment" 。各路人才也在 AI 的各类应用上发挥各种创意。 + +对于很多同学来说,如何写一个 commit 的信息一直是个老大难问题,要在尽可能短的句子中覆盖到代码修改的核心并不是一件容易的事情。 gptcommit 就是通过 GPT-3 来自动生成 commit 信息,解放大家的脑细胞。虽然用的模型不是最新的 GPT-4,但是思路上值得大家学习。 + +## 摸鱼周报 + +[@摸鱼周报 #88](https://mp.weixin.qq.com/s/ex3aHSPjKj9woxQwHyRzZA):第 88 期摸鱼周报来了,一起来看下本期概要吧: + +* 本期话题:Xcode 14.3 RC 版本发布 +* 内容推荐:推荐近期的一些优秀博文,涵盖 CreateML 使用、Runtime 探索、XCTest 性能测试等方面的内容 +* 摸一下鱼:集成 GPT-4 的 Cursor;Github 推出 CopilotX;AI 工具使用提效,Prompt 编写模式 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#239-2023.04.03.md b/Reports/2023/#239-2023.04.03.md new file mode 100644 index 000000000..0ea63431b --- /dev/null +++ b/Reports/2023/#239-2023.04.03.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #239 | 2023-04-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3 正式版发布](https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes) + +Xcode 14.3 的正式版来了,除了大家关心的 iOS 16.4 与 Swift 5.8,部分开发者可能在使用 new 创建对象时遇到 ``new is unavailable`` 的报错。遇到的话需要检查下对应对象的默认 init 方法是否被标注为了 NS_UNAVAILABLE ,如果是的话进行修改即可(之前版本不会强制报错)。因为 new 本身就等价于 alloc + init ,在 init 被禁用的前提下让 new 也在编译阶段报错能够更好地暴露问题。 + +## 新手推荐 + +### 🐎 [Xcode Tip: filter to show modified files only](https://www.jessesquires.com/blog/2023/03/22/xcode-tip-filter-modified-files/) + +[@Smallfly](https://github.com/iostalks):在大型 Xcode 工程中,定位已修改文件的效率会降低。这篇文章介绍了使用过滤器来查找最近修改过的文件,并提供了一些快捷键和技巧来更好的使用 Xcode,开发人员能够更加轻松地管理最近修改的代码文件,提高代码开发和维护效率。 + +## 文章 + +### 🐢 [Custom Actor Executors](https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md) + +[@JonyFang](https://github.com/jonyfang):Actor Executors 是 Swift 中用于处理 actor 模型的并发机制。传统的模型在处理大量并发请求时可能会遇到一些问题。Swift 引入了自定义 actor executors,允许开发人员创建自己的 actor executors 对象,更好地管理并发操作。开发人员可以创建多个 actor executors 对象,并将它们分配给不同的线程或协程。此外,自定义 actor executors 还可以动态地创建或销毁 actor executors 对象,以适应应用程序的需求。 + +### [Working with percentages in SwiftUI layout](https://oleb.net/2023/swiftui-relative-size/) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了如何在 SwiftUI 布局中使用百分比来控制子视图的大小。SwiftUI 的布局中通常不提供相对大小选项,例如“使此视图占其容器宽度的 50 %”。因此,我们可以在 Layout 协议之上构建自己的相对大小调整器。本文提供了一个名为 RelativeSizeLayout 的私有结构体,用于实现这一目的。同时,在 View 扩展中,我们添加了一个名为 relativeProposed 的公共 API,用于使用刚刚编写的布局。最后,文中还提供了实际使用的示例,展示了如何使用 relativeProposed 来控制聊天泡泡的大小,并说明了在使用相对大小时可能会遇到的一些问题。 + +### 🐎 [写给小白的 Midjourney 教程](https://mp.weixin.qq.com/s/nqnuqji0tK-4seuACtSjcw) + +[@Cooper Chen](https://github.com/cjlcooper):随着 AI 技术的持续大火,越来越多的机遇 AI 技术的产品或工具相继推出,而 Midjourney 应该是最近最火的 AI Image generator 了,作为一款可以用户通过文字描述,就可以绘制出图像的 AI 的应用,其生成的图像质量之高,令人叹为观止。然而由于 Midjourney 使用起来还有有一些门槛,所以本文写给完全没有任何编程基础的用户,你可以把本文当做一本 Midjourney 操作指南来使用。 + +### 🐎 [How the relative size modifier interacts with stack views](https://oleb.net/2023/swiftui-relative-size-in-stacks/) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇适合 SwiftUI 初学者的文章。笔者在 HStacks 中使用 .relativeProposed 和 .layoutPriority 对比几种情况下的视图的尺寸,分析出 HStacks 和 VStacks 在使用相对大小时视图尺寸计算的规则,得出结论:HStacks 和 VStacks 并没有将相对大小的修饰先整体计算出一组约束,而是根据子视图优先级的顺序,挨个计算子视图符合的尺寸,排在最后的视图的尺寸表现取决于最后剩余的空间大小。 + +### 🐎 [一个用在 Swift 中的模块管理框架](https://mp.weixin.qq.com/s/aFM_4OqDYcXPRIdF7x_41w) + +[@kemchenj](https://kemchenj.github.io/):在 OC 里,我们一般是可以通过 `__attribute((used, section("__DATA,"#sectname" ")))` 这种编译器提供的修饰符来将模块信息存到 Mach-O 的 section 去,等到运行时,在 `+load` 或其他时机取出进行注册,这种类似于自动注册的方式自然是很方便。 + +但是在 Swift 中,上面这种方式自然是不行的,本文作者封装了一套 Module Manager,通过扫描 Mach-O 中的 `__objc_classlist` 节拿到所有的 class,继而过滤出符合模块要求的 class 进行后续操作。 + +另外 Swift 官方在几个月前也提出过[一个草案](https://forums.swift.org/t/pitch-custom-metadata-attributes/62016)提供自定义注解 API,让我们可以通过类型安全的方式提供元数据,并且可以在运行时进行读取和操作,感兴趣的同学也可以查看。 + +### 🐎 [Flutter 小技巧之霓虹灯文本的「故障」效果的实现](https://mp.weixin.qq.com/s/VAF5IFsVvZMNikilckUcZg) + +[@Crazy](https://github.com/jiyan135960):这是一篇优秀的 Flutter 实践文章,介绍了如何制作霓虹灯特效。文章简短明了,首先讲解了如何使用 TextStyle 中的 Shadow 的 blurRadius 属性来制作发光文字特效,接着引出了利用 BackdropFilter 的 ImageFilter 制作发光图片的方法。之后,作者利用 ClipPath 和 Polygon 实现了文字撕裂效果,并提供了完整的效果对比。最后,作者通过变形闪动的技巧增强了撕裂效果的真实感。整体的代码实现简单易懂,没有任何难点。文章虽然简短,但在效果上表现出色,适合需要制作霓虹灯文本效果的同学参考。 + +### [降低网络延迟:让你的 App 变得更快](https://mp.weixin.qq.com/s/XoAm9OaXtzT3jE4LSBSpqw) + +[@dustturtle](https://github.com/dustturtle):如何打造更快的 App ,对于开发者来说是一个永恒的课题;原因无他,因为对于一个以网络交互为核心的现代应用来说,这是用户体验的核心所在:它意味着更流畅的音视频播放、低延迟的网络会议、快速加载的页面和资源、更少的游戏等待时间等等。2021 年,苹果通过 Session 10239: Reduce network delays for your app[2] 给大家分享了许多网络延迟优化相关的理论知识,并提出了 RPM (每分钟往返次数) 的概念和基于此概念的测试工具;而今年,苹果在去年的基础上,又为我们带来了这一篇实战性质颇强的分享,从客户端侧、服务端侧、网络协议侧三个方面入手提供一系列行之有效的建议,帮助开发者们更好的分析和改善应用的网络延迟状况,从而打造响应更加快捷的 App ,带来更好的用户体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#240-2023.04.10.md b/Reports/2023/#240-2023.04.10.md new file mode 100644 index 000000000..ee5c8764e --- /dev/null +++ b/Reports/2023/#240-2023.04.10.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #240 | 2023-04-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [SwiftUI 技术沙龙(上海站)](https://developer.apple.com/events/view/6DF4375B6R/dashboard) + +本次活动将在上海线下举办,在活动中你可以学习 SwiftUI 并与 SwiftUI 开发者社区建立联系。SwiftUI 借助 Swift 的强大功能,能帮助你用极少的代码在所有的 Apple 平台上构建外观精美的 App。我们将分享 SwiftUI 理念的核心原则,还会邀请多位社区内活跃开发者和大家分享 SwiftUI 实践经验。现在就加入我们,共同组建 SwiftUI 开发者社区吧! + +### [线上讲座:在你的 iPad App 中支持外接键盘](https://developer.apple.com/events/view/AS7D4BR8Y6/dashboard) + +通过熟悉和更具触感的体验,外接键盘可以使你的 iPad App 更易于使用,帮助用户更快地完成各种操作。此次课程中,你将学习如何在你的 iPad App 中支持键盘快捷键以及主菜单系统,并且探索如何使用外接键盘让你的 App 更容易导航和访问。 + +## 文章 + +### 🐢 [Overview of C++23 Features](https://mp.weixin.qq.com/s/4PKnoEDmYppYeJoh7oUVWg) + +[@xiaofei86](https://github.com/xiaofei86):从 C++11 开始,标准委员会每 3 年都会推出新的 C++ 版本。今年,C++23 也如期完成。相比 C++20 引入模块、协程、指定构造器等重要特性,C++23 主要在于“完善”。本文介绍了 C++23 25 个主要特性的基本用法,也会深入解析部分特性的原理。感兴趣的同学可以阅读原文了解。 + +### 🐕 [Using Critical Alerts in iOS applications - Igor Kulman](https://blog.kulman.sk/using-critical-alerts-on-ios/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简单介绍了 2018 年 iOS 12 发布的 **Critical Alerts** 的使用方式,我们比较少接触到它是因为需要特别向 Apple 申请才能使用。 + +### 🐎 [Sharing content in SwiftUI](https://swiftwithmajid.com/2023/03/28/sharing-content-in-swiftui/) + +[@Cooper Chen](https://github.com/cjlcooper):本文作者介绍了如何通过 SwiftUI 中引入的 CoreTransferable 框架以声明的方式来共享和导出应用程序中的内容,其中着重对 ShareLink 视图进行了说明,通过 ShareLink 的实例,可以将指定的内容导出到一个普通的字符串中,同时也支持如图像、二进制数据或任何其他自定义格式的数据共享,对相关场景下开发的同学有很好的参考价值。 + +### 🐕 [Block 内调用 super 引发的循环引用](https://juejin.cn/post/7219189831775420472) + +[@JonyFang](https://github.com/jonyfang):介绍了两种较为少见的 Block 循环引用,并提供了解决方法。主要内容: + +1. 宏的替换在 Preprocessed 阶段,super 的变更在 compile 阶段,因此对 self 进行 weak/strong dance 并解决不了 super 导致的循环引用问题; +2. 同时通过 RewriteObjc 与 Disassembly 的方法从底层原理上分析了 super 与 Block 调用的本质,辅以内存实际情况与示意图方便加深理解。穿插了 objc_msgSend Stub 相关的知识; +3. 验证了在 Block 中调用 super 时,RewriteObjc 生成代码的一个 bug; + +### 🐕 [Network Extension Debugging on macOS](https://www.avanderlee.com/debugging/network-extension-debugging-macos/) + +[@nianran](https://github.com/nianran):文章简介绍了在 macOS 上调试网络扩展的方法。作者从项目设置到调试步骤进行了详细说明,特别是如何在 Xcode 中附加 Network Extension 进程,以及如何使用系统控制台查看相关日志。对于遇到网络扩展调试问题的开发者非常有参考意义 ~ + + +### 🐎 [App Store 新定价机制 - 2023 年最全版](https://zhuanlan.zhihu.com/p/615969005) + +[@J_Knight_](https://github.com/knightsj):2023 年 3 月 9 日苹果正式上线新的 App Store 的定价机制。本文通过自定义价格、全球均衡价格、基准国家和地区和地区性定价方案这几个方面详细介绍了新定价机制的配置和规则。新的 App Store 的定价机制的优点: + +- 为了给开发者提供更多的定价选择和灵活性,可以根据不同的国家或地区、市场需求和消费能力来设置合适的价格。 +- 为了让开发者更容易管理汇率波动、税率变化等因素,避免造成收入损失或不公平。 +- 为了让用户有更多的选择空间和体验,增加他们对 App 的兴趣和满意度。 + +### 🐎 [Group and sort Swift collections like a pro](https://danielsaidi.com/blog/2023/04/01/group-and-sort-swift-collections-like-a-pro) +[@水水](https://www.xuyanlan.com/):本文介绍了如何用 Swift 进行专业的排序和分组,Swift 中提供了对集合进行分组和排序的强大方法: +- 使用 Dictionary(grouping:by:) 按名字进行分组 +- 分组后可以使用 .map 和 .sorted 进行排序 +- 实现 sorted 方法则可以进行自定义排序 +对集合的一些具体使用方法感兴趣的读者可以参考参考文本 ~ + +## 摸鱼周报 + +[@摸鱼周报 #89](https://mp.weixin.qq.com/s/3B_R0j8dpXpR5G9bCRsyXw):第 89 期摸鱼周报来了,一起看下本期概要吧: + +* 本期话题:WWDC 23 全球开发者大会日期公布 +* 内容推荐:推荐近期的一些优秀博文,涵盖:通过 ReplayKit 录制屏幕、在 SwiftUI 中使用相对比例进行布局、保护小组件中的用户隐私等方面的内容 +* 摸一下鱼:AGI 元年;微软对于 GPT-4 的研究论文;可以自定义数据源的 ChatGPT 插件;国产开源模型 ChatGLM + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#241-2023.04.17.md b/Reports/2023/#241-2023.04.17.md new file mode 100644 index 000000000..0ff53c26e --- /dev/null +++ b/Reports/2023/#241-2023.04.17.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #241 | 2023-04-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3: App built is not able to open on iOS 13.6](https://developer.apple.com/forums/thread/727680?login=true) + +苹果论坛有开发者反馈 Xcode 14.3 打出的包无法在 iOS 13 的部分系统上启动,报错在 [dyld3/Loading.cpp](https://opensource.apple.com/source/dyld/dyld-750.5/dyld3/Loading.cpp) 中:``Termination Description: DYLD, Assertion failed: (gotLocation), function applyFixupsToImage_block_invoke_3``,对于还需要兼容 iOS 13 的同学,此次 Xcode 的升级可以再稍微观望一段时间。 + +## 文章 + +### 🌟 🐎 [一些关于开发的杂谈话题 - 测试](https://onevcat.com/2023/04/dev-talk-testing/) + +[@JonyFang](https://github.com/jonyfang): 介绍了开发人员如何在编写代码时进行测试,以及测试对于软件质量和开发速度的重要性。首先解释了测试的概念和种类,然后详细讨论了单元测试和集成测试的区别以及如何运用它们来确保代码质量。接着,强调了测试的益处,例如避免代码回归、提高代码可读性和可维护性等。最后,分享了一些实用的测试工具和技巧,包括测试覆盖率、断言、模拟和持续集成等。整篇文章对于想要提高代码质量的开发人员来说是一篇很好的参考资料。整体内容结构: + +1. 为什么要写测试?你会给项目和代码写测试吗? + - 测试些什么 + - 不测试什么 +2. 测试的风格和测试框架 + - BDD, TDD 或者随心所欲? + - 关于 AI 在测试中的应用 + - Apple 平台的测试,XCTest 和其他框架 + - Unit Test、Feature Test 和 UI Test +3. 改善测试质量的方式 + - 注入、Mock 和 Stub + - 使用纯函数 + +### 🐕 [当我们说插件系统的时候,我们在说什么](https://mp.weixin.qq.com/s/mp4WL6Z2ESQTbK_B7ba8Fg) +[@kyo](https://github.com/KyoLi):本文其实属于前端的文章,文中所说的插件系统并非安卓的插件化,可以理解为类似于我们常说的组件化。当我们看到类似的名词,插件、组件、模块等等,他们都是对软件系统职责的划分,以达到降低工程复杂度,提高可维护性的目的。而我们常说的软件架构,其核心就是如何拆解、增加组件,所以,不要觉得这些名词很高深,其实都是系统架构本质要做的事情。 + +### 🐎 [macOS Network Metrics Using sysctl](https://milen.me/writings/macos-network-metrics-sysctl-net-rt-iflist2/): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 macOS 上如果观察系统的网络吞吐量,可以使用 sysctl() with NET_RT_IFLIST2:这提供了对 64 位指标的访问,它不会受到旧 API 的 32 位字段溢出的影响,获取的指标也不会受到截断的影响。 + +### 🐎 [iOS ReplayKit 与 屏幕录制](https://mp.weixin.qq.com/s/NbT1BE0CmYkyMXeVIekCpQ) + +[@Smallfly](https://github.com/iostalks):ReplayKit 是 iOS 系统提供的屏幕录制框架,随着系统的迭代,从最初只支持应用内录制到系统屏幕录制,再到 Loop Buffer 滚动剪辑,功能在不断地增加。本文介绍了云音乐 LOOK 直播录屏场景的实践,主要包括 Extension 和宿主 App 功能,以及两者之间的通信。此外,还介绍了如何在录屏过程中保护用户隐私,以及解决 Extension 50 M 内存限制的挑战。 + +### 🐎 [【开源推荐】 macOS 上的 ProcMon:Red Canary Mac Monitor](https://mp.weixin.qq.com/s/16SQfbl7YuHjumkKXDXtyA) + +[@Cooper Chen](https://github.com/cjlcooper):熟悉 Window 桌面开发的开发者对于 SysInternals Suite 都不会陌生,这是一款用于研究漏洞挖掘还是红蓝对抗的工具软件,多年以来 macOS 一直鲜有与之能对标的软件,而今天介绍的是来自安全公司 Red Canary, Inc. 的 Red Canary Mac Monitor,功能上类似 Windows 的 SysMon,基于系统的 Endpoint Security 框架,可以记录文件读写、进程创建等事件,这为 Mac 开发同学有很好的参考价值。 + +### 🐎 [The Power Of Plist](https://redsweater.com/blog/2083/the-power-of-plist) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 plist 的一些功能,如控制产品应该在哪些操作系统上运行(对应的 key 是 LSMinimumSystemVersion),而且还允许开发人员为特定操作系统考虑应用程序的哪些架构(对应的 key 是 LSArchitecturePriority)。另外还介绍了 plist 嵌入到应用的二进制文件的机制。 + +### 🐎 [When Matched Geometry Effect Doesn't Work](https://chris.eidhof.nl/post/matched-geometry-effect/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何使用 SwiftUI 中的 matchedGeometryEffect,在不同视图之间进行转换时,使它们的位置、大小和形状都流畅过渡。 + +## 工具 + +### [OrbStack](https://orbstack.dev/) + +[@邦 Ben](https://weibo.com/linwenbang):OrbStack 是一个可以在 macOS 上快速运行 Docker 容器和 Linux 虚拟机的工具,资源占用率低,高带宽,速度快。它主要有两个作用:替代 Docker Desktop、替代 Linux 虚拟机。官网所示,数据对比 Docker Desktop 在启动速度,CPU,Network,Memory 都有显著的数据提升。有需要的同学可以尝试一下,目前免费。 + +- 详细见:https://orbstack.dev/ + +## 代码 + +### [lexical-ios](https://github.com/facebook/lexical-ios) +[@kyo](https://github.com/KyoLi):Meta 最近开源了一个富文本编辑器,该编辑器依然是采用 JS 的方案。相比于其他的富文本编辑器,lexical-ios 具有轻量、高可扩展性的优点,它将编辑器的 UI 面板、工具栏、以及 markdown 等能力封装为类似于组件的形式,方便调用者自由扩展。具体的使用方式可以参考官方的文档 [Lexical Documents](https://facebook.github.io/lexical-ios/documentation/lexical/)。 + +## 摸鱼周报 + +[@摸鱼周报 #90](https://mp.weixin.qq.com/s/Bx8N9HqMP5HE9mzy6l3QVA):第 90 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:4 月 25 日起必须使用 Xcode 14.1 构建提交 App +* 内容推荐:推荐近期的一些优秀博文,涵盖:自定义 Swift Toolchain、软件测试、AI 应用、Dark Sky 设计经验等方面的内容。 +* 摸一下鱼:面向任务的 GPT 项目 Auto-GPT;把 GPT 模型融于模拟角色;把 AI 融于设计流程;Xcode 版本的 Copilot 插件 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#242-2023.04.24.md b/Reports/2023/#242-2023.04.24.md new file mode 100644 index 000000000..8c47f45c3 --- /dev/null +++ b/Reports/2023/#242-2023.04.24.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #242 | 2023-04-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Enabling the Inspection of Web Content in Apps](https://webkit.org/blog/13936/enabling-the-inspection-of-web-content-in-apps/) + +WKWebView 与 JSContext 在 iOS 16.4 SDK 中新增了属性 ``isInspectable``,只有开启了这个属性才会允许检查 Web 的元素,并且这个属性可以在任意时间修改(不需要重启 APP 或者重新创建 Webview 实例)。对于需要调试 Webview 的同学们需要对这个属性进行适配(开启)之后才能像往常一样通过 Web Inspector 进行查看。 + +##  Developer - 设计开发加速器 + +### [挑战:让你的 App 更加无障碍 2023 年 5 月 10 日](https://developer.apple.com/events/view/7F793DZPF3/dashboard) + +在本次线上讲座中,你将了解如何通过 Apple 操作系统提供的无障碍功能、无障碍 API 和开发者工具,来为每一个人打造卓越的用户体验。 + +参加线上讲座的开发团队,可在讲座当天报名参与无障碍适配挑战活动,通过审核后我们将邀请你参加 5 月 18 日在上海设计与开发加速器举办的无障碍宣传日线下活动,在线下你将了解到更多无障碍开发技术,以及与其他开发者进行交流和互动。我们还将邀请使用无障碍功能的用户来分享他们的故事,了解 App 是如何赋能他们的日常生活;以及有经验的开发者来分享他们的工程实践,看如何在产品内部推进无障碍适配。你还可获得一对一咨询和深度辅导,获得针对你 App 的无障碍优化建议。 + +### [线上讲座:探索 Vision 框架](https://developer.apple.com/events/view/93396BVQ5Y/dashboard) + +Vision 框架支持人脸检测、文本检测、二维码检测、图像配准、特征追踪等一系列能力。探索如何通过 Vision 框架,在你的 App 内应用计算机视觉相关能力,了解一系列 API,用来在图片和视频上执行不同的任务。 + +## 文章 + +### [抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%](https://mp.weixin.qq.com/s/MT5MHhZIlyrhuVNM3Ckteg) + +[@kemchenj](https://kemchenj.github.io/):抖音基础技术团队在这篇文章里分享了一个很有趣的编译问题: + +1. Swift 和 OC 混合的模块里,Swift 自动生成的 xxxx-Swift.h 文件里会 import 所有直接和间接依赖的模块。(这种行为也被称为 re-export) +2. 所以依赖了这个混合代码的模块的 OC 模块,它的所有间接依赖都会变成直接依赖。 +3. 而对于编译器来说,当一个模块直接依赖的模块 API 发生变化时,它的编译缓存就会失效,需要重新进行编译。 + +由于上述的三点,底层库的 API 修改很容易触发大面积的编译缓存失效,并且由于上层模块的直接依赖变多,导致缓存失效的判断逻辑也会变得更加复杂,最终导致编译时间增长。 + +Swift 这么设计的原因主要是**为了兼容 C/OC 头文件的行为**,[在 Swift 的论坛里开发组也曾经解释过具体的细节](https://forums.swift.org/t/exported-and-fixing-import-visibility/9415/36)。 + +但实际代码里很少会依赖这个行为,抖音的技术团队就尝试定制 Toolchain,增加更多选项去限制这个行为的生效范围,从而**最终实现编译提速 60%**。 + +### [PC GWP-ASan 方案原理 | 堆破坏问题排查实践](https://mp.weixin.qq.com/s/xipHtjHPVlyFQ6W-1HfUQQ) + +[@xuyafei86](https://github.com/xiaofei86):众所周知,与内存访问相关的崩溃是最难分析的崩溃类型之一。对于这种崩溃,线上采集到的崩溃日志能提供的有效信息十分有限。因为堆破坏的时间往往在发生崩溃很早之前,等到发生崩溃时,上下文早已丢失,而从崩溃的位置回溯堆破坏的源头,是一件非常有挑战性的工作。 + +GWP-ASan 是 Google 主导开发的用于检测堆内存问题的调试工具。它基于经典的 Electric Fence Malloc 调试器原理,概率采样内存分配行为,抓取内存问题并生成上传崩溃报告。其可以检测 Use-after-free、Buffer-overflow 和 free-invalid-address 等内存访问相关的错误。 + +本文介绍了剪映专业版接入字节内部 APM-PC 平台 GWP-ASan 功能的实践,包含对监控原理说明和 5 个线上实例。感兴趣的同学可以阅读原文了解。 + +### 🐎 [What I Learned Writing My Own CloudKit Syncing Library](https://ryanashcraft.com/what-i-learned-writing-my-own-cloudkit-sync-library/) + +[@Smallfly](https://github.com/iostalks):[CloudSyncSession](https://github.com/ryanashcraft/CloudSyncSession?ref=ryanashcraft.com) 是一个基于 CloudKit 框架的 Swift 库,旨在使编写支持同步和离线功能的应用程序更容易。作者通过一篇文章介绍了该库的开发背景,设计思路,以及使用姿势。 + +### 🐎 [Mastering Canvas in SwiftUI](https://swiftwithmajid.com/2023/04/11/mastering-canvas-in-swiftui/) + +[@享耳先森](https://github.com/iblacksun):SwiftUI 中,绘制图形可以使用高级的 `ShapAPI`,也可以使用 `Canvas` 直接绘制。本文介绍 `Canvas` 的基本用法,也介绍了如何使用 `Canvas` 绘制文本、图片,甚至给 `Canvas` 添加动画。 + +### 🐎 [3 mistakes to avoid with async / await](https://www.swiftwithvincent.com/blog/three-mistakes-to-avoid-with-async-await-in-swift) + +[@Cooper Chen](https://github.com/cjlcooper):本文作者在 Swift 中使用 async/await 要避免的 3 个错误,其中包括: +- 尽可能的不同时运行代码 +- 不能正确理解 Task 自动捕获 self 的原理 +- 在不需要的时候使用了 Task.detached + +### 🐕 [淘宝 iOS 拍立淘微距能力探索与实现](https://mp.weixin.qq.com/s/4tG4BTx54rXIdHbXKqI_cQ) + +[@EyreFree](https://github.com/EyreFree):在最近两年苹果发布的 iPhone13 Pro Max 和 iPhone14 Pro Max 系列的手机上,如果使用三方主流 App 进行近距离对焦,会产生画面模糊的问题。为了优化用户体验,拍立淘 iOS 端开发团队进行了摄像头切换(微距)问题的分析和解决。本文从原理开始分析,通过层层拆解,把「微距实现」这个命题划分成为三个主要的解决目标:变焦系数、光照水平、焦点位置的确定。并围绕链路实现、性能、适配三个层面进行可行性验证,完成微距能力的落地。建议正在研究相关问题的同学阅读。 + +### 🐎 [Using DWARF to find call sites of inline functions](https://margiolis.net/w/dwarf_inline/) + +[@Damien](https://github.com/ZengyiMa):DWARF 是一种调试信息文件格式,被许多编译器和调试器用来支持源代码级调试。它解决了一些程序性语言的要求,如 C、C++ 和 Fortran,并被设计为可扩展到其他语言。DWARF 是架构独立的,适用于任何处理器或操作系统。如果你对使用 DWARF 来查找内联函数的调用点有需要,不妨阅读下本文,这对你或许有很大的帮助。 + +### 🐎 [Reducing iOS app size using linker and why_load](https://asifmohd.github.io/ios/2023/03/30/reducing-ios-app-size-using-linker.html) + +[@Leo](https://github.com/LeoMobileDeveloper):why_load 是 Apple LD 提供的一个链接选项,通过这个选项我们可以了解到一个 Symbol 在链接形成最终产物的时候为什么被保留了下来。文中介绍了如何利用这个选项,来减少我们 App Extension 产物中保留的符号,进而优化包体积。当然,类似的方法也可以用于主二进制,不过对于主二进制的优化要更加的慎重,避免引入新的问题。 + + +## 摸鱼周报 + +[@摸鱼周报 #91](https://mp.weixin.qq.com/s/93YLa8ankkEVcp4pop2A6A):第 91 期摸鱼周报,一起来看下本期概要: + +* 本期话题:线上讲座:探索 Vision 框架;5 月 9 号,App Store 定价以美国价格为基准进行更新 +* 内容推荐:推荐近期的一些优秀博文,涵盖:App Clip、CloudKit、Swift ABI 稳定性等方面的内容 +* 摸一下鱼:建了一个交流 AGI 知识的社群;在 Vercel 上部署 ChatGPT 的聊天能力;一个把 AI 拟人化的网站;AI Talk 基于 GPT4 让马斯克和乔布斯进行对话;基于 Apple 健康数据分析的 App HealthGPT +* 岗位招聘:蔚来汽车 App iOS 研发 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#243-2023.05.08.md b/Reports/2023/#243-2023.05.08.md new file mode 100644 index 000000000..435b82025 --- /dev/null +++ b/Reports/2023/#243-2023.05.08.md @@ -0,0 +1,123 @@ +# 老司机 iOS 周报 #243 | 2023-05-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Foundation Package 预览版发布](https://www.swift.org/blog/foundation-preview-now-available/) + +[@kemchenj](https://kemchenj.github.io/):去年周报曾经提到 [Foundation 将使用 Swift 重新实现](https://github.com/SwiftOldDriver/iOS-Weekly/blob/9f5f9487a469fd33d0c39f3434107f77987946c0/Reports/2022/%23227-2022.12.12.md?plain=1#L10),近日 Swift 开发团队发布了预览版,日期相关的功能性能对比当前版本的 Foundation 提升 20%-150%,而 JSONDecoder/JSONEncoder 的性能提升甚至达到 200%-500%。 + +2023 年上半年会继续集中在核心 API 的实现和测试的补齐,下半年则会集中在导入现有的 Foundation API,例如 URL/Bundle 等,并且过程中也允许通过提案加入小部份全新的 API。 + +一句话总结,Swift is the new Foundation。 + +## 文章 + +### 🐕 [心遇 iOS 端会话页性能优化 — ReactiveObjC 实践篇](https://mp.weixin.qq.com/s/_nYM42vgSEqlJuoMlPdCUw) + +[@享耳先森](https://github.com/iblacksun):`ReactiveObjC` 是 `Objective-C` 下的响应式编程框架,可以将各种通知、代理等转换成事件流进行分发,`Swift` 下有 `RxSwift` 及 `Combine`。本文介绍了「心遇」团队如何使用 `ReactiveObjC` 解决项目中逻辑分散的问题。 + +> Tips: 开发者们在上手 `RAC` 类库前建议先评估学习曲线及维护、调试问题。 + +### 🐕 [Notifications: why less is more — how Facebook has been increasing both user satisfaction and app usage by sending only a few notifications](https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Facebook 的通知数据科学团队的成员,针对用户对通知的感受进行了调查。最终的结论我相信 Facebook 以外的其他数据科学团队也可以从中受益。他们发现,在更少的通知体验中,用户会更多的使用 Facebook,用户行为的转变需要很长时间,更少的干扰会导致更高的自然使用率,从高提高用户满意度和程序使用率。需要注意的是,长期试验可能会显示出与短期实验不同的结果,甚至结果截然相反,因为人们需要时间来适应变化。 + + +### 🐕 [十年“屎山”终重构,但 QQ 选用了微软 Teams 放弃的 Electron](https://mp.weixin.qq.com/s/f6M1w2kX0jhYgasIWwsawg): + +[@Damien](https://github.com/ZengyiMa):本文不是技术文章,主要介绍了 QQ 全新的 NT 技术架构,QQ 凭借 NT 架构实现了 QQ 多平台架构的统一,而 QQ NT 技术的一个重点就是使用 Electron 作为新版 QQ 桌面端 UI 跨平台解决方案。有意思的是,在同一时刻,微软 Teams 正在放弃的 Electron,对跨平台开发感兴趣的同学不妨一读。 + +### 🐎 [MainActor usage in Swift explained to dispatch to the main thread](https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 MainActor 的概念和使用方法。首先介绍了它的概念:它是 Swift 5.5 中引入的一个新属性,它提供一个在主线程上执行任务的执行器,使用 ``@MainActor`` 属性将帮助你确保你的 UI 总是在主线程上更新。MainActor 是一个全局唯一的 Actor,他在主线程上执行他的任务。它应该被用于属性、方法、实例和闭包,以在主线程上执行任务。然后结合代码示例介绍了它在不同场景下的使用方法。 + + +### 🐕 [开源图像模型 Stable Diffusion 入门手册](https://mp.weixin.qq.com/s/8czNX-pXyOeFDFhs2fo7HA) + +[@老驴](https://weibo.com/u/6090610445):最近大热的除了 ChatGPT 这样的大语言模型之外,Stable Diffusion 这样的图像模型也受到了广泛关注。而且因为图像模型相对来说比较容易在自己的机器上跑,所以很多同学都跃跃欲试,想要部署在自己的机器上来体验效果。 这篇来自腾讯技术的文章是个很不错的给初学者的入门文章,从零开始带你一步一步部署图像模型。有兴趣的同学可以来学习一下。 + +### 🐎 [veImageX 演进之路:iOS 高性能图片加载 SDK](https://mp.weixin.qq.com/s/JClQbL9D3PftGuw2H_KXXw) + +[@Smallfly](https://github.com/iostalks):本文主要介绍了 veImageX iOS 客户端图片加载 SDK,它的核心功能包括: + +- 网络加载:默认支持原生网络库与自研网络库,不仅做了一些网络相关优化,而且支持最新的网络协议 QUIC,也提供了精细粒度的网络监控; +- 图像解码:支持苹果原生图片格式,以及社区其它主流的图片格式解码,全系统支持 HEIF 格式; +- 图片处理与变换:图片加载完成后,除了对图片进行装饰,还支持超分,实现低分辨率传输,高分辨率显示; +- 日志上报:包含图片性能日志、用户感知日志、大图监控日志,配合工作台可以全方位监控图片各项指标。 + +除了基础的功能模块,该 SDK 还进行了一系列的性能和体验优化,提升图片加载体验,优雅控制内存,以及动图播放优化。目前该 SDK 以开放平台的方式提供收费服务。 + +### 🐕 [快手 Swift 历险记之 Clang Module 带来的“坑”](https://mp.weixin.qq.com/s/RarmJgRWiINE87feMAMaaA) + +[@老峰](https://github.com/Gesantung):本文主要介绍了快手接入 Swift 后开启 Clang Module 后所遇到的问题如编译错误、Module 编译慢、PCH 编译优化失效、Module 复用率低 & 过期导致编译失败等,以及对应的解决方案 Clang 关闭 Clang Module ,原理非常简单,主要是打破了接入 Swift 过程中的一些经验“误区”。 + +### 🐕 [Debug iOS app in Visual Studio Code](https://yrom.net/blog/2023/04/22/debug-ios-app-in-vscode/) + +[@JonyFang](https://github.com/jonyfang): 本篇主要介绍了在 VSCode 中调试 iOS app 的过程。主要内容结构: + +1. 使用 LLDB 远程调试程序,简述大概的原理。 +2. VSCode 调试 ios app 代码。必要的插件能力介绍及配置。 +3. 调试 XCTest。介绍了 vsc 的相关配置及原理。 +4. 调试带宿主 app 的 XCTest。通过反射或者 dlsym 直接调用 XCTestCore 等私有 Framework 的符号,创建 XCTestDriver 进而调用 XCTestCase。 + +通过本文,可以了解到 VSCode 如何自定义 tasks 和 launch configurations,跟着实践,也可以深入了解到 lldb 调试程序的原理。 + +### 🐕 [Yielding accessors in Swift](https://trycombine.com/posts/swift-read-modify-coroutines/) + +[@zoeGuo](https://github.com/zoeGuo):多任务协同在开发中会经常遇到,当多任务处理中遇到 copy-on-write types 和 dynamic properties 时,协同生成器就能起到很大的作用了。在 Swift 中协同生成器 _modify 和 _read 方法配合 yield 关键字,在多任务协同工作时体现出的显著性能优势,包括数据处理速度以及内存使用大小。文章详细举例验证了使用协同生成器后的性能提升,但 _modify 和 _read 两个方法还有 _ 标识,意味着还在 work-in-progress 的阶段,而 yield 关键字目前也只能在 nightly toolchains 中使用 , 期待尽快在 Swift 新版本中看到更新。 + +### 🐕 [链接器优化 : 相同代码折叠 ICF](https://zhuanlan.zhihu.com/p/484176002) + +[@AidenRao](https://weibo.com/AidenRao):ICF 是链接器的一项优化技术,在链接阶段把有相同实现的 C++ 方法合并链接到同一个地址。由于 C++ 模版会生成大量相同实现的方法,所以这个技术在 C++ 代码中有很好的安装包优化效果。 +相关阅读链接: +- [Safe ICF: Pointer Safe and Unwinding aware Identical Code Folding in the Gold Linker](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36912.pdf) +- [LLD for Mach-O: The Journey](https://llvm.org/devmtg/2022-05/slides/2022EuroLLVM-LLD-for-Mach-O.pdf) + + +## 工具 + +### [ETTrace](https://github.com/emergeTools/ettrace) + +[@Leo](https://github.com/leomobiledeveloper):ETTrace 是 emergeTools 开源的用来分析代码耗时的工具。实现原理是在 App 内启动一个子线程定时获取主线程的函数堆栈,然后把这些堆栈生成 json 上传到网站以火焰图的方式供开发者分析。逻辑上这种方式比 Instrument 更精确,因为 iOS16 开始,dyld4 会进行预计算 protocol conformances 来优化启动耗时,但 Instrument 的实现方式是用 DYLD_INSERT_LIBRARIES,导致这个优化被禁用了。 + + +## 代码 + +### [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#readme) + +[@极速男孩](https://github.com/ztlyyznf001):Compose Multiplatform 是一个基于 Kotlin Multiplatform 的跨平台 UI 开发框架,旨在简化和统一 Android、iOS、桌面和 Web 应用程序的用户界面开发。它的核心概念源于 Jetpack Compose,这是 Google 推出的现代 Android UI 工具包,支持使用 Kotlin 编写声明式 UI 代码。在最近的 Alpha 版本中迎来了 iOS 的支持。 + +## 摸鱼周报 + +[@摸鱼周报 #92](https://mp.weixin.qq.com/s/AQaY2DA2h8S-XEYoQ0u7Ew):第 92 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Swift Foundation 预览版发布;App 无障碍功能线上讲座 +* 内容推荐:一些优秀博文,涵盖:Mirror API、网络可达性优化、SwiftLint 等方面的内容。 +* 摸一下鱼:最全 AIGC 工具集;AI 领域几个开源项目;HuggingChat 发布;陆奇演讲总结 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#244-2023.05.15.md b/Reports/2023/#244-2023.05.15.md new file mode 100644 index 000000000..a6ad49612 --- /dev/null +++ b/Reports/2023/#244-2023.05.15.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #244 | 2023-05-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub 的 Code Scanning 正式提供 Swift 的支持](https://forums.swift.org/t/beta-testers-wanted-get-a-sneak-peek-at-github-s-code-scanning-support-for-swift/64632) + +GitHub 的 Code Scanning 会扫描和索引项目的 Dependency 信息,并且提供: + +- **Dependency Graph**。 + - 这意味着开发者可以在 GitHub 上看到有哪些项目依赖了自己的 Swift 库。 + - 可以使用 [Dependabot](https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts),在依赖库更新时,自动提交 Pull Request 更新依赖库版本。 +- **安全漏洞警告**。如果一个代码库出现安全漏洞时,它可以在发布修复版本后使用 GitHub 内建的功能进行记录,此时 GitHub 就会通知所有依赖了这个库的下游项目,并且自动提交 Pull Request 将依赖更新到已修复的版本。 + +### **增强全球定价机制** 基准调整引发涨价 + +苹果在 3 月时就公告会进行 [增强全球定价机制](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23236-2023.03.13.md#app-store-%E7%9A%84%E5%AE%9A%E4%BB%B7%E6%9C%BA%E5%88%B6%E5%8D%87%E7%BA%A7%E7%8E%B0%E5%B7%B2%E6%89%A9%E5%B1%95%E8%87%B3%E6%89%80%E6%9C%89%E8%B4%AD%E4%B9%B0%E7%B1%BB%E5%9E%8B) 的调整,老司机技术也提醒过大家,希望大家都可以提前根据需要选择合适的基准。5 月 9 日凌晨已准时上线,但开发者们发现虽然已经提前将基准设置为了中国大陆,但却依旧有概率 **被** 涨价,例如:原本设置为 6 元的 IAP 物品变成了 8 元。问题在上午 10 点左右陆续恢复,部分开发者早上一醒来收到部分付费用户的投诉只能含泪处理了~ + + +## 文章 + +### 🐢 🌟 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g) + +[@Cooper Chen](https://github.com/cjlcooper):如何优化编译开发体验一直是开发者老生常谈的问题,而 Xcode 作为 Apple 开发者必须要使用的工具,其相对封闭的生态环境,让大多数开发者对它的编译优化都常常感到捉襟见肘。哔哩哔哩作为国内较早尝试 Bazel 作为 iOS 主力编译系统的团队,针对这些问题提出了使用 VSCode + Bazel 的方案来打造一套全新的开发环境。其中作者对编译优化最核心的思路包括: +- 尽量只使用 Code 本身,其他 Xcode 自带的例如 IB 等能力能不用则不同 +- 回归编译本身,尽可能多的关闭 xcodebuild 自带的 feature +- 全面拥抱 Xcode 的衍生研发工具链 + +根据以上思路,作者使用的是 VSCode + rules_bis 的自研方案,在研发体验和效率上实现了较大的提升。在发文时,B 站所有 Apple 项目已经切换至 vscode(bis) / rules_xcodeproj(bwb) / 双模式下。 + +[@Damonwong](https://github.com/Damonvvong):发布这篇文章的目的是一个全新的视角,希望大家可以有所了解,但是从我个人的技术判断来看,除非规模化的团队,不然 Xcode 依然是最好用的 iOS 开发工具。 + +规模化团队会因为团队特色、组织架构等各种原因出现不同的问题,因此团队内部配备一些对工程化有解决能力的同学是必须的,如果没有这方面的投入,一线同学会苦不堪言。 + +当然,也有一部分同学会考虑技术价值,但是技术价值在不同场景大小差异是不同的。 + +说个题外话,很多同学都喜欢搞组件化,但是不知道大家有没有考虑过,当工程能力不足的时候,组件化是否真的是一个合理的架构设计? + +### 🐕 [A Swift Spelling Corrector](https://airspeedvelocity.net/2015/05/02/spelling/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一篇基于 Peter Norvig 的博文《How to Write a Spelling Corrector》中的 Python 代码,使用 Swift 编写的拼写纠正器,下面是代码的一些说明: + +- edits1(word) 函数接受一个单词作为输入,并生成一组可能的拼写错误修正候选词 +- SpellChecker 结构体是一个拼写检查器,它用于训练和纠正单词 +- train(word) 方法用于训练拼写检查器,将单词添加到已知单词集合中 +- knownEdits2(word) 方法返回与给定单词距离为 2 的已知单词的集合 +- known(words) 方法接受一个单词序列作为输入,并返回已知单词集合中存在的单词 +- correct(word) 方法接受一个单词作为输入,并返回纠正后的拼写结果 + +这段代码演示了如何使用 Swift 编写一个简单的拼写纠正器。它使用了一些字符串操作和集合操作,以及一些基本的 Swift 语言特性。 + +### 🐕 [Behind-the-Design: Meet Copilot. When the system is the product; on … | by Microsoft Design | Microsoft Design | Apr, 2023 | Medium](https://medium.com/microsoft-design/behind-the-design-meet-copilot-2c68182a0e70) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要探讨了人工智能产品 Copilot 的设计理念、体验框架和开发原则,以及如何通过 AI 增强人类的能力。以下是几个要点: + +- **协作**:Copilot 设计以人为中心,将 AI 作为用户的协作伙伴,而非取代人的工具。 +- **用户控制**:在设计中,注重用户主导地位,强调用户对 AI 的控制和理解。 +- **多元体验**:Copilot 提供沉浸式、辅助和嵌入式三种体验,以满足不同的工作环境和认知需求。 +- **开放和学习**:微软坚持开放设计,积极寻求反馈,持续学习和改进。 + +总的来说,文章阐述了微软如何通过 Copilot 展示了 AI 的协作价值,同时强调了在设计和开发过程中保持以人为本,不断学习和改进的重要性。 + +### 🐎 [Double Protocol Conformance](https://alexanderweiss.dev/blog/2023-04-23-double-protocol-conformance) + +[@zvving](https://github.com/zvving):双重协议一致性是指一个类型多次声明遵循某个协议。当同一个 target 中的类型多次声明遵循相同协议时,Xcode 会抛出错误并停止编译,但是在不同 target 中声明同样的协议实现时,问题就变得难以发现。 + +作者还分享了一个更极端的情况,当涉及到三个 target,Xcode 不再显示警告信息,导致很难发现我们在设置协议一致性方面的错误。作者建议在多模块化代码库中工作的开发团队,确保为协议一致性设置规则,避免出现类似的极端情况。 + +### 🐕 [iOS 客户端动图优化实践](https://mp.weixin.qq.com/s/MW14R1JfXRmQvgN2NNi3iA) + +[@Smallfly](https://github.com/iostalks):在 App 内展示动图是非常常见的需求,本文介绍了 QQ 音乐 iOS 端在使用动图时,遇到内存不足引起的各种崩溃,经过一系列的优化,在性能以及稳定性方面取得较大的提升,主要包括: + +- 解决频繁崩溃问题; +- 首帧加载性能保持稳定; +- 图片内存命中率由 65% 上升至 76%; +- 对比业界开源方案,CPU 占用更少 , 内存使用更少 , 并且有更好的流畅度。 + +对具体优化措施感兴趣的同学可参阅原文。 + + +### 🐎 [文件名还是顶级域,傻傻分不清](https://mp.weixin.qq.com/s/Swzt7_O3vmgG_zukfCAkVg) + +[@Damien](https://github.com/ZengyiMa):Google 五月初放出来一波新的顶级域名,包括 .dad, .phd, .prof, .esq, .foo, .zip, .mov 和 .nexus 等域名,其中 .zip 和 .mov 最让人容易误解是文件地址,基于此容易引申出了一个 MacOS 的安全漏洞,对漏洞感兴趣的同学不妨阅读。 + + +### 🐎 [京喜 APP - 图片库优化 | 京东云技术团队](https://juejin.cn/post/7231735955794427960) + +[@J_Knight_](https://github.com/knightsj):本文介绍了京喜团队对图片框架上的两个优化方向:一方面是降低图片网络传输,提高图片加载速度。另一方面是减少图片内存消耗。在网络传输上,图片框架先对图片 URL 进行预处理,预处理包括域名统一,添加缩放参数,添加 webP 参数,添加降质参数的方式减少图片网络传输大小。在内存消耗上,使用了图片缩放以及限制缓存上限的方法来避免缓存使用过高。文章结尾还介绍了在 Flutter 中优化的几个方向。 + +### 🐢 [淘宝 APP 网络架构演进与弱网破障实践](https://mp.weixin.qq.com/s/NVhtEoWUJK87ADwjXC5K0w) + +[@AidenRao](https://weibo.com/AidenRao):本文将介绍淘宝 APP 统一网络库演进的过程,讲述如何围绕体验持续构建南北向(client-server 之间的流量)从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术 / 多协议择优调度手段,贴合厂商赋能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。 + +## 工具 + +### [AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围](https://juejin.cn/post/7226327556198744122) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):苹果派是一个可以便捷地管理所有 IAP 内购项目的工具,相比在 AppStore Connect 上一个个项目操作,在苹果派里的操作更加便捷,同时还支持了 基准国家和自定价格配置、销售范围配置、批量上传 等实用功能。同时工程代码全部 [开源](https://github.com/37iOS/AppleParty),Connect API 等调用方式也有相当的参考价值。 + +## 音视频 + +### 🐎 [微软开发者拆解 SwiftUI 优化秘籍,教你轻松提升百倍性能](https://www.bilibili.com/video/BV1uM41137An) + +[@EyreFree](https://github.com/EyreFree):作者用视频演示的方式总结了用两周时间优化公司 SwiftUI 项目得出的相关经验,其中结合了对基本 SwiftUI 控件布局和刷新机制的解释,在做 SwiftUI 开发的小伙伴们不要错过。 + +## 摸鱼周报 + +[@摸鱼周报 #93](https://mp.weixin.qq.com/s/ios0QYKmnYtJ8URvZLJ1TA):第 93 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:App Store 5 月 9 日增强全球定价机制已更新 +* 内容推荐:模块化架构、Deep Dish Swift 总结、TabularData 框架相关博文。 +* 摸一下鱼:最近利用 AI 技术做了一些尝试,开了一个 AI 绘图的小红书账号、开发了一个总结网页内容的浏览器插件;GPT 需求设想方案汇总;一个摘要总结插件 glarity;面向开发者的 ChatGPT Prompt 编写指南 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#245-2023.05.22.md b/Reports/2023/#245-2023.05.22.md new file mode 100644 index 000000000..9d7d9d0b0 --- /dev/null +++ b/Reports/2023/#245-2023.05.22.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #245 | 2023-05-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [2022 App Store Transparency Report(PDF)](https://www.apple.com/legal/more-resources/docs/2022-App-Store-Transparency-Report.pdf) + +苹果发布了 2022 年的 App Store 透明度报告,这也是首次发布类似报告,App Store 的透明对所有开发者与用户都是非常有益的事,我们在近几年看到越来越开放的苹果,这无疑是值得肯定的。 + +而这其中有很多很有参考意义的数据,大家可以自行翻阅,我们列举出其中几项: + +- 提交 Review 了 6,101,913 个 APP,被拒 1,679,694 个,被拒之后完成整改后通过 253,466 个。一次被拒可能会有多个原因,而频次最高的是 **Performance** 。 +- 共有 36,974,015 名开发者,2022 年封禁了 428,487 个,其中有 3338 名提起了上诉,最后申诉成功 159 个。封禁的最主要原因是 **欺诈行为** 。 +- 2022 年封禁了 282,036,628 个用户账号,避免了 $2,090,195,480 的损失。苹果不论对开发者还是用户都在付出努力保障安全。 + + +## 新手推荐 + +### 🐎 [Ranges in Swift explained with code examples](https://www.avanderlee.com/swift/ranges-explained/) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了 Swift 中 Range 的不同类型: ClosedRange、CountableClosedRange ,以及使用简易的操作符代替声明 Range 的使用方法和规则。并且演示了 Range 如何转化为 NSRange 使用和 Range 在字符串使用中如何处理特殊字符。文章适合 Swift 新手快速了解 Range 的使用方法。 + +## 文章 + +### 🐎 [file behavior change in Swift 5.8](https://sarunw.com/posts/file-behavior-change/) + +[@AidenRao](https://weibo.com/AidenRao):在 Swift 5.8 之前,`#file` 和 `#filePath` 都返回文件的完整路径,而这可能会泄露个人的敏感信息。 Swift 5.8 以后,`#file` 支持只返回文件名和它出现的模块。此功能默认禁用,可以通过在 Other Swift Flags 里添加 -enable-upcoming-feature ConciseMagicFile 打开。 + +### 🐕 [Parallax header effect in SwiftUI using CoordinateSpace](https://arturgruchala.com/parallax-header-effect-in-swiftui-using-coordinatespace/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了在 SwiftUI 中利用 CoordinateSpace 实现滚动视差效果。 + +- **Creating ParallaxHeader View:** 创造 ParallaxHeader 视图,包含坐标空间、内容和默认高度参数。 +- **Adding Blur Effect:** 为头部视图添加模糊效果。 +- **Offset Calculation:** 根据 GeometryProxy 和坐标空间的相对位置计算头部偏移。 +- **Height Calculation:** 计算头部视图的高度修饰符。 +- **Usage:** 展示了如何在 SwiftUI 视图中使用视差头部。 + +### 🐎 [How to Open using Rosetta in Xcode 14.3](https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/) + +[@Smallfly](https://github.com/iostalks):Rosetta 是 Apple 开发的软件转译工具,它能将基于 Intel 架构指令的应用程序在新的基于 Apple Silicon 处理器的 Mac 上进行转译和运行。 + +Xcode 14.3 之后,应用详情中开启 Rosetta 的选项被移除,集成到了模拟器选择列表中,方便在不同架构之间切换。 + + +### 🐎 [Accessing Security Scoped Files](https://useyourloaf.com/blog/accessing-security-scoped-files/) + +[@Damien](https://github.com/ZengyiMa):iOS App 的应用是无法直接访问其自身容器之外的文件,例如存储在 iCloud 中的文件,直接读取,将会收到权限错误提示。如果需要访问这些文件,那么就需要使用安全范围相关的 API 了。本文会详细介绍如何使用这些 API,感兴趣的同学不妨一读。 + +### 🐎 [Skip typing your login credentials manually with Xcode breakpoints](https://www.danijelavrzan.com/posts/2023/04/login-xcode-breakpoint/) + +[@anotheren](https://github.com/anotheren):文章以登录凭据为例,介绍了如何使用 Xcode 断点来自动输入调试内容。该方法对代码无入侵,是个非常有用的 Tips。 + +## 代码 + +### [swift-power-assert](https://github.com/kishikawakatsumi/swift-power-assert) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/): Power Assert 是使用 Swift 中宏功能创建的一个断言库,Swift 宏是一项实验性功能,因此需要预发布的 Swift 工具链。在编写测试时,我们需要使用不同的判断函数,Assertion API 有很多,不用死记硬背,只需要建立一个返回布尔值的表达式,Power Assert 就会自动显示丰厚的错误信息。 + +### [Canopy](https://github.com/Tact/Canopy) + +[@JonyFang](https://github.com/jonyfang): CloudKit 三方库推荐 Canopy,该库隔离了 CloudKit 相关的一系列外部依赖,使得代码更易于测试。 + +## 书 + +### [The Book of Modern C++](https://github.com/lkimuk/the-book-of-modern-cpp) + +[@kemchenj](https://kemchenj.github.io/):这是国内 C++ 开发者整理出版的一本书,内容搜集自网络上优秀作者编写的文章,本书包含了十大主题: + +- Basics +- Modern C++ +- C++23 +- Metaprogramming +- Concurrency +- Performance +- Algorithms +- Techniques +- Tricks +- Miscellaneous + +> 序:既致之以广大,又尽之以精微,合之以主题,以成本书内容之深广也。而每章独立,各有所论, 故本书针对高级开发者。饶是如此,新手亦可依此进阶,小大靡遗,纤悉洞了,查漏补缺,得窥其理。 + +## 音视频 + +### [App Marketing by App Masters](https://podcasters.spotify.com/pod/show/app-marketing-podcast) + +[@享耳先森](https://github.com/iblacksun):这个系列播客专注 App Store 发行与优化,如果你是独立开发者,或有做独立开发者的想法,建议关注或收藏,找到自己感兴趣部分收听。 + +## 摸鱼周报 + +[@摸鱼周报 #94](https://mp.weixin.qq.com/s/f2Z1VRpk4Ehh3KxuY_NrvA):第 94 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 展示无障碍软件辅助新功能 +* 本周学习:从 Glarity 学习前端开发流程 +* 内容推荐:推荐近期的一些优秀博文,涵盖:#file 的行为变更、如何使用 @_exported 属性、In-App Purchase 实践总结等方面的内容 +* 摸一下鱼:跟自己和解、接受自己、做自己的人很酷 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#246-2023.05.29.md b/Reports/2023/#246-2023.05.29.md new file mode 100644 index 000000000..e70fb98c5 --- /dev/null +++ b/Reports/2023/#246-2023.05.29.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #246 | 2023-05-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [来 WWDC23 之夜深圳场,看直播!领 Apple 周边!](https://www.huodongxing.com/go/wwdc23sz) + +今年的 WWDC 有线下观影活动哟!6 月 5 日晚,由 T 沙龙主办的「WWDC 之夜(深圳场)」将在货拉拉深圳研发中心举行,在深圳(或附近)的朋友可以线下参加一起熬夜!点击周报下方外链可以直接报名。活动现场还邀请到了两位货拉拉的嘉宾进行精彩分享,分别是: + +- 涂育旺:内存问题步步查 +- 刘占峰:Swift 并发探索之旅 + +## 新手推荐 + +### 🐕 [Handling WebP Images When Using PHPickerViewController](https://swiftsenpai.com/development/webp-phpickerviewcontroller/) + +[@极速男孩](https://github.com/ztlyyznf001):在 iOS14 中苹果推出了 PHPickerViewController 来取代 UIImagePickerController,本身 PHPickerViewController 是不支持 WebP 格式的图片的。这篇文章介绍了如何通过给 NSItemProvider 添加扩展的方式来给 PHPickerViewController 增加 WebP 格式图片的支持。 + +## 文章 + +### 🐎 [SwiftUI under the Hood: Variadic Views](https://movingparts.io/variadic-views-in-swiftui) + +[@Smallfly](https://github.com/iostalks):这篇文章主要讲了在 SwiftUI 中的可变参数视图(Variadic Views)。它介绍了如何使用 `TupleView` 来构建多个视图,并展示了它在视图修饰符方面的透明性。文章还讨论了 SwiftUI 中的一些底层机制,如 `_VariadicView` 和 `_VariadicView.Tree`,以及它们与 `VStack` 和其它视图类型的关系。最后,文章演示了如何编写自定义的容器视图,类似于 `List` 和 `VStack`,以在视图之间插入分隔线。 + +### 🐕 [云音乐中 In-App Purchase 实践总结篇 - 掘金](https://juejin.cn/post/7233948883045941303) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要讨论了如何使用 StoreKit 库进行应用内购买 (IAP) 的开发,并提出了处理 IAP 中挑战和问题的方案。 + +- IAP 主要流程介绍以及目前存在的问题。 +- NEStoreKit 整体结构和票据结果的可靠性。 +- StoreKit2 介绍与展望。 + +### 🐕 [This Window Is Leaking](https://byla.lt/posts/this-window-is-leaking/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要关注了 macOS SwiftUI 应用开发过程中,在 `NSWindow` 上设置自定义 `NSWindowDelegate` 可能会引入内存泄漏,并且说明了作者如何发现问题到尝试解决问题的思路,作者建议在在设置自定义 Delegate 之前保存原有的 Delegate,并在窗口关闭之前恢复它。另外值得一提的是这个解决方案对于未来版本是否适配是未知的,因此引入这个方案需要较为谨慎。 + +### 🐎 [构建稳定的预览视图 —— SwiftUI 预览的工作原理](https://juejin.cn/post/7236009910147596343) + +[@J_Knight_](https://github.com/knightsj):文章由一个引发 SwiftUI 预览崩溃的代码为切入点,深入分析和介绍了 SwiftUI 的预览机制(比如生成预览衍生文件等等);也提示了为了提高开发效率需要注意的几个问题。 + +### 🐎 [饿了么开源自研多端框架 MorJS](https://mp.weixin.qq.com/s/XE6l7pMuj_0Vt9BWQG1XrQ) + +[@老峰](https://github.com/eleme/morjs):Mor 是饿了么开发的一款基于小程序 DSL 的可扩展多端研发框架,允许开发者编写一套小程序代码并通过转端编译在多个平台(如微信、支付宝、百度等)运行,从而提高开发效率并确保兼容性和一致性。特点包括: +- 多端编译:提供一码多端转换能力 +- 集成研发:提供复杂小程序解耦开发能力 +- 形态互转:提供小程序多形态转换能力 +- H5 同构:提供小程序 DSL 转 H5 能力 + +除此上述核心能力外,MorJS 还实现了对于多端或不同环境构建产出不同代码的能力,产物压缩,程序本地 JSAPI mock 能力。 + +### 🐎 [Using Layout protocol to align explicitly positioned views in SwiftUI](https://nilcoalescing.com/blog/AnchoredPositionInSwiftUI/) + +[@JonyFang](https://github.com/jonyfang): 介绍了在 SwiftUI 中定位视图的不同方法。`position()` 修饰符允许我们通过设置中心点坐标将视图放在其父容器内。然而,在某些情况下,我们不希望视图遮挡住其他标签,因此需要将视图和锚点右对齐或左对齐。 + +在 iOS15 及之前的版本中,通常的解决办法是使用 `GeometryReader` 来测量视图的大小并调整偏移量。然而,这种方法存在一些问题,如动画的不一致性等。 + +iOS 16 引入了新的 Layout 协议,它允许我们显式地放置视图,并在调用 `place()` 方法时指定一个锚点。Layout 协议有多种使用方式,但在只有一个标注的情况下,更简单的选项是每个标注都有自己的布局。 + +实例代码放在了 Github:[NilCoalescing/SwiftUI-Code-Examples +Public](https://github.com/NilCoalescing/SwiftUI-Code-Examples/blob/main/AnchoredPosition-Layout/AnchoredPosition.swift) + +### 🐕 [在 iOS 中使用 IdentifyLookup 进行短信过滤](https://juejin.cn/post/7237697495109845052#heading-5) + +[@AidenRao](https://weibo.com/AidenRao):垃圾短信是一个长期存在、令人困扰的问题,Apple 在 WWDC 2017(iOS 11) 推出了 IdentityLookup 框架,让开发者可以参与到过滤短信的过程中。本文将介绍如何阻止这些短信、设备端的检测以及服务器检测等。 + +## 代码 + +### 🐕 [Sparkle - Mac 应用更新框架](https://github.com/sparkle-project/Sparkle) + +[@水水](https://www.xuyanlan.com/):如果你的应用上了 App Store ,其中最大便利之一就是更新处理,苹果可以通过 App Store 进行应用程序的传播和更新。但是如果你在外部分发应用程序,你需要一种替代方法来进行更新通知和执行更新等操作,Sparkle 就是一个帮你的 Mac 应用进行外部更新的框架,Sparkle 框架功能非常全面。如果你也有这方面的需要,具体可以参考 [Sparkle 的实现和接入](https://troz.net/post/2023/sparkle/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B606) 一文。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#247-2023.06.05.md b/Reports/2023/#247-2023.06.05.md new file mode 100644 index 000000000..35be2a2e1 --- /dev/null +++ b/Reports/2023/#247-2023.06.05.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #247 | 2023-06-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/247.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Upcoming changes to the App Store receipt signing intermediate certificate](https://developer.apple.com/news/?id=smofnyhj) + +对于 **本地** 校验支付凭证的 APP 来说,需要适配 SHA-256 校验,对于不支持 SHA-256 的 APP 将在 2023.08.14 之后拒绝提交。这项调整对使用 AppTransaction API 与 verifyReceipt(Web Service Endpoint) 等后端校验的 APP 不受影响。 + +同时 2023.06.20 之后,对于新版本的 iOS/iPadOS/macOS 等系统,沙盒环境都将强制切换为 SHA-256 校验。 + +## 文章 + +### 🌟 🐢 [百度 APP iOS 端包体积 50M 优化实践(一)总览](https://mp.weixin.qq.com/s/ANbFzg7X932o-iDpa8FcxQ) + +[@xuyafei86](https://github.com/xiaofei86):本文介绍了百度 APP 包大小优化的完整实践,包括百度 APP 的技术方案和各项优化的详细收益。此系列文章目前包括总览、图片优化和资源优化 3 章,详细讲述了各项优化的技术细节,感兴趣的同学可以持续关注。 + +* [百度 APP iOS 端包体积 50M 优化实践(二)图片优化](https://mp.weixin.qq.com/s/RR7sjhkuTFgUp7S5E8ECMw) +* [百度 APP iOS 端包体积 50M 优化实践(三)资源优化](https://mp.weixin.qq.com/s/FQWCX0wkK6ifHQ8RhmmPsg) + +### 🌟 🐕 [How the Raycast API and extensions work](https://www.raycast.com/blog/how-raycast-api-extensions-work) + +[@kemchenj](https://kemchenj.github.io/):Raycast 是 macOS 上新兴的一款快捷启动器软件,开发者友好的插件系统是他们的亮点之一,最近他们也在博客上分享了这个系统的开发经历,亮点很多: + +- 基于 Node.js 和 React 搭建了插件的接口,React 渲染出 Dom Tree 之后通过 XPC 传输回 Raycast 主 App 进行渲染,后续的 Dom Tree 通过 JSON Patch 协议进行增量更新 +- UI 控件全部都是原生控件渲染的,React 侧只能使用了 Raycast 提供的一套 Component,性能高内存占用少 +- 跟 Electron 套壳应用不同,没有将 Node.js 引擎打包进 App 里,而是在 App 启动后下载并且管理起来,每次更新都不需要重复下载 Node.js 的引擎 +- 插件商店 + +个人感觉这套系统设计得简洁优雅,对于 VSCode 进行了很多借鉴,并且在此基础上也有自己的创新,推荐大家进行阅读和品鉴。 + +### 🐢 [Pushing the limits of NSStatusItem beyond what Apple wants you to do](https://remotion.com/blog/pushing-the-limits-nsstatusitem) + +[@Cooper Chen](https://github.com/cjlcooper):NSStatusItem 是 Mac 开发中设置状态栏的属性,然而苹果的人机界面指南(HIG)在桌面开发中远远不如移动端那般灵活和先进,因此来自 Remotion 的工程师在最小屏幕利用率上决定超越 HIG 的指导,并突破菜单栏额外内容的极限。本篇文章详细讲述了如何使用 SwiftUI 来完成以上需求并且给出了最佳实践,为相关领域开发的同学提供了一个不错的参考。 + +### 🐢 [Apple-Silicon-Guide](https://github.com/mikeroyal/Apple-Silicon-Guide) + +[@Leo](https://github.com/leomobiledeveloper):一篇关于 Apple Silicon 设备的指南。内容非常的丰富,包含了每个芯片的特点和在这些芯片驱动的设备上有哪些好的应用软件、工具,也包含了像 Unity、Metal、CoreML 等在 Apple Silicon 设备上可以进行软件开发的框架学习材料。 + +- 推荐人:[XanderXu](https://github.com/XanderXu) + +### 🐎 [Skip code during debugging in Xcode](https://blog.eidinger.info/skip-code-during-debugging-in-xcode) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了三种在断点调试过程中使用 lldb 命令跳过一些执行代码的方式: + - th j -b (thread jump --by):跳过断点位置后的相对代码行数; + - th j -l (thread jump --line):跳至指定代码行数; + - 使用 expression 修改代码中条件判断的变量值,来跳过相应判断语句的执行。 + +利用好断点调试可以大大提高开发效率,有兴趣的读者可以移步 WWDC2018 session [Advanced Debugging with Xcode and LLDB](https://developer.apple.com/videos/play/wwdc2018/412/),这个 session 中演示了更多的断点调试技巧。 + +### 🐕 [Text Filters in Kaleidoscope 4](https://blog.kaleidoscope.app/2023/05/31/text-filters-in-kaleidoscope-4/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Kaleidoscope 4 中的文本过滤器是一项主要的新功能,它可以帮助您更轻松地比较和分析文本数据。以下是这篇文章中描述的主要内容: +- 文本过滤器的用途:文章介绍了使用文本过滤器的原因。文本过滤器可以帮助去除比较中的视觉噪音,使您更专注于重要的差异。 +- 使用内置过滤器:Kaleidoscope 4.0 提供了 7 个预定义过滤器,可以直接在现实世界中使用。通过单击工具栏中的文件处理工具栏项,您可以选择要应用的过滤器。文章中演示了如何使用内置的过滤器来过滤时间戳、对象地址、进程和线程 ID,以及 UUID。 +- 组合过滤器:您可以组合多个过滤器以获得所需的结果。文章中展示了如何同时选择多个过滤器,并清除选择以取消过滤。 +- 创建自定义过滤器:Kaleidoscope 4.0 还允许您创建自定义过滤器。通过打开文本过滤器窗口,您可以添加新的过滤器。文章详细说明了如何创建自定义过滤器,包括命名过滤器、定义搜索模式和替换规则。 +- 使用正则表达式:创建过滤器时,您可以使用正则表达式来定义搜索模式。文章提供了一个例子,并解释了如何使用内置提示和实时过滤样本数据来编写和测试正则表达式。 + +总结:Kaleidoscope 4 的文本过滤器功能使您能够更轻松地处理和比较文本数据。您可以使用内置过滤器或创建自定义过滤器,并使用正则表达式定义搜索模式。这个功能在处理生成的文本数据时非常有用,可以帮助去除与重要差异无关的内容。 + +### 🐕 [Using Upcoming Feature Flags](https://www.swift.org/blog/using-upcoming-feature-flags) + +[@AidenRao](https://weibo.com/AidenRao):从 Swift 5.8 开始,你可以使用新的编译器标志和编译条件,灵活应用下一个大版本的 Swift 功能。这样能按照自己的节奏,逐个特性、逐个目标地应用版本更改,提前做好代码迁移。 + +### 🐕 [使用 SwiftUI 开发 RSS 阅读器](https://mp.weixin.qq.com/s/8DFqljikD7FKvHTdZj2weA) + +[@享耳先森](https://github.com/iblacksun):本文是戴铭在苹果加速器活动的一次分享,介绍了如何使用 SwiftUI + CoreData 实现一个 RSS 阅读器,新手友好。 + + +## 代码 + +### [RegexHub](https://github.com/lukehaas/RegexHub) + +[@Smallfly](https://github.com/iostalks):细数那些程序员写起来很痛用起来很爽的工具,那正则表达式一定能排上号。[RegexHub](https://projects.lukehaas.me/regexhub/?) 汇集了程序员高频使用的正则表达式,并且作者把源代码开源在 [GitHub](https://github.com/lukehaas/RegexHub),接受 PR,欢迎你的添砖加瓦。 + +## 摸鱼周报 + +[@摸鱼周报 #95](https://mp.weixin.qq.com/s/hi8Dy2H_iBFWeO0V_tQ5xw):第 95 期摸鱼周报来了,一起来看下本期概要: +* 本期话题:WWDC23 定档;Xcode 14.3.1 RC 版本已修复打包导致的崩溃问题 +* 本周学习:Python 导入时运行时、跨文件引用、导入 C 语言库时的几个开发知识点 +* 内容推荐:关于在 App Store 推广应用的技巧、SwiftUI 预览的工作原理、离屏渲染等方面的内容 +* 摸一下鱼:WWDC23 内参招募;微软 Build 大会一些让人惊艳的 AI 产品;让 AI 玩 Minecraft;一个易使用的 AI 程序创建平台;Apple Design Awards 决赛名单公布 +* iOS 招聘:抖音外卖方向 - 北京 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#248-2023.06.12.md b/Reports/2023/#248-2023.06.12.md new file mode 100644 index 000000000..8ff492860 --- /dev/null +++ b/Reports/2023/#248-2023.06.12.md @@ -0,0 +1,130 @@ +# 老司机 iOS 周报 #248 | 2023-06-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/248.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [U4 5.0 内核正式发布](https://mp.weixin.qq.com/s/Yv5GO2FjXg6CPMf3tRsjDQ) + +[@莲叔](https://github.com/aaaron7): UC 是国内为数不多的在深度定制 Chromium 内核上持续投入的团队,近期发布了 U4 5.0 版本,在性能、稳定性和功能覆盖度层面相比 Chromium 100 版本都有大幅的提升。同时,文章从渲染架构、JS 引擎、通用能力和基础体验几个方面分享了新版本所做的具体工作。推荐对于浏览器内核优化有兴趣的同学阅读。 + +### 🐕 [There are so many cool new features in Swift and Xcode](https://www.swiftwithvincent.com/newsletter/there-are-so-many-cool-new-features-in-swift-and-xcode) + +[@AidenRao](https://weibo.com/AidenRao):文章作者第一时间安装了 Xcode 15,并分享他发现的比较酷的新功能: +- 当使用条件编译时,与当前环境不匹配的代码将被 Xcode 自动变灰。 +- 可以给代码添加书签 +- #Preview 现在也支持 UIKit 和 AppKit +- 对 Swift 宏的支持 + +## 文章 + +### 🌟 🐕 [通过 SIL 看 Swift 的方法派发](https://mp.weixin.qq.com/s/m8C_ShtAtLcgjQv9GRVObQ) + +[@JonyFang](https://github.com/JonyFang):在 Swift 语言和 LLVM IR 之间,swiftc 里加入了 SIL。通过 SIL,能够对 Swift 进一步的优化。SIL 相比汇编,更容易读懂。我们将其作为工具,了解和学习 Swift 语言的方法派发机制。也借助于 SIL 解释编码过程中遇到的问题。本文的内容主要介绍了 SIL 中关于方法调用的一部分: + +1. SIL 介绍 +2. 生成 SIL + - 声明和定义 + - 代码块 + - 函数表 +3. Swift 方法派发 + - 直接派发 + - 函数表派发 + - 消息派发 +4. 几个场景问题的解决 + - 场景一:Protocol Extension + - 场景二:父类未实现协议方法 + - 场景三:OC 混编 + +### 🐕 🌟 [移动端 APP 组件化架构实践](https://juejin.cn/post/7240333779222167608) + +[@Cooper Chen](https://github.com/cjlcooper):本文是京东的开发同学对于组件化在中大型 App 工程中实践的经验和思考,同时针对组件化过程中的一些问题进行了探讨,本文通过以下问题来介绍组件化这种开发架构的思想和常见的一些问题: +- 为什么需要组件化 +- 组件化过程中会遇到的挑战和选择 +- 如何维护一个高质量的组件化项目 + +可以为组件化工程架构需求的团队提供不错的经验分享。 + + +### 🐕 [iOS 17: Notable UIKit Additions | Swiftjective-C](https://www.swiftjectivec.com/ios-17-notable-uikit-additions/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讨论了 UIKit 在 iOS 17 中的新增功能和变化。主要介绍了以下新特性: + +- Unavailable Content 用于实现空数据视图。 +- Preview Syntax 让 Swift 新宏支持 UIKit 的 Xcode 预览。 +- Automatic Label Vibrancy 提供了标签自动支持动态效果。 +- Symbol Animations 让 SF Symbols 在按钮和图像中实现动画,增加了多种字体样式,以及用于增强自动填充功能的新文本内容类型。 + +### 🐕 [移动端浏览器性能优化探索](https://mp.weixin.qq.com/s/SKO3vZXTTYE2pRCFaT5H3A) + +[@莲叔](https://github.com/aaaron7): 现在移动端越来越多的业务会采用 App 内嵌 webview,然后由前端通过 H5 技术来承载。显然,受限于移动端设备的性能,在移动端上写 H5 的代码和传统面向 PC 的 H5 是有区别的,这篇文章就是主要介绍了在移动端写 H5 代码时需要关注的性能问题。文章首先从渲染的原理上分析了 H5 页面卡顿的原因,然后提出了衡量卡顿的指标,再结合浏览器的运行原理分析了潜在的优化方向,推荐和 H5 打交道比较多的客户端同学和前端同学阅读。 + +### 🐎 [自動將 asset 的圖片和顏色變成 ImageResource 和 ColorResource 的型別屬性 — Xcode 15 新功能](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E8%87%AA%E5%8B%95%E5%B0%87-asset-%E7%9A%84%E5%9C%96%E7%89%87%E5%92%8C%E9%A1%8F%E8%89%B2%E8%AE%8A%E6%88%90-imageresource-%E5%92%8C-colorresource-%E7%9A%84%E5%9E%8B%E5%88%A5%E5%B1%AC%E6%80%A7-xcode-15-%E6%96%B0%E5%8A%9F%E8%83%BD-3e321213a453) + +[@zoeGuo](https://github.com/zoeGuo):Xcode 15 开始可以用更方便的方式生成图片和颜色了。简单讲我们原来使用图片常用的方式为:``` UIImage(named: "peter") ``` ,Xcode 15 中我们可以直接这样使用:``` UIImage(resource: .peter) ```。在 Build Settings 中将 Generate Swift Asset Symbol Extensions 设置为 YES 后,Xcode 会自动将 Asset 的图片和颜色变成 ImageResource 和 ColorResource 的属性。这一新能力同时支持 SwiftUI 和 UIKit,并且支持旧的 iOS 系统版本!作者还介绍了生成的属性的一些命名规则:是以小写字母开头的驼峰命名;如果我们自己定义的名字中出现 color/image 产生的属性名中会移除 color/image;不要以数字开头否则生成的属性会被添加上下划线。(原文参考链接 : [Xcode 15 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes)) + +### 🐕 [使用 #Preview macro 定义预览画面](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E4%BD%BF%E7%94%A8-preview-macro-%E5%AE%9A%E7%BE%A9%E9%A0%90%E8%A6%BD%E7%95%AB%E9%9D%A2-ios-17-%E6%96%B0%E5%8A%9F%E8%83%BD-bc850b2c11fc) + +[@水水](https://www.xuyanlan.com/):从 Xcode15 开始,帮画面加上 preview 变得更方便了,它有以下三大改进: +- preview 的程序变得更精简了,使用 #Preview { } 即可定义 preview,旧版就比较冗长 +- SwiftUI 的 view 和 UIKit 的 view 和 view controller 都能快速加上 preview +- 方便预览 widget 不同时间点的样子 + +本文详细列出了上诉三点的具体使用方法和示例,感兴趣的朋友可以阅读或实践下哦 ~ + +### 🐕 [Demystifying SwiftUI Animation: A Comprehensive Guide](https://betterprogramming.pub/swiftui-animation-mechanism-a1adf2b9b417) + +[@Damien](https://github.com/ZengyiMa): SwiftUI 使用声明式语法来描述不同状态下的 UI 呈现,包括动画,本文全面介绍了 SwiftUI 的动画机制,并提供了大量的演示代码。概括而言,对于 SwiftUI 动画有如下几个总结: + +* 动画是从一种状态到另一种状态的平滑过渡。 +* 声明动画需要三个元素:时序曲线算法函数,将状态(特定依赖项)与时序曲线函数相关联的声明,依赖于状态(特定依赖性)的可动画组件 +* 掌握状态变化的结果。 +* 计时函数与其依赖的关系越精确,产生异常动画的可能性就越小。 +* 独特且稳定的视图标识符(结构的或显式的)有助于避免动画异常。 + +### 🐕 [Use Swift Macros to Initialize a Structure](https://betterprogramming.pub/use-swift-macros-to-initialize-a-structure-516728c5fb49) + +[@Smallfly](https://github.com/iostalks):本文主要介绍了如何在 Swift 5.9 和 Xcode 中使用 Swift 宏来自动生成 Swift 结构体的初始化代码。展示了如何在 Xcode 中创建、命名、实现和调试 Swift 宏,这对于实际应用非常有帮助。 + +需要注意的是,尽管这个功能很强大,但应适度使用,过度使用宏可能使代码变得难以理解和维护。总的来说,Swift 宏对 Swift 开发者来说是一个实用且强大的工具。 + +更多 Swift 宏内容可参考 [WWDC 23 Write Swift macros](https://developer.apple.com/videos/play/wwdc2023/10166/)。 + +## 摸鱼周报 + +[@摸鱼周报 #96](https://mp.weixin.qq.com/s/BM3SucfO9yhQChIPbnuwrA):第 96 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Vision Pro 已经打开空间计算的大门 +* 内容推荐:WWDC 相关的新设备、新框架、新功能有关的博客文章 +* 摸一下鱼:可以总结 WWDC 视频的 AI 插件 SummarAI;从 Session 标题看 WWDC22 到 WWDC23 的变化;Learn about visionOS;少数派的《100 小时后 请加我苹果开发者》课程 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#249-2023.06.19.md b/Reports/2023/#249-2023.06.19.md new file mode 100644 index 000000000..d66e114e9 --- /dev/null +++ b/Reports/2023/#249-2023.06.19.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #249 | 2023-06-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/249.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [WWDC23 讲座集锦 2023 年 6 月 29 日](https://developer.apple.com/events/view/962Y67Q743/dashboard) + +报名参加 WWDC23 讲座集锦,了解 Apple 平台的最新技术。 + +通过本次活动你可以了解 visionOS 在空间计算领域令人难以置信的新机遇,iOS、iPadOS、macOS 和 watchOS 中的最新功能,以及跨语言、框架、工具和服务的重大改进,从而为全球用户打造更为卓越独特的 App 体验。 + +本次活动包含线下场,欢迎大家来现场参加 ~~ 虽然没有 Vision Pro 体验 ~~。 + +## 文章 + +### 🐢 [What’ s new in Swift 5.9?](https://www.hackingwithswift.com/articles/258/whats-new-in-swift-5-9) + +[@anotheren](https://github.com/anotheren):一年两度的 Swift 大版本更新再次到来,让我们看看 Swift 5.9 有什么**全新**变化: + +- `if` 和 `switch` 表达式:[SE-0380](https://github.com/apple/swift-evolution/blob/main/proposals/0380-if-switch-expressions.md) 增加了我们在多种情况下使用 `if` 和 `switch` 作为表达式的能力。 +- 值和类型参数的配对:[SE-0393](https://github.com/apple/swift-evolution/blob/main/proposals/0393-parameter-packs.md)、[SE-0398](https://github.com/apple/swift-evolution/blob/main/proposals/0398-variadic-types.md) 和 [SE-0399](https://github.com/apple/swift-evolution/blob/main/proposals/0399-tuple-of-value-pack-expansion.md) 结合起来,形成了一系列 Swift 改进,使我们能够使用可变泛型。 +- 宏:[SE-0382](https://github.com/apple/swift-evolution/blob/main/proposals/0382-expression-macros.md)、[SE-0389](https://github.com/apple/swift-evolution/blob/main/proposals/0389-attached-macros.md) 和 [SE-0397](https://github.com/apple/swift-evolution/blob/main/proposals/0397-freestanding-declaration-macros.md) 结合起来将宏添加到 Swift 中,这使我们能够创建在编译时转换语法的代码。 +- 不可复制的结构和枚举:[SE-0390](https://github.com/apple/swift-evolution/blob/main/proposals/0390-noncopyable-structs-and-enums.md) 引入了无法复制的结构和枚举的概念,这反过来又允许在许多地方共享结构或枚举的单个实例——它们最终仍然拥有一个所有者,但现在可以在不同的地方访问你的代码。 +- 引入 `consume` 操作来结束变量绑定的生命周期:[SE-0366](https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md) 将使用值的概念扩展到局部变量和可复制类型的常量,这可能会使希望避免在数据传递时在幕后发生过多的保留 / 释放调用的开发人员受益。 +- 方便的 Async[Throwing]Stream.makeStream 方法:[SE-0388](https://github.com/apple/swift-evolution/blob/main/proposals/0388-async-stream-factory.md) 为 `AsyncStream`,`AsyncThrowingStream` 两者添加了一个新方法 `makeStream()`,它将 stream 本身连同其 continuation 一同返回。 +- 更多内容 / 代码请参见原文及对应的 Swift Evolution。 + +### 🐕 [On Endianness - 🪄 Technical Sourcery](https://www.technicalsourcery.net/posts/on-endianness/) + +[@Barney](https://github.com/BarneyZhaoooo):该文章详细探讨了大端序和小端序在计算机中的应用及其各自的优点。大端序和小端序是计算机存储多字节数据类型的两种方式,这两种方式在计算机系统中都有广泛的应用。 + +- 大端序优势:容易检测符号;符合网络协议约定;符合人类阅读数字的自然习惯;能对未知的无符号整数结构排序。 +- 小端序优势:便于检测奇偶性;重新转换指针更简单;对任意精度的整数和算术运算更有优势;在处理任意长度编码和变长编码时更为高效。 + +### 🐕 [云音乐低代码 + ChatGPT 实践方案与思考](https://mp.weixin.qq.com/s/jaIiVI636uJBOOKsXuHCpw) + +[@老驴](https://weibo.com/u/6090610445):最近生成式 AI 的持续爆火也让很多人开始尝试在真正的产品中去让 AI 落地。网易云音乐的这套在低代码平台中集成生成式 AI 的方案是最近看到过的比较好的落地场景,可以说把自己的平台和 AI 做到了真正有意义的结合,值得参考。 + + +### 🐎 [Swift 的可选值优化](https://mp.weixin.qq.com/s/aloL0oyFUYIukhaqE-YfTA) + +[@Damien](https://github.com/zengyima):本文讨论了 Swift 语言中的 nil 语义及其在内存中的表现,比较了不同数据类型如 Int、Bool、String、Class、Enum 在可选值情况下的内存占用及编译器的优化方法。对 Swift 感兴趣的同学不妨一读。 + +### 🐕 [UIKit rendering - Part 1、2、3](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-1) + +[@JonyFang](https://github.com/JonyFang): 三篇 UIKit 渲染的系列文章,从基础知识到异步绘制和性能优化策略。 + +- [UIKit Rendering - Part 1](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-1): 介绍 UIKit 渲染基础知识; +- [UIKit Rendering - Part 2](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-2): 通过代码实践,探讨 UIKit 渲染过程中的异步绘制机制; +- [UIKit Rendering - Part 3](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-3): 介绍了 UIKit 渲染中的性能优化策略; + +如果对 iOS 应用程序的 UI 渲染感兴趣,这几篇可以查阅下~ + +## 工具 + +### [The unofficial WWDC app for macOS](https://github.com/insidegui/WWDC) + +[@zoeGuo](https://github.com/zoeGuo):这是一款 macOS 上获取 WWDC 资讯的应用,通过 Explore、Schedule、Videos 三个 Tab 可以获取到最新的 WWDC 资讯、日程和视频内容。此外还提供了对 WWDC 视频内容的片段分享、添加笔记、以及 iCloud 同步数据的功能和分享功功能,可以更好的记录自己观看学习 WWDC 的随想和进度。 + +### [SummarAI Chrome Extension](https://github.com/zhangferry/SummarAI) + +[@Crazy](https://github.com/jiyan135960):在 ChatGPT 横行的当下,利用 ChatGPT 来完成论文精炼的网站已经屡见不鲜,这种操作大大降低了大家获取知识的难度。但是对于精炼博客类型的文章,操作起来却还是有些繁琐,SummarAI 这款 Chrome 插件利用 ChatGPT 对网页进行分析并提取重要信息,缩短复杂文章的读取时间。这款插件安装简单,配置方便,可以很轻松的帮助大家完成对冗长且难度较高的博客进行精要分析。 + +## 代码 + +### [HookZzModules](https://github.com/jmpews/HookZzModules/tree/master/AntiDebugBypass) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):HookZzModules 是一个用于在 iOS 应用程序中进行动态函数钩子的开源库。它提供了一种便捷的方式来拦截和修改函数的执行,以实现函数级别的代码注入和调试。通过使用 HookZzModules,你可以在运行时动态地修改应用程序中的函数,包括系统函数和自定义函数,并提供了丰富的钩子选项和回调函数,以满足各种需求。 + + +## 摸鱼周报 + +[@摸鱼周报 #97](https://mp.weixin.qq.com/s/6HRxZXAJcTZKGZiNX2eBYQ):第 97 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:智源大会线下参会体验 +* 内容推荐:WWDC 2023 相关的新产品与新技术 +* 摸一下鱼:OpenAI API 更新;面向国内的 OpenAI API Key 服务 API2D; 《Design for spatial user interfaces》 Session 总结;每个软件开发都应该知道的事;图解 QUIC 连接 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#250-2023.07.03.md b/Reports/2023/#250-2023.07.03.md new file mode 100644 index 000000000..ed03edb0e --- /dev/null +++ b/Reports/2023/#250-2023.07.03.md @@ -0,0 +1,119 @@ +# 老司机 iOS 周报 #250 | 2023-07-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/250.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub 的 Dependency Graph, Dependabot Alerts 和 Advisory Database 现在正式提供 Swift 的支持](https://github.blog/changelog/2023-06-19-dependency-graph-dependabot-alerts-and-advisory-database-now-support-swift-advisories) + +[@kemchenj](https://kemchenj.github.io):之前[在 244 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%23244)里曾经提到过 GitHub 的代码扫描功能计划提供 Swift 的支持,现在这个功能已经正式上线了,感兴趣的朋友可以赶紧去尝试一下。 + +> GitHub 的 Code Scanning 会扫描和索引项目的 Dependency 信息,并且提供: +> +> - **Dependency Graph**。 +> - 这意味着开发者可以在 GitHub 上看到有哪些项目依赖了自己的 Swift 库。 +> - 可以使用 [Dependabot](https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts),在依赖库更新时,自动提交 Pull Request 更新依赖库版本。 +> - **安全漏洞警告**。如果一个代码库出现安全漏洞时,它可以在发布修复版本后使用 GitHub 内建的功能进行记录,此时 GitHub 就会通知所有依赖了这个库的下游项目,并且自动提交 Pull Request 将依赖更新到已修复的版本。 + +需要注意的是,这个功能只支持 SwiftPM,不支持 Cocoapods。 + +## WWDC23 内参 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10013 - Meet StoreKit for SwiftUI](https://xiaozhuanlan.com/topic/0579631284) + +Rickey:内购(IAP)的实现一直是一个复杂棘手的问题。不过最新的 StoreKit 为 SwiftUI 提供了一种非常简洁优雅的实现方式,本文将以实战为基础,由浅入深地进行介绍。 +如果你对 IAP 感兴趣,在做相关的工作,或者是独立开发者,那么都非常推荐你详细了解本文的内容。 + +### 🌟 [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130) + +Layer:通过 SwiftUI 的 ImmersiveSpace,我们能够轻松的在 visionOS 上创造完全沉浸式的体验。在 Space 中,我们可以使用 `RealityView` 、`Model3D` 等展示内容,可以使用 `scenePhase`、`GeometryReader3D`、`ImmersionStyle`等更好的管理 Space,此外,还有一些自定义功能也值得我们探索。 + +### 🌟 [WWDC23 10262 - 重新探索 Safari 开发者功能](https://xiaozhuanlan.com/topic/0356874192) + +Style 月月:本文主要是介绍 Safari 开发者功能及更新点,第一部分是介绍 Web Insepector 常规用法和新功能;第二部分介绍响应式设计模式的使用,并支持模拟器调试;第三部分是 xrOS 与 Mac 的配对杨演示;第四部分演示 WebDriver 实现自动化测试;第五部分介绍 Feature Flags 功能,方便开发者提前了解 Web 的未来发展方向。 + +### 🌟 [WWDC23 10184 - Meet ActivityKit/相遇实时小组件](https://xiaozhuanlan.com/topic/3186527094) + +小杰瑞:本文基于 Session 10184 的内容梳理,主要内容包含 Live Activities 是什么以及简要阐述它的生命周期,并辅以一个直播比分类的实时小组件来说明。并针对部分核心代码和实现方式做了代码说明。 + + +## 文章 + +### 🐕 [AppIntents for Widgets](https://alexanderweiss.dev/blog/2023-06-10-appintents-for-widgets) + +[@享耳先森](https://github.com/iblacksun):`AppIntents` 是 iOS 16 推出的 Swift only framework,用于开发 `App Shortcut` 以简化之前复杂的配置项。从 iOS 17 开始,`AppIntents` 也可用于 Widgets 开发了。 + +### 🐕 [Apple's Linker & Deterministic Builds](https://milen.me/writings/apple-linker-ld64-deterministic-builds-oso-prefix/) +[@AidenRao](https://weibo.com/AidenRao):[通用确定性构建](http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html)使构建更稳定,提升你对构建和测试过程的信心,能降低持续集成成本。本篇文章主要帮助你解决 OSO 绝对路径、 OSO 时间戳产生的值不确定性问题。 + +### 🐕 [Understanding mergeable libraries](https://www.polpiella.dev/understanding-mergeable-libraries/) + +[@Cooper Chen](https://github.com/cjlcooper):Mergeable libraries 作为今年 WWDC 较为重要的一项变革,在 Xcode15 引入了一种全新的库类型。它结合了动态库和静态库的优点,既不会过多的消耗构建时间,也不会影响启动速度,使得开发者在开发过程有能够高效的构建和调试自己的程序。本文针对 WWDC2023 的 session 10268 介绍了 mergeable libraries 的简单原理以及使用、调试等内容,能够为开发者快速上手这一新特性提供帮助。 + +### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/) + +[@Smallfly](https://github.com/iostalks):WWDC NOTES 收集了开发者观看 WWDC 视频后整理的笔记,能够帮助你快速了解视频的内容,目前已经有数十篇 WWDC23 的相关文章。 + +### 🐢 [快手主播稳定性 - Mach Port 超限问题治理](https://mp.weixin.qq.com/s/hzKQZjQEp7Gpv6Uhl1xVSA) + +[@EyreFree](https://github.com/EyreFree):这篇文章分享的是快手客户端团队处理应用程序稳定性问题的经验,主要关注的是 Mach Port 超限问题,这是一个导致应用程序在 iOS 系统上出现异常退出的常见问题。本文首先介绍了 Mach 及 Mach Port 的基础知识,然后分析了 Mach Port 超限问题的两个主要原因:系统限制和 Port 泄漏。接下来讲述了如何通过获取 Port 信息、线上监控、线下监控、线下 Debug、阅读源码等手段逐步定位和解决问题的过程。 + +### 🐢 [How to Avoid Repeating SwiftUI View Updates](https://mobileappcircular.com/how-to-avoid-repeating-swiftui-view-updates-dcf0a65d3758) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何优化 SwiftUI 视图更新以提高应用性能。文章讨论了视图状态的构成,解释了驱动视图更新的"真理之源",包括使用属性包装器(如 @State 和 @StateObject )声明的变量、视图类型的构造参数和事件源等。深入讲解了符合 DynamicProperty 协议的属性包装器的工作原理,比如 @StateObject 和 @ObservedObject ,并指出理解这个协议对优化重复计算至关重要。文章还强调了避免不必要的声明,因为这会导致视图的不必要刷新。 + +### 🐢 [CADisplayLink 前世今生](https://mp.weixin.qq.com/s/I1fDj1GBHEr4x4Jg2u_GXA) + +[@老峰](https://github.com/gesantung):CADisplayLink 是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。本文介绍了 CADisplayLink 概念,常用属性 & 接口;CADisplayLink 与 NSTimer 使用区别以及 iOS 15 系统下底层驱动方式的变化。 + + +### 🐕 [Xcode Bookmarks: Save code landmarks & organize tasks](https://www.avanderlee.com/xcode/bookmarks-navigator/) + +@[水水](https://www.xuyanlan.com/):Xcode Bookmarks 是在 WWDC2023 中 Xcode 15 版本的一个重要的引入。 它是一项新功能,允许您保存要重新访问的代码的快速链接,这样做可以保存代码里程碑并组织必须完成的任务。本文详细介绍了 Xcode Bookmarks 的使用方法和效果示例,感兴趣的读者可以尝试。 + +### 🐢 [重要升级!btrace 2.0 技术原理大揭秘](https://mp.weixin.qq.com/s/WZ5JxCFv_FSOLqR-sRremA) + +[@Crazy](https://github.com/jiyan135960):应用开发中永远避不开的一个问题就是性能优化,而在想要进行性能优化,就一定要做好应用的数据采集与监控,字节团队开发的 btrace 2.0 很好的解决了 Android 端所需的数据采集与监控问题。btrace 2.0 相较于上一版本简化了用户操作,优化了内存,并增加了 synchronized 锁信息的记录。btrace 主要的工作流程依然是编译时插桩,运行时采集信息并通过 mmap 记录,最后配合桌面脚本将 apptrace 与 atrace 数据进行编码,并将它们与 ftrace 进行合并。btrace 2.0 的使用相对上一个版本简化了非常多,现在只需要 java 与 adb 环境就可以进行开发。并且当前版本还支持了精准插桩,大大减少了插桩量。该版本除了以前的基础监控外还增加了四种新的监控类型:渲染监控、Binder 监控、阻塞监控与线程创建监控。最后最重要的是源码已经开源,可以在字节的 GitHub 下找到。 + +## 代码 + +### [Swift-Macros](https://github.com/krzysztofzablocki/Swift-Macros) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Swift 宏带来了新一波的可能性 , 这个项目整理了社区创建的和宏相关的学习资源。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 摸鱼周报 + +[@摸鱼周报 #98](https://mp.weixin.qq.com/s/PNEYW71BfkQ2Y3n7uRdxsQ):第 98 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:visionOS 模拟器体验;Safari Technology Preview 173 发布 +* 本周学习:React Hooks 相关的几个概念介绍 +* 内容推荐:mergeable libraries、Swift on Server、Observation 框架、通过 ReviewKit 获得更多好评、Apple AR 技术全景等博客推荐。 +* 摸一下鱼:Diffusion Bee 2 发布,支持视频制作,致力于打造 Mac 端最优秀的 StableDiffusion 开源工具;GPT Engineer 项目来让 AI 来充当软件工程师;「三五环」一期关于投资、创业的播客分享 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#251-2023.07.10.md b/Reports/2023/#251-2023.07.10.md new file mode 100644 index 000000000..807d2d2db --- /dev/null +++ b/Reports/2023/#251-2023.07.10.md @@ -0,0 +1,144 @@ +# 老司机 iOS 周报 #251 | 2023-07-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/251.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift Package Index Supporting visionOS](https://blog.swiftpackageindex.com/posts/supporting-visionos/) + +Swift Package Index 宣布添加 visionOS 的支持,所有在这上面发布的库都会运行兼容性测试,并且在网站上展示: + +![visionos-build-results~light](https://github.com/SwiftOldDriver/iOS-Weekly/assets/11192474/c40e94dc-6060-47e2-88cd-65f9d4379754) + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 8 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐四篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10123 - 把你的游戏移植到 Mac 上(一)](https://xiaozhuanlan.com/topic/7036984215) + +JPlay:苹果今年在游戏上下了大力气,不仅提供了 Game Porting Toolkit 和 Metal Shader Converter 这样的重量级工具,让开发者更有动力来移植游戏,更是花了三篇篇幅来帮助开发者移植游戏。这背后体现了苹果怎样的布局呢?本文试图一一为您分析。 + +### 🌟 [WWDC23 10137 - Cinematic API 助你成为电影大师](https://xiaozhuanlan.com/topic/0691783452) + +bq:通过本文你将详细介绍电影效果模式以及最新的 Cinematic API,让电影效果模式的播放和编辑能力也能集成在你的 App 中。本文可配合官方 [Demo](https://developer.apple.com/documentation/cinematic/playing_and_editing_cinematic_mode_video) 一起阅读。 + +### 🌟 [WWDC23 10170 - Swift 结构化并发进阶](https://xiaozhuanlan.com/topic/3249081765) + +MiG:本文将基于 Swift 并发的取消和优先级传递,TaskLocal 绑定值,全链路并发性能调优等方面讨论结构化并发任务的各种优势。 + +### 🌟 [WWDC23 10149 - Discover Observation in SwiftUI](https://xiaozhuanlan.com/topic/5023861974) + +万圣(Khala-wan):Observation 是基于 Swift 5.9 宏系统推出的全新特性,它可以帮助开发者简化数据模型并提高应用程序性能,让 SwiftUI 的数据驱动 UI 体验更加出色。本文将介绍 Observation 的基础知识和实现原理,并通过一些案例来感受 Observation 的实际应用体验,以及了解如何将现有的 `ObservableObject` 迁移到 `@Observable`。 + + +## 文章 + +### 🐕 [SwiftUI Data Flow 2023](https://troz.net/post/2023/swiftui-data-flow-2023/) + +[@AidenRao](https://weibo.com/AidenRao):WWDC 2023 引入 Swift 宏,这使得 SwiftUI 团队能够减少数据驱动的属性封装器的数量,并删除大量模板代码。在本文中,作者将之前的 SwiftUI 数据驱动示例代码,使用宏进行重写,读者可以通过阅读新的示例,来了解 SwiftUI 管理数据流的变化。 + +### 🐎 [用 ChatGPT 搭建代码知识库,提升开发效率](https://mp.weixin.qq.com/s/MpF9xBHYjgnCHNkFn1AsOA) + +[@EyreFree](https://github.com/EyreFree):本文介绍了通过搭建搭建代码知识库,从而借助 ChatGPT 的自然语言生成能力快速检索代码信息,使程序员们能更加专注于业务逻辑的实现和优化的方法。从知识库搭建的需求分析,到方案选型对比,实施以及进一步迭代优化,向大家展示了整个项目开发过程,并进行了效果展示,正确率和可用率都满足了需求,同时从数据质量、测试评估方式、多维度和长篇幅知识整合、模型效果维护、数据安全等几个角度进行了一些思考。 + +### 🐕 [企业微信大规模组织架构性能优化实践](https://mp.weixin.qq.com/s/eK47AzCSSf8-W3wZdjrXXQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文讲述了企业微信面临大规模组织架构性能问题的解决方法: + +- 问题:大规模组织架构处理耗时长,更新节点信息性能瓶颈。 +- 方案: + * 预加载优化:实行“本单位 + 骨架”的预加载,减少初始化加载时间。 + * 架构优化:引入大架构模块,用户只加载相关单位数据。 + * 双 DB 切换:采用新的数据库切换方式,提升响应速度。 +- 结果:耗时、CPU 和内存占用减少,用户体验显著提升。 + +### 🐕 [Monorepo 解决方案 — Bazel 在头条 iOS 的实践](https://mp.weixin.qq.com/s/ajkOP7yeSYCcE0MoUUmUZA) + +[@xuyafei86](https://github.com/xiaofei86):2015 年 Google 发布了其构建系统 Bazel,如今在其支持下 Google 的主仓库早已超过千亿行代码。不管是 Bazel 和 Buck,Google,Facebook,Twitter, Airbnb,Uber,Snapchat 等外企早已全面拥抱 monorepo,而国内客户端的工程实践则更多倾向于多仓库模式。 + +Bilibili 早在 2018 就已落地 Bazel,近期也分享了其 [最新实践](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g)。本周,头条也继续分享其 monorepo 实践。其在完成组件化后,迁移过程先后经历了业务组件源码化,podspec 到 BUILD 文件转换等过程,感兴趣的同学可以阅读原文了解其实现细节。 + +需要注意的是,国外对 monorepo 的应用可能来自于其对构建系统使用的延续性,以及 IDE 在线化的趋势。无端地引入复杂的工程架构,只会将糟糕的代码变成糟糕的基础设施。在学习前一定要参考其背景和动机,结合自己的业务现状,避免走向过度工程化的深渊。 + +### 🐕 [An In-depth Look at C++ Keyword: static](https://mp.weixin.qq.com/s/GEBi8sEjRLWeUlYu4kgDAA) + +[@老驴](https://weibo.com/u/6090610445):C++ 中的 static 关键词算是个挺复杂的概念,在不同的语境下有不同的含义。网上也比较难找到全面介绍 static 关键词的中文文章,但是这篇算是个不错的总结文章,基本涵盖了 static 的方方面面,值得一读。 + +### 🐕 [Weak 变量在对象释放时到底发生了什么?](https://juejin.cn/post/7252869090549628986) + +[@老峰](https://github.com/gesantung):作者结合实例通过汇编及源码一步步探究了访问 Weak 变量过程; objc_loadWeakRetained、rootRetain 源码分析;Dealloc 内部调用链路及机制,本文较深入的分析了 Weak 变量内存机制,感兴趣读者推荐阅读。 + +### 🐢 [Embracing CloudKit: Contents](https://dev.shoppingukapp.com/2023/05/01/embracing-cloudkit-for-data-sharing-contents.html) + +[@anotheren](https://github.com/anotheren):一个关于应用 CloudKit 的系列文章,主要包括了如何通过 CloudKit 在 iCloud 账号间进行数据共享以及可能遇到的问题。 + +### 🐎 [iOS 多语言解决方案全面指南](https://juejin.cn/post/7248811984748462141) + +[@J_Knight_](https://github.com/knightsj):文章介绍了一个可以实现多语言支持、语言切换以及翻译后文案处理的组件化库 HDTranslateModule 。这个库除了可以支持多语言配置以外,还支持在运行时切换语言,也支持翻译后的文案处理,以及扩展新的语言配置等等。文章中还介绍了如何搜索整个项目的中文字符串,生成语言配置文件以及如何编写使用谷歌翻译的 API 来批量翻译字符串的方法等等。 + +## 工具 + +### 🐎 [Little big improvements in Xcode 15](https://sarunw.com/posts/little-big-improvements-xcode15/) + +[@zoeGuo](https://github.com/zoeGuo):Xcode 15 有很多不错的改进。文章主要举例介绍了以下几个: + - 快速找到你想要的方法:当你要使用的方法在键入关键字后任有很多选择时,提供了更多的快捷键操作来帮助我们快速找到想要的方法。 + - 上下文感知:在你输入的时候,会结合上下文提供建议,相较 Xcode 14 更智能的改进体现在:不会再建议使用相同的修饰语。 + - 文档预览:代码注释会快速生成我们的代码文档,Xcode 15 在 Assistant panel 中提供了可以直接预览文档的入口,可以在编写代码注释时可即时看到文档效果。 + - 快速指令查找:Xcode 提供了很多快捷键操作,但是找不到或者不记得快捷键就成了另一个问题,Xcode 15 中使用 `command + shift + A` 快捷键,唤起 Quick Action 搜索框,键入关键字就能快速操作了。 + - 书签:这是 Xcode 15 引入的新的概念,借助对代码添加书签,可以快速帮你再定位到对应代码。 + - 代码格式化:Xcode 15 提供了快速将将一行含有多个参数的代码格式化为多行的快捷方式。 + + 以上改进都非常实用,可以浏览原文详细了解具体使用方式。 + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10159 - Beyond scroll views](https://xiaozhuanlan.com/topic/5138027649) + +喵星人:学习如何使用 SwiftUI 的最新 API,将滚动视图提升到一个全新的水平。本文会展示一些前所未有的自定义滚动视图的方法,包括如何处理安全区域和滚动视图边距之间的关系、如何与滚动视图的内容偏移进行交互、如何通过滚动来为内容添加炫酷的效果。 + +### 🌟 [WWDC23 10124 - 把你的游戏移植到 Mac 上(二):编译 Shaders](https://xiaozhuanlan.com/topic/0289537416) + +Andy Jiao:本文将重点介绍如何利用 Metal 编译器和 Metal 着色器转换器将着色器转换到 Mac 平台,并提高着色器的灵活性和速度。包括如何将着色器转换为 Metal IR 以及如何在游戏构建过程中通过 GPU 二进制文件避免设备上的编译。详细介绍了 Metal 着色器转换器的功能和使用步骤。 + +### 🌟 [WWDC23 10244 - 使用 Swift-DocC 构建丰富的文档](https://xiaozhuanlan.com/topic/5976024813) + +叶絮雷:通过 Xcode 15 提供的文档预览界面,我们可以更加方便的在 Xcode 15 中编写并预览文档。同时我们也可以通过 DocC 主题配置和指令功能,为文档添加更多的自定义内容,使文档更加丰富多彩。 + +### 🌟 [WWDC23 10107 - 在 App 中接入照片选择器](https://xiaozhuanlan.com/topic/5964728310) + +nuomi1:在 App 中使用 MVVM 架构接入照片选择器,对比 UIKit 与 SwiftUI 在实现上的异同点。 + +## 摸鱼周报 + +[@摸鱼周报 #99](https://mp.weixin.qq.com/s/0r-ni--4jEN4pnIHVajHqg):第 99 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:macOS Sonoma 体验,三大功能:新屏保、web app、桌面小组件 +* 内容推荐:Swift 宏、Core Data 新特性、SwiftData 介绍、自动生成 RESTful APIs、iOS 应用保护等内容 +* 摸一下鱼:Public Apple Frameworks;微软提供的面相前端初学者的课程;苹果 M2 Ultra:AI 大模型的新希望;AI 生成的艺术二维码 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#252-2023.07.17.md b/Reports/2023/#252-2023.07.17.md new file mode 100644 index 000000000..72ac06fcc --- /dev/null +++ b/Reports/2023/#252-2023.07.17.md @@ -0,0 +1,106 @@ +# 老司机 iOS 周报 #252 | 2023-07-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/252.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 7 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +### 🌟 [WWDC23 10055 - UIKit 中的新功能](https://xiaozhuanlan.com/topic/0651384792) + +Sharker:本文主要介绍了 UIKit 在 iOS 17 中的新功能、核心架构改进和 iPad OS 应用程序的改进,并且提供了多项常规增强功能,例如 Xcode 预览支持、自定义特征、交互式文本操作等。 这些增强功能为应用程序开发人员提供了更好的设计和用户体验,同时还改进了语言支持和性能。 + +### 🌟 [WWDC23 10197 - SF Symbols 5 使用指南](https://xiaozhuanlan.com/topic/6438257091) + +Mim0sa:为了更方便没有 SF Symbols 经验的读者理解,也将往年的 SF Symbols 相关内容归纳整理。本文从 SF Symbols 的特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些优点以及该如何使用。在这次 WWDC 2023 中,除了符号的数量增加到了 5000+ 之外,还有能让符号们 “动” 起来的新功能,让 SF Symbols 这把利器变得又又更加趁手和锋利了。 + +### 🌟 [WWDC23 10028 - 让你的小组件栩栩如生](https://xiaozhuanlan.com/topic/8965310274) + +Raydon:现小组件支持在 Mac 的桌面、iPad 的锁屏、iPhone 的 StandBy 以及 Apple Watch 的 Smart Stack 显示。小组件内容刷新时,添加 SwiftUI 的动画效果让内容变化更加流畅。利用 SwiftUI 和 AppIntents,可以在小组件上使用 Button 和 Toggle 交互组件,让你的小组件栩栩如生。 + +## 文章 + +### 🌟 🐕 [iOS 中的栈内存保护: ____stack_chk_fail 和 ARMv8.3 的指针验证机制](https://juejin.cn/post/7251849146004734008) +[@莲叔](https://github.com/aaaron7):栈溢出攻击是非常常见的攻击手段,攻击者通过覆盖函数的返回值来实现跳转到非预期的代码进行执行。本篇文章介绍了目前比较普遍应用的两种应对栈溢出攻击 ____stack_chk_fail 和指针认证,并且在 iOS 中构建出了针对 ____stack_chk_fail 的复现环境。感兴趣的朋友可以研究一下。 + +### 🐎 [轻量化的 iOS 动画框架](https://mp.weixin.qq.com/s/ABveMrA--3JWkpfb2d09lw) + +[@J_Knight_](https://github.com/knightsj):本文首先列举了几个常用动画库的优缺点,并抛出了动画串行和并行的实现场景。然后结合流程图和代码分享了一个针对动画回调嵌套问题的轻量化解决方案,让组合动画的代码结构更加清晰,方便开发和后续迭代修改。 + +### 🐕 [Flutter 小技巧之 InkWell & Ink 你了解多少](https://mp.weixin.qq.com/s/TL7bRp9f9BrAgiwGc1OXGw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文带你详细了解 Flutter UI 组件中点击事件水波纹效果组件系列,包含 InkWell 和 Ink 原组件,并且详细讲解了如何使用 Ink 系列组件给其他组件添加水波纹点击效果,Flutter 小白同学可以学习一下 👍 + +### 🐕 [百度 APP iOS 端包体积 50M 优化实践(四)代码优化](https://mp.weixin.qq.com/s/H9KtBPE67g3752OcnjXG7A) + +[@JonyFang](https://github.com/JonyFang): 本文依次介绍了 LinkMap 文件格式,及包体积瘦身中代码相关的优化方案(无用类优化、无用模块瘦身、无用方法瘦身、精简重复代码、工具类瘦身和 AB 实验固化)。 + +代码优化同样也是包体积优化的重头戏,但跟图片和资源优化相比较,代码修改影响范围大,再加上 OC 语言动态调用方式多种多样,这导致代码的删除操作更容易引起质量问题,所以优化收益落地难度比较大。百度 APP 在优化实践过程中挖掘出 20M 的收益,经过两个季度落地 8M 左右。如有包体积优化诉求,整体思路或许可以参考下。 + +iOS 包体积优化实践系列文章的回顾: +- [包体积优化(一)总览](https://mp.weixin.qq.com/s/ANbFzg7X932o-iDpa8FcxQ) +- [包体积优化(二)图片优化](https://mp.weixin.qq.com/s/RR7sjhkuTFgUp7S5E8ECMw) +- [包体积优化(三)资源优化](https://mp.weixin.qq.com/s/FQWCX0wkK6ifHQ8RhmmPsg) + +### 🐎 [@backDeployed to extend function availability to older OS releases](https://www.avanderlee.com/swift/backdeployed-function-back-deployment/) +[@Smallfly](https://github.com/iostalks):在过去苹果使用 `@available` 来标识高版本新增的 API,从而限制低系统版本使用,但是有些场景下,新增的 API 只不过是原有低版本 API 的封装,其实在低版本上依然可以使用。在 Swift 5.8 中新增了 `@backDeployed` 特性关键字,用于标记新 API 可以向前兼容。 + +### 🐎 [Introducing Swift HTTP Types](https://www.swift.org/blog/introducing-swift-http-types/) + +[@Damien](https://github.com/ZengyiMa):想尝试用 Swift 写服务端项目吗?Swift 官方近日宣布推出名为 Swift HTTP Types 的新开源软件包。该软件包旨在为 Swift 中的客户端 / 服务器 HTTP 操作提供一组共享的通用类型。Swift HTTP Types 提供了 HTTP 消息的核心构建模块的通用表示,包括 HTTPRequest 和 HTTPResponse。想利用 Swift 来完成服务端项目的同学不妨尝鲜使用。 + + +## 设计 + +### 🐎 [First Attempt at Designing for visionOS](https://www.david-smith.org/blog/2023/07/10/design-notes-39/) + +[@EyreFree](https://github.com/EyreFree):知名 iOS Widgets 应用 Widgetsmith 的作者分享了自己为应用适配 visionOS 的经历,对 visionOS 感兴趣的小伙伴不要错过。 + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10191 - 在 iOS 上使用 Object Capture](https://xiaozhuanlan.com/topic/8741092356) + +轻舟:今年,Apple 将 Object Capture 技术带到了 iOS 平台,利用这项技术,你可以随时随地使用你的移动设备为你身边的物体创建 3D 模型。它可以应用在项目中,在你的手机上预览,甚至是在新发布的 Apple Vision Pro 上查看。让我们一起来探索这项令人兴奋的技术。 + +### 🌟 [WWDC23 10188 - 使用 CKSyncEngine 同步 iCloud](https://xiaozhuanlan.com/topic/5379482610) + +LabLawliet:本文将结合多个实际基于 `iCloud` 的项目,带大家了解 `CKSyncEngine` 如何帮助您将人们的 `CloudKit` 数据同步到 `iCloud`。了解当您让系统处理同步操作的调度时,如何减少应用程序中的代码量。并分析 `CKSyncEngine` 接入现有项目的可行性。 + +### 🌟 [WWDC23 10121 - What's new in CSS](https://xiaozhuanlan.com/topic/5902738416) + +leejunhui:Web 上的发展日新月异,CSS 也不例外。Apple 今年在 Safari 上支持了许多的 CSS 新特性。本文主要介绍了四个维度的 CSS 新特性,分别是布局、颜色、选择器和字体排版。与此同时本文还介绍了 Safari Technology Preview 中可以体验到的 WebKit 新特性,以及全新改版的 Safari 开发者菜单。 + +### 🌟 [WWDC23 10105 - 打造响应更快的相机体验](https://xiaozhuanlan.com/topic/8534120679) + +Lion:iOS 17 提供了一些新的特性,通过延迟图片处理、快门零延迟、响应捕获等新特性,以及状态监听等措施,能大幅提高相机响应速度,创造更流畅的拍摄体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +[上海] B 站 - iOS 开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#253-2023.07.24.md b/Reports/2023/#253-2023.07.24.md new file mode 100644 index 000000000..2c554bc6c --- /dev/null +++ b/Reports/2023/#253-2023.07.24.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #253 | 2023-07-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/253.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Unity support for visionOS: What you need to know](https://blog.unity.com/engine-platform/unity-support-for-visionos) + +Unity 提供 visionOS 支持的 Beta 版本已经放出了[申请链接](https://create.unity.com/spatial),感兴趣的同学可以自行申请。 + +WWDC23 内参中也已经放出了多篇相关的内容,大家感兴趣的话可以自行查看: + - [WWDC23 10080 - 使用 RealityKit 构建空间体验](https://xiaozhuanlan.com/topic/8296735401) + - [WWDC23 10191 - 在 iOS 上使用 Object Capture](https://xiaozhuanlan.com/topic/8741092356) +- [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130) + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 6 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +### 🌟 [WWDC23 10164 - What's new in Swift](https://xiaozhuanlan.com/topic/7306192458) + +冬瓜:这个 Session 涉及了 Swift 的新语法特性和 Swift Macro 的话题,这些功能对于编写更加灵活和健壮的 API 以及高质量代码起到了很大的帮助。此外,也深入探讨了在受限环境下使用 Swift 的优势,并讨论了 Swift 在适配多种平台设备和语言方面的灵活性。 + +### 🌟 [WWDC23 10167 - 初见 Swift 宏](https://xiaozhuanlan.com/topic/1403528796) + +方舟(WAMaker):Swift 宏是今年 Swift 5.9 的新特性,本文偏重于 Swift 宏基本概念的介绍,以及在使用方面需要注意的内容。 + +### 🌟 [WWDC23 10117 - App Store Connect 的新特性](https://xiaozhuanlan.com/topic/5304186279) + +iHTCboy:本文介绍了 App Store Connect 的新特性,包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中,仅限内部测试人员访问的 TestFlight 测试更早安全可控;按地区预购可以为现有 App 拓展新的市场;通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能,优化产品页面,激发用户的兴趣,获取更多用户。 + +## 文章 + +### 🐢 [Android 视角谈 Bazel 与 Gradle 构建系统](https://mp.weixin.qq.com/s/4AI7H428oSc4fWgcK3KOpQ) + +[@Crazy](https://github.com/jiyan135960):本文从构建系统对比的角度出发,从各个角度对比了 Bazel 与 Gradle 两种构建系统的差别。首先从理念上对比,对比了 Bazel 与 Gradle 产物的不同点,从而引出两者的并发能力对比,得出结论并发能力上 Bazel 的实现更为简单方便。接着从快速增量对比,引出二者在 DAG 设计上的差别,Bazel 的 DAG 设计在增量与配置阶段都要优于 Gradle 的设计。最后是对分布式编译与依赖管理两种能力的对比,Bazel 的分布式编译是他的核心能力,但对于 Java/Android 的编译来说,分布式编译并没有什么明显提升,而在 Java/Android 的依赖管理上 Gradle 可谓是占尽优势。作者在最后更是利用飞书的两种构建进行了对比,首次编译 Gradle 优势极其明显,而有缓存编译也没有落后 Bazel 很多。作者在整篇文章中尽可能的保持客观的态度为 Bazel 与 Gradle 在做着对比,为大家提供了选择的思路,是值得大家一看文章。 + +### 🐎 [How to Use Swift Package Manager to Save Gigabytes of Network Traffic and Disk Space](https://betterprogramming.pub/how-to-use-swift-package-manager-saving-gigabytes-of-network-traffic-and-disk-space-998bd148ad56) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何使用 Swift Package Manager(SPM) 将依赖关系存储在项目的代码库中。这样可以避免在每次切换分支时重新下载和解决依赖。作者创建了一个本地 package,并通过脚本将所需依赖最少文件复制到项目中。这样做减小了文件大小,优化了依赖的使用。最终,拷贝的文件目录大小仅需 4.7 MB,比 `.build` 目录小了 211 倍。文章提供了实现的示例代码,有兴趣请参阅原文。 + +### 🐎 [Bad practice: testing if a String is empty](https://www.swiftwithvincent.com/blog/bad-practice-testing-if-a-string-is-empty) + +[@JonyFang](https://github.com/JonyFang): 本篇主要讨论在 Swift 中通过使用 `string.count > 0` 来检测字符串是否为空的问题,并提出了更好的替代方法。 + +使用 `string.count > 0` 的问题在于 `count` 属性需要遍历整个字符串来计算可见字符的数量,因此对于长字符串或包含大量字符串的情况,执行时间会很长。如果想要执行速度快且不受字符串长度的影响,可以使用 `string.isEmpty` 来检测字符串是否为空。差异在于 `string.isEmpty` 只需要检查字符串是否包含至少一个字符。 + +日常开发过程中,尽量避免长字符串判空通过 `count > 0` 的方式,避免不必要的性能损耗。 + +### 🐎 [Convenience Property Wrappers vs Custom Data Access Layer in SwiftUI](https://azamsharp.com/2023/07/15/property-wrappers-vs-data-access-layer.html) + +[@AidenRao](https://weibo.com/AidenRao):作者以一个待办事项应用为例,分析使用 SwiftUI 的 `@Query` 属性包装器和自定义数据访问层的优缺点。若追求便利,可选择 `@Query` 属性包装器;若需要更大的灵活性,以便于未来更换数据访问层,那么自定义数据访问层更为合适。 + +## 工具 + +### [Developer Duck AI for Xcode](https://apps.apple.com/app/id1662283032) + +[@EyreFree](https://github.com/EyreFree):Developer Duck 是一款人工智能编程助手,可帮助完成包括代码建议、分析和重构等编程任务。 + +支持以下功能 & 特性: +- Xcode 集成和聊天窗口 +- 命令行支持 +- 支持包括 Swift 在内的 15 种编程语言 +- 将文档注释添加到文件 +- 粘贴代码块并快速重构 +- 通过聊天生成 MermaidJS 流程图 + +感兴趣的朋友可以试试。 + +## 代码 + +### 🐕 [DeckKit](https://github.com/danielsaidi/deckkit) +[@邦Ben](https://weibo.com/linwenbang/):DeckKit 是一个开源库,旨在帮助开发者在 SwiftUI 中创建基于卡片(Deck)的应用程序。DeckKit 可以自定义卡片的外观和行为,并提供了一些方便的功能,如卡片重排、卡片拖拽等。 + +- 创建和管理卡片 +- 自定义卡片的外观和行为 +- 支持卡片拖拽、重排等交互 +- 提供 Demo 应用程序以供参考 + +## 设计 + +### 🐕 [Invisible Details of Interaction Design](https://rauno.me/craft/interaction-design) + +[@水水](https://www.xuyanlan.com/):好的交互设计会让产品感觉像是我们自身行为的自然延伸,如何在形式和功能之间取得整体平衡、如何让用户根据上下文预测产品交互意图?本文通过 iOS 的一些交互设计来介绍优秀的交互设计是如何隐喻用户进行操作的。对交互或者设计感兴趣的朋友不防看看,也许会有收获哦 ~ + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10156 & 10157 - SwiftUI 动画篇](https://xiaozhuanlan.com/topic/3165078924) + +zddhub(张东东):本文先以 SwiftUI 动画的基础知识为起点,逐步剖析了支撑 SwiftUI 动画效果的三大核心组成部分:Animation、Animatable 和 Transaction。同时,结合 SwiftUI 的视图渲染机制,旨在帮助读者更深刻地理解和有效地应用 SwiftUI 的动画功能。在文章的尾声,我们会介绍 SwiftUI 最新加入的两个高级动画功能。一起开启探索之旅吧! + +### 🌟 [WWDC23 10122 - 探索适用于现代 Web 的媒体格式](https://xiaozhuanlan.com/topic/1823954706) + +夏天:本文将介绍 Safari 支持的媒体格式,包括图像和视频,并介绍了 Safari 17 中的新技术。文章还会讨论网站视频演变历程和最新技术 Managed Media Source API,实现自适应流媒体视频,提供更好的控制和更高效的性能。 + +### 🌟 [WWDC23 10053 - What's new in privacy](https://xiaozhuanlan.com/topic/9504861273) + +胡军(Hummer):本文以概述的形式讲述了过去一年 Apple 在隐私方面的努力成果。主要涵盖三大方向: + +- 1.以隐私为中心设计的新的工具和 API ; +- 2.各平台与隐私相关的更新; +- 3.Vision Pro 平台的隐私保护设计范式。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳/广州/北京/三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#254-2023.07.31.md b/Reports/2023/#254-2023.07.31.md new file mode 100644 index 000000000..a54086a31 --- /dev/null +++ b/Reports/2023/#254-2023.07.31.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #254 | 2023-07-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/254.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [List of APIs that require declared reasons now available ](https://developer.apple.com/news/?id=z6fu1dcu) + +[@zoeGuo](https://github.com/zoeGuo):苹果在 WWDC23 上发布了应用程序(包括 SDK)的新隐私政策,并有 [Get started with privacy manifests](https://developer.apple.com/videos/play/wwdc2023/10060/) 的单独专题。7 月 27 日苹果发布了此则新闻,称:2023 年秋季开始,如果新上传的应用程序中使用了没有提供隐私清单的相关 API,那么你将会收到一封邮件通知;而从 2024 年春季开始,隐私清单会变成一个强制要求。涉及到的 API 以及使用原因可参考:[View list of APIs and approved reasons](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api),如果使用原因未在列表中列出也可直接提交具体使用理由:[Submit a request for a new approved reason](https://developer.apple.com/contact/request/privacy-manifest-reason/)。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 开发者实验室](https://developer.apple.com/cn/visionos/labs/) + +[@老峰](https://github.com/gesan):Apple 分别在库比蒂诺、伦敦、慕尼黑、上海、新加坡和东京设立了 Vision Pro 开发者实验室。开发者可申请参加为期一天的开发者实验室,体验在 Vision Pro 上运行的 visionOS、iPadOS 或 iOS App,并在 Apple 的支持下测试并优化你的 App 和游戏。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 5 篇内参,每篇质量都非常高,欢迎大家阅读。 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10117 - App Store Connect 的新特性](https://xiaozhuanlan.com/topic/5304186279) + +@iHTCboy:本文介绍了 App Store Connect 的新特性,包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中,仅限内部测试人员访问的 TestFlight 测试更早安全可控;按地区预购可以为现有 App 拓展新的市场;通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能,优化产品页面,激发用户的兴趣,获取更多用户。 + +### 🌟 [WWDC23 10080 - 使用 RealityKit 构建空间体验](https://xiaozhuanlan.com/topic/8296735401) + +@郭介騵:本文会介绍如何使用 RealityKit 框架中的 Entities 和 Component 在你的 visionOS 应用中玩转 3D 模型,以及全新推出的 RealityView,结合 RealityKit 3D 能力和 SwiftUI 沉浸式空间,带给用户前所未有的体验。 + +### 🌟 [WWDC23 10165 - What's new in Xcode 15](https://xiaozhuanlan.com/topic/4731268095) + +@Noah:工欲善其事,必先利其器,Xcode 是每个 iOS 开发者必备的开发工具,因此每年的 Xcode 更新都与我们息息相关。本文主要从 Xcode 15 功能、性能上的更新与优化入手,辅以 Demo 演示,分享 Xcode 15 让人振奋的更新。本文将从智能、简洁、高效、其他功能更新以及开发者注意事项这五个角度详述 Xcode 15 更新点,相信通过对这些更新点的了解,能够让大家在日常的开发工作中使用 Xcode 更游刃有余。 + +### 🌟 [WWDC23 10141 - App Store server API 新特性](https://xiaozhuanlan.com/topic/6725091438) + +@yt:本文对 WWDC23 在 App Store Server API 提供的新特性进行梳理总结,并提供迁移到新的 App Store Server API 的升级指引,无论你是目前在使用 App Store Receipts 的 verifyReceipt 还是已经升级到 App Store Server API,相信本文都能给到你一些帮助。 + +### 🌟 [WWDC23 10119 - 在 Safari 上开发浏览器插件](https://xiaozhuanlan.com/topic/3290654871) + +@Gareth Ng:本文在介绍 WWDC 2023 关于 Safari Web Extension 的同时,也介绍了 Safari Web Extension 从 2020 年开始的更新和发展. + +## 新手推荐 + +### 🌟 [Flutter 的线程模型和异步原理](https://mp.weixin.qq.com/s/XvVD-yG79x8KX1U5LJgMvg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 做 Flutter 应用开发鲜少有像 Native 那样遇到各种多线程或者多进程的问题,这跟 Dart 语言使用 event-loop 机制有关,但实际上在 Flutter 体系下是有类线程能力的,那就是 isolate, isolate 与 Native 线程或者进程有相似之处,但也有不少差异点;本文由搜狐技术团队产出,详细为大家讲解了 isolate 的方方面面,同样延伸到了 Flutter 各类异步机制的原理 : event-loop、async/await、Future. 称得上是一篇干货满满的科普以及进阶的好文,小编强烈推荐正在使用 Flutter 的同学跟着学习或复习一遍. + +## 文章 + +### 🐕 🌟 [Precompiled headers](https://maskray.me/blog/2023-07-16-precompiled-headers) + +[@Leo](https://github.com/leomobiledeveloper):C/C++ 的工程可以用 precompiled headers 来提升编译速度。即使后来 C++ modules 出现了,precompiled headers 仍然有很多应用的场景。本文是一片关于 precompiled headers 的优秀文章,详细讲解了 pch 的生成、使用、性能优化等方方面面,讲解的非常详细,推荐阅读。 + +### 🐢 [Swift Package Plugins 初探](https://mp.weixin.qq.com/s/US6_4Yvs_XnUF1gELYiN6g) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文是 Swift Package 新特性 Package plugins 的介绍文章。Package plugins 可以做很多事情,比如代码格式化、代码扫描、自动生成多语言文件等。通过本文介绍什么是 Package plugins?Package plugins 能做什么?Package plugins 怎么用?让你对 Swift Package plugins 有个具体了解,可以上手开发自己的 Swift Package plugins。 + +### 🐕 [Building Peak](https://harshil.net/blog/building-peak) + +[@极速男孩](https://github.com/ztlyyznf001):"Building Peak"是一篇揭示 Peak 应用开发背后的博客。作者使用 SwiftUI 和 The Composable Architecture (TCA) 构建应用,设计了各种主题并混合使用了标准和自定义 UI 。应用中加入了一些有趣的元素,如 "jiggle mode" 和 "Slide to Delete/Restore" UI。为了简化开发流程,作者创建了三个辅助应用:PeakBuilder(自动化上传到 TestFlight)、PeakThemer(在设备上设计主题)和 PeakSnapshotter(生成宣传艺术和 App Store 截图)。 + +## 工具 + +### 🐎 [asciiflow](https://asciiflow.com/#/) + +[@水水](https://www.xuyanlan.com/):这个工具可以绘制简单的流程图,然后选中图形即可粘贴到你想要复制到的代码注释里,喜欢这种注释风格的读者们可以尝试下哦 ~ + +## 代码 + +### [UIGraphicsBeginImageContextWithOptions Deprecated](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4114) + +[@Smallfly](https://github.com/iostalks):`UIGraphicsBeginImageContextWithOptions` && `UIGraphicsEndImageContext` 图片绘制 API 在 iOS 17 上标记为废弃,在 Xcode beta 5 若绘制图片的 `width` 或 `height` 意外为零会触发 Assert,非零 size 暂时不受影响。建议尽快替换为最新的 `UIGraphicsImageRenderer` API。 + +### 🐕 [A collection of Metal Shaders](https://github.com/rafunderscore/metallurgy) + +[@Cooper Chen](https://github.com/cjlcooper):Metallurgy 是一个展示如何在 SwiftUI 上使用 Metal 的开源项目,通过这个项目可以更好的学习和了解 Metal 开发相关内容以及如何与 SwiftUI 结合,工程中着重对 Metal 的着色器部分进行了详细的说明,通过阅读代码可以了解着色器如何传递数据到视图并展示给用户,能够快速帮助开发者更多地了解 Metal 以及如何在 SwiftUI 中使用它。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#255-2023.08.07.md b/Reports/2023/#255-2023.08.07.md new file mode 100644 index 000000000..82e70cfce --- /dev/null +++ b/Reports/2023/#255-2023.08.07.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #255 | 2023-08-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/255.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Bad practice: capturing a method reference](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4137) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章讨论了在 Swift 中捕获方法引用的不良实践。文章指出,尽管在将方法引用作为参数传递给函数时不需要显式地使用 self 关键字,但实际上编译器会自动捕获对 self 的强引用,从而可能导致循环引用的问题,且编译器不会对此发出警告。 + +### 🐕 [Objective-C Internals](https://alwaysprocessing.blog/series/objc-internals) +[@Smallfly](https://github.com/iostalks):虽然 Swift 已经成为官方默认的编程语言,但在国内大部分大型应用依然由 Objective-C 主导,并且熟练掌握 Objective-C 对理解底层系统实现有较大的帮助。该博客分享了一系列剖析 Objective-C 内部实现的文章,涉及到类的实现、isa 指针、实例变量、以及内存管理等等。每一篇文章简短又不失深度,有需要的同学可以查漏补缺。 + +### 🐕 [How to Create Callback-like Behavior Using AsyncStream in Swift](https://swiftsenpai.com/swift/asyncstream-callback) + +[@Barney](https://github.com/BarneyZhaoooo):文章详细探讨了如何在 Swift 中使用 AsyncStream 实现类似回调的行为,尤其聚焦于跟踪下载操作。 + +* **Swift Concurrency Revolution**:概述了 AsyncStream 是如何革新异步代码处理的。 +* **Replacing Old Methods & Creating Example**:通过模拟下载操作示例,演示了 AsyncStream 如何替换基于闭包的传统方法。 +* **AsyncStream Implementation & Considerations**:深入解释了 AsyncStream 的实现细节,并强调了调用 finish() 方法的重要性。 +* **User Interface Integration**:描述了如何将下载进度与用户界面集成,并分享了完整代码的链接。 + +### 🐎 [Xcode 14 如何调试 iOS 17](https://mp.weixin.qq.com/s/9K6gH-owQC_Oi6ZzRo2cRQ) + +[@EyreFree](https://github.com/EyreFree):这篇文章记录了作者尝试使用 Xcode 14 调试 iOS 17 的过程,并最终给出了解决方案,作者亲测 Xcode 14.3 有效,有需要适配最新操作系统的同学可以看看。 + +### 🐎 [Smart Open Xcode](https://christianselig.com/2023/08/smartly-open-xcode/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文分享了如何在 macOS 上智能打开多个版本的 Xcode。作者习惯将 Caps Lock 键映射为超级键,用于快速切换到 Xcode。然而,由于不同版本的 Xcode 可能会导致硬编码的热键打开错误的应用程序,作者介绍了一个名为 Hammerspoon 的小型 Lua 脚本实用程序,以解决这个问题。另外,作者还分享了一个附加内容,允许将脚本扩展到模拟器。这样可以在需要时快速切换到模拟器,并在模拟器和 Xcode 之间进行便捷切换。 + +### 🐎 [​系统自带日志框架 os.Logger](https://mp.weixin.qq.com/s/On3vVRu_gQwT9eT7Do62BQ) + +[@Cooper Chen](https://github.com/cjlcooper):OSLog 是 Apple 在 WWDC2016 推出的一套日志系统,而在今年的 WWDC23 上 Apple 将其进行更新,本文介绍了统一日志框架的基本情况,以及在使用、隐私和日志导的具体使用场景,重点也提到了今年对 OSLog 的更新,为开发者在调试阶段提供了更多的便利。 + +### 🐕 [百度 APP iOS 端包体积 50M 优化实践(五) HEIC 图片和无用类优化实践](https://mp.weixin.qq.com/s/PU5rC0U0XZ1VYqLWSUBWLQ) + +[@xuyafei86](https://github.com/xiaofei86):在之前的百度 APP 的包大小优化系列文章中,介绍了图片优化和代码优化的几种方式,本篇文章重点介绍 HEIC 图片和无用类检测的优化实践。 +HEIC 是 High Efficiency Image Format(高效图像格式)的缩写,是一种新的图像文件格式,它是 2017 年苹果公司在 iOS 11 中引入,用于代替 JPEG 图像格式,以更高效地压缩图像并减少存储空间占用。HEIC 支持多帧图像、透明度和 16 位深度色彩,使得它成为高质量图像和动画的理想选择。 +本文重点探究 HEIC 图片在百度 APP 中使用的可行性和包体积收益,验证 HEIC 图片在 Bundle 和 Asset Catalog 的兼容性,重点研究了 Asset Catalog 管理图片的机制,记录了验证过程中发现的特殊问题和解决思路。无用类则是详细介绍了如何用静态分析和动态分析相结合的方式,精简代码体积。感兴趣的同学可以阅读原文了解。 + + +## 代码 + +### [TipKit-Examples](https://github.com/jordibruin/TipKit-Examples) + +[@zoeGuo](https://github.com/zoeGuo):TipKit 是 WWDC23 上发布的新的 UI 组件库:[Make features discoverable with TipKit](https://developer.apple.com/videos/play/wwdc2023/10229/),[TipKit-Examples](https://github.com/jordibruin/TipKit-Examples) 是一个不错的使用 TipKit 的示例代码,感兴趣的读者可以自行阅读源码。 + +## 设计 + +### 🐎 [A WWDC Design Lab Made My App So Much Better](https://chriswu.com/posts/wwdc/designlab2023/) +[@水水](https://www.xuyanlan.com/):WWDC Design Lab 可以与苹果工程师、设计师和专家进行交流,本文作者介绍了他在 WWDC Design Lab 中和苹果设计师一起就他的天气应用 App 进行了非常友好的交流,苹果设计师提供了一些非常好的建议和反馈,作者也非常用心的进行了改进,可以看出最后的改进结果很令人满意。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#256-2023.08.14.md b/Reports/2023/#256-2023.08.14.md new file mode 100644 index 000000000..887f85b9c --- /dev/null +++ b/Reports/2023/#256-2023.08.14.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #256 | 2023-08-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/256.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight Update Xcode 15 beta 6](https://developer.apple.com/news/releases/?id=08022023a) + +目前已经可以使用 Xcode 15 Beta 6 打包的 APP 上传 TestFlight 收集用户对一些新特性的反馈了,比较重要的例如 敏感内容检测(SCSensitivityAnalyzer) 等。 + +同时部分隐私收集的选项,如 Write-only 的日历权限申请,笔者亲测会被审核员要求提供使用的路径说明,可以提前准备好并提供录屏说明使用的必要性。 + +隐私相关内容可以查看 [WWDC23 10053 - What's new in privacy](https://xiaozhuanlan.com/topic/9504861273) 。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 3 篇内参,每篇质量都非常高,欢迎大家阅读。 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### [WWDC23 10187, 10195, 10189, 10196 - SwiftData 全知道](https://xiaozhuanlan.com/topic/4937125086) + +[@kukushi](https://kukushi.github.io/):SwiftData 是什么?SwiftUI 中要如何使用 SwiftData?SwiftData 能和 Core Data 能一起使用吗?诸多困惑,本文将逐一解答。 + +### [WWDC23 10103 - 探索 App Intents 的功能更新](https://xiaozhuanlan.com/topic/9860547123) + +王守楷、刘欢:本文主要是探索 App Intents 在 iOS17 中带来的新特性。包含以下三部分内容:Widgets 交互性和配置的新体验;对开发者体验改进。包含框架支持,以及对静态提取的增强;Shortcuts 与 App Intents 集成的更新。 + +### [WWDC23 10142 - 探索应用内购测试](https://xiaozhuanlan.com/topic/5180246739) + +Lin:主要简要介绍内购测试的三种方式,帮助你了解每种方式的适用场景和今年引入的新功能。 + +## 文章 + +### 🌟 🐕 [深入理解 Observation - 原理,back porting 和性能](https://onevcat.com/2023/08/observation-framework/) + +[@zvving](https://github.com/zvving):在 WWDC23 上,Apple 发布了新的 Observation 框架,该框架旨在重塑和优化 SwiftUI 的数据流更新机制,简化概念和应用方式,提供更细粒度的控制,并对性能进行优化。然而,需要注意的是,这些新特性只能在 iOS 17 或更高版本上使用,并且随着这些改变,可能会带来一些重大的调整,同时也需要投入一定的学习成本。 + +这篇文章深入地分析了 Observation 框架的实现原理,探讨了其设计思想和性能特性,并与 KVO 和 Combine 的使用场景进行了对比。此外,文章还介绍了一个易于与当前项目兼容,对未来迁移友好的框架 —— ObservationBP。全文内容详尽并富有洞见,对于想要深入理解和掌握最新 SwiftUI 状态管理的开发者来说,堪称必读之作。 + +### 🌟 🐢 [移动端性能挖掘:字节跳动 iOS 与安卓性能归因实践](https://mp.weixin.qq.com/s/12Co7Tbvw2PmIZPqFlxaHA) + +[@Leo](https://github.com/leomobiledeveloper):性能领域是移动端的几个有难度的方向之一,归因又是解决性能问题的最关键的一环,本文详细详解了字节在归因工具方面的实践,推荐阅读。主要包含了三部分内容: + +* 线下工具的发展史、目标和痛点 +* 各种常见的性能问题的解决思路 +* iOS 归因工具实现的底层原理 + +### 🐕 [Dependencies as a Package Author](https://www.massicotte.org/package-author-dependencies) + +[@Barney](https://github.com/BarneyZhaoooo):文章主要表述了针对转移性依赖问题,开源项目作者可通过下列三种策略来高效调整项目依赖结构: + +1. 引入协议(Protocol):提取一个协议,并让客户定义它如何运行。 +2. 使用函数(Function):用单个函数代替协议进行依赖处理。 +3. 直接依赖(Plain Dependency):让用户通过其他包或直接使用方法来实现某项功能。 + +### 🐕 [数据序列化工具 Protobuf 编码 & 避坑指南](https://mp.weixin.qq.com/s/xH9v4Al3B2vPbZIp2yqZpQ) +[@Smallfly](https://github.com/iostalks):Protocol Buffers 是 Google 开发的一种数据序列化协议,相比 XML 和 JSON 它具有更好的性能和向后兼容性,可以清晰的定义数据结构,以文件的形式呈现方便管理和维护。这篇文章分析了 Protobuf 的优缺点,并介绍了它的编码原理,为了减少数字的存储空间,采用了 Varints 和 ZigZag 编码。在文章的最后作者还总结了一些使用 Protobuf 的最佳实践。 + +### 🐎 [GitHub embraces Swift and provides code analysis, security alerts and dependency updates for Swift projects](https://blog.eidinger.info/github-embraces-swift-and-provides-code-analysis-security-alerts-and-dependency-updates-for-swift-projects) + +[@kemchenj](https://kemchenj.github.io/):之前周报介绍了[ GitHub 里的代码扫描功能给 Swift 项目增加了支持](https://github.com/SwiftOldDriver/iOS-Weekly/blob/a6da79a0300d5d99b2a270819f88f6be6ddf1785/Reports/2023/%23250-2023.07.03.md#github-的-dependency-graph-dependabot-alerts-和-advisory-database-现在正式提供-swift-的支持),这篇文章又补充了一些实操的例子,感兴趣的同学可以看看。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#257-2023.08.21.md b/Reports/2023/#257-2023.08.21.md new file mode 100644 index 000000000..4d58837ec --- /dev/null +++ b/Reports/2023/#257-2023.08.21.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #257 | 2023-08-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/257.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [SSWG 2023 Annual Update](https://www.swift.org/blog/sswg-update-2023/) + +[@kemchenj](https://kemchenj.github.io/):Swift 服务端工作组发布了今年的年度进度报告 + +**2022 年的成果:** + +- 加快 Concurrency 的适配进度 + - SSWG 孵化的项目全部都已经适配了 Concurrency 的 API,并且社区里新的项目也基本都是用了 Concurrency + - [自定义 Actor 调度器](https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md)的提案从提出到正式实现 +- 优化提升工具链的使用体验 + - Swift for VSCode 插件 1.0 发布 + - Swift 插件在生态里的采纳率上升,从 formatter,linter 到 code generator 都大部分实现了 Swift 插件 + - 发布了 Swiftly,一个 Swift 版本管理工具,方便 Linux 上安装和管理 Swift 版本 +- 优化编译时间,针对服务端项目的一系列编译优化。 + +**2023 年的目标:** + +- 继续集中在社区生态建设 +- 促进 Structured Concurrency 的采纳和适配 +- 优化文档和指引 +- 优化提升工具链的使用体验 + +## 新手推荐 + +🐕 [ARM 汇编快速入门](https://mp.weixin.qq.com/s/-RQ_gtI0siCJ9cKO-hAFWg) + +[@xuyafei86](https://github.com/xiaofei86):本文主要分享如何快速上手 ARM 汇编开发的经验、汇编开发中常见的 Bug 以及 Debug 方法、用的 Convolution Dephtwise 算子的汇编实现相对于 C++ 版本的加速效果三方面内容。 + +## 文章 + +### 🐢 [Releasing Swift Transformers: Run On-Device LLMs in Apple Devices](https://huggingface.co/blog/swift-coreml-llm) + +[@zoeGuo](https://github.com/zoeGuo):随着大模型的持续火热,以及各路大模型的涌现,想必有很多开发者已经跃跃欲试。这是一篇由 Hugging Face 的工程师发布的指导 Swift 开发者在 Mac 上运行大模型的文章。文章主要有以下内容: +- 将模型转换为 CoreML 格式的几种常用方式:[transformers-to-coreml](https://huggingface.co/spaces/coreml-projects/transformers-to-coreml)、[exporters](https://github.com/huggingface/exporters)、[coremltools](https://github.com/apple/coremltools),还有模型转换的一些踩坑经验 +- 开发工具时关注的一些性能优化指标 +- [swift-transformers](https://github.com/huggingface/swift-transformers) 提供的丰富的功能:分词能力,分模型配置能力,生成算法,以及目前已经支持的模型 +- [swift-chat](https://github.com/huggingface/swift-chat) 一个使用 [swift-transformers](https://github.com/huggingface/swift-transformers) 的 Demo + +文末作者还写了一些后续会完善更新的内容。总之这是一篇干货满满的文章,感兴趣的读者可以阅读原文。 + +### 🐕 [Adapting an App to visionOS](https://varrall.substack.com/p/adapting-an-app-to-visionos) + +[@EyreFree](https://github.com/EyreFree):这篇文章描述了作者如何将他的板球应用从 SwiftUI 迁移到 Vision Pro 设备。首先,因为 iPad 应用不支持 visionOS,所以作者在 Xcode 中为 visionOS 创建一个全新工程并将现有代码复制了过去。然后作者还提到了一些其他具体的细节,例如添加 WindowGroup、调整背景和颜色以适应 visionOS 的特性等。同时作者发现 visionOS 上的彩色文字难以阅读,建议其他开发者注意此问题。在文章的最后,作者表示在几个小时内完成的进展令自己非常满意,看起来整体迁移的体验还是很不错的。建议有在做 visionOS 开发 / 适配的朋友阅读本文。 + +### 🐎 [Build performance analysis for speeding up Xcode builds](https://www.avanderlee.com/optimization/analysing-build-performance-xcode/) + +[@Cooper Chen](https://github.com/cjlcooper):在开发过程中,缓慢的构建通常会分散我们的注意力并影响效率,本文从通过 Xcode 建立 Build 耗时基线开始,使用 Build Timing Summary 进行 Build 时间分析,并且提供了一些 Build 加速的小技巧,作者主旨是在提醒开发者重视项目构建时间,这对于大型工程已经多团队开发有着至关重要的影响,通过本文也可以为相关领域的开发同学提供一些优化的思路。 + +### 🐎 [Dead Code Detection With Reaper](https://www.emergetools.com/blog/posts/dead-code-detection-with-reaper) + +[@老峰](https://github.com/gesantung):很多大型项目在长时间的维护迭代过程中会产生很多无用代码如无调用的、不会执行的分支等。本文介绍了 iOS 新框架 Reaper,其大致原理是 OC 中所有类在第一次使用时都会发送一个 +initialize 方法(Swift 需特殊处理),只需接入 SDK 运行时检测无用代码并生成报告,它还可以获得每个类的使用时间,也可以用作启动优化,感兴趣的朋友可以尝试。 + +### 🐢 [swiftui-cookbook](https://www.kodeco.com/books/swiftui-cookbook) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI Cookbook 是由 Kodeco 团队提供 , 在 SwiftUI 中创建用户界面的常见模式的参考,涵盖了使用 SwiftUI 开发用户界面时必须解决的常见问题 , 可以在编码时快速参考。SwiftUI Cookbook 适合任何编写 SwiftUI 代码并需要快速刷新特定语法或技术的人。 + +### 🐎 [AppKit vs SwiftUI: Stable vs Shiny](https://milen.me/writings/appkit-vs-swiftui-stable-vs-shiny/) + +[@水水](https://www.xuyanlan.com/):在编写原生 macOS 应用程序时,开发人员需要决定在哪个 UI 框架中编写新代码,是选择 AppKit 还是 SwiftUI ?在 2022 年 WWDC 上 Josh Shaffer 阐述了未来平台的愿景说构建应用程序的最佳方式是使用 Swift 和 SwiftUI ,但 SwiftUI 并不是当今 AppKit 的完全替代品,尤其是在 MacOS 上的表现上。很多开发人员表述了使用 SwiftUI 并不如现象中简单,会遇到的各种问题。虽然比不过 AppKit 在 30 年的稳定和成熟,但是 SwiftUI 正在多个维度上解决一个更加困难的问题:声明性、跨平台、重写,而且很显然苹果重心是放在 SwiftUI 上。所以如何选择 UI 框架: + +- 为了对 UI 框架做出明智的决策,我们需要了解是什么推动了决策,用例和优先级是什么。 +- 如果你想玩一个崭新的 API,或者用一个新的模式写一个应用程序,那么 SwifUI 显然是赢家, 你将获得重要的技能,你将能够在未来发挥作用。 +- 要支持旧版本的 macOS,请使用 AppKit。 +- 对于长格式文本编辑或数千条记录,请使用 AppKit。 +- 对于现有的 AppKit 应用程序,请逐步添加 SwiftUI。 +- 对于其他一切,请从 SwiftUI 开始,并根据需要包含 AppKit。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 — 内容终端技术团队 — 手淘首页 & 信息流方向 — iOS/Android + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#258-2023.08.28.md b/Reports/2023/#258-2023.08.28.md new file mode 100644 index 000000000..097104150 --- /dev/null +++ b/Reports/2023/#258-2023.08.28.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #258 | 2023-08-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/258.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Flutter 3.13 更新](https://mp.weixin.qq.com/s/4zM6hwGKsR0X7E6n2VlCXA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 季度更新来啦 !!!本次更新依然在 3.x 系列之下,也就是说还是持续的修复和优化,那么本次带来了哪些有意思的能力呢 : + +- 优化了 Impeller 在 iOS 上的性能,同时 mac OS 已经可测试 +- 折叠屏设备获得支持 +- Material 3 持续增进支持,下一个版本讲默认 M3 选项 +- 应用生命周期监听改进 +- TwoDimensional,新的滚动机制 +- New slivers,支持组合使用 + +## 新手推荐 + +### 🐎 [Applying metal shader to text in SwiftUI ](https://augmentedcode.io/2023/08/07/applying-metal-shader-to-text-in-swiftui/) + +[@Cooper Chen](https://github.com/cjlcooper):今年的 WWDC23 引入了用于将 shaders 着色器应用于 SwiftUI 视图的视图修改器,同时因为着色器还符合 ShapeStyle 协议,这意味着开发者可以直接将着色器传递给 foregroundStyle 视图修改器,然后 SwiftUI 就使用着色器计算视图的像素颜色值,本篇文章通过简单的例子,可以了解如何将着色器应用于文本,对于新入门相关开发的同学是一个不错的参考。 + +## 文章 + +### 🐕 [Swift ’ s closure capturing mechanics](https://www.swiftbysundell.com/articles/swifts-closure-capturing-mechanics/) + +[@JonyFang](https://github.com/JonyFang):尽管 Swift 的自动引用计数管理了内存,虽然我们常常听到过于简化的规则,比如“在闭包中始终使用弱引用”,但理解闭包的捕获方式以及如何引用对象和值很重要。日常开发中,需要深入了解这些机制,并根据实际情况进行合理应用。 + +1. 隐式捕获。在定义逃逸闭包时,它会隐式捕获内部引用的对象、值和函数。为了防止在稍后执行时被释放,这些闭包需要保持对所有依赖项的强引用。举例说明了如何使用 GCD 延迟显示 UIAlertController,并提到了这种捕获方式可能导致一些棘手的错误和内存问题。同时,也提到了对于已被从视图层次结构中移除的视图控制器,需要谨慎处理以避免问题。 + +2. 捕获列表。通过在闭包内部使用捕获列表,可以指定对象是以弱引用还是默认的强引用被捕获。通过弱引用捕获对象,可以避免潜在的保留循环问题,特别是在需要引用 `self` 时。通过示例展示了在闭包中使用捕获列表的具体应用场景,以及如何避免保留循环的问题。总体而言,捕获列表是解决闭包中引用问题的有效方式,能够更加精确地控制对象和值的引用关系。 + +3. 使用捕获列表避免保留循环。弱引用不是所有情况的最佳解决方案。不同情况下应谨慎考虑如何使用 self,以及闭包在内存中的寿命。在短暂的闭包中,如 UIView 动画,捕获 self 通常没问题,而且代码易读。但在闭包中访问实例方法和属性时,需要明确引用 self,以明确捕获决策。有些情况下需要长时间保留 self,例如当当前对象在闭包中的工作是必要的时。同时,捕获列表能够让我们直接捕获闭包的依赖项,而无需引用整个 self。在仅需要访问少数属性而不是整个 self 时非常有用。 + +4. 捕获值。值类型在闭包捕获中较复杂。值类型在闭包中被传递时是以副本的形式进行传递,这使得 Swift 的值类型非常强大,但在特定情况下可能会出现意外 case。例如,在给按钮分配处理闭包时,捕获 `sender` 和 `message` 属性可能会导致值的不一致。对于可变值,解决方法是在闭包中只捕获 `self`,然后将该值直接映射到发送方法。然而,对于常量,将这些属性添加到闭包的捕获列表中没有问题。 + +5. 无主引用(unowned)。闭包捕获中 unowned 引用与弱引用一样,也是通过捕获列表指定的,只能应用于引用类型。使用 unowned 与使用强制解包的可选项实际上会得到相同的结果,即将弱引用视为非可选项,但如果在引用释放后尝试访问它,会导致崩溃。使用 unowned 虽然让我们摆脱了可选项,有时可能非常方便,但它会在引用释放后引发崩溃,除非我们绝对确定给定的闭包在其中一个依赖项被释放后不会意外触发。然而,与其使用 unowned,我们可以通过断言来实现完全相同的效果。虽然这会导致一些额外的代码,但在失败时会提供更具可操作性的错误消息,并且不会在生产环境中引发崩溃。 + +理解闭包的捕获方式以及如何引用对象和值很重要,日常开发中需要合理应用。 + +### 🐕 [Deterministic builds with clang and lld](http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html) + +[@老峰](https://github.com/Gesantung):可重现构建(英语:Reproducible builds)也被称为确定性编译(英语:Deterministic compilation),即使用确定性编译编译的源代码在任何路径,时间,环境将始终输出相同的二进制文件。本文主要介绍了 Deterministic compilation 基本概念,以及如何使用 LLVM 创建确定性构建。 + +### 🐕 [How to Automate Memory Leak Detection in Your Swift Code with XCTest](https://qualitycoding.org/swift-memory-leak-detection-xctest/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何使用 XCTest 自动检测 Swift 代码中的内存泄露:使用 XCTestCase 中的 addTearDownBlock 方法,在测试方法结束时,通过断言检查对象是否正确释放。 + +### 🐎 [How to check if you use a required reason API](https://blog.eidinger.info/how-to-check-if-you-use-a-required-reason-api) + +[@J_Knight_](https://github.com/knightsj):我们在调用某些 API 的时候,需要我们向苹果官方告知使用的原因(比如一些可以用于标识设备的一些系统参数),本文作者把这类的 API 叫做 “ Required Reason API ”。作者简单介绍了这些 API 的类型,也提供了一个脚本用于在代码中查找出这类 API + +## 代码 + +### **[SwingAnimation](https://github.com/TopWidgets/SwingAnimation)**:一份价值 500 的代码 + +[@卓同学](https://twitter.com/bestlacklock):事情的起因是[自力 hzlzh]( https://twitter.com/hzlzh/status/1692205775928836405?s=20)在推特上“悬赏” 500 元想要知道小组件如何能做位移动画的秘密。苹果官方并不支持小组件做动画,因此要做到这个动画肯定是找到了一个特别的实现方式。悬赏发出来不到一天,就有一位开发者成功获得了悬赏。 + +我把这件事告诉了我们一位不愿意透露姓名的编辑后,这位编辑有着强烈的求知欲,于是也花了 500 获得了这个秘密。并在社交网络上分享:“昨天花了 500 买了一份代码,挺划算的”。与此同时我也在朋友圈说到:“彪子你太爱学习了”。 + +正当我们沉浸在一个价值 500 的秘密分享给另外一个人,等于白赚了 500 ,等于当时没花钱的喜悦的时候,某知名小组件开发者[树](https://twitter.com/_Octree)开源了这个方案。所以这是一份实打实价值 500 的代码了,如果有需要做小组件位移动画的欢迎前往了解学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 — 内容终端技术团队 — 手淘首页 & 信息流方向 — iOS/Android + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#259-2023.09.04.md b/Reports/2023/#259-2023.09.04.md new file mode 100644 index 000000000..0ab22e956 --- /dev/null +++ b/Reports/2023/#259-2023.09.04.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #259 | 2023-09-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/259.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [一文入门最热的 LLM 应用开发框架 LangChain](https://mp.weixin.qq.com/s/bYzNNL3F0998Do2Jl0PQtw) + +[@zoeGuo](https://github.com/zoeGuo):LangChain 是一个用于开发由语言模型驱动的应用程序的框架。笔者认为 Langchain 解决了现在开发人工智能应用(以 GPT 模型为例)的一些切痛点:数据滞后、token 数量限制、不能进行联网、不能与其他数据源链接。文章逐一介绍了 LangChain 以下组件的使用:Models(模型)、Prompts(提示词)、Indexes(索引)、Chains(链)、Agents(代理)。简单示例了用 LangChain 加载 OpenAI 的模型,完成一次问答、通过谷歌搜索并返回答案、对超长文本进行总结、构建本地知识库问答机器人等几个 LangChain 实战。 + + +### 🐕 [Adding teachable moments to your apps with TipKit](https://bendodson.com/weblog/2023/07/26/tipkit-tutorial/) + +在今年的 WWDC 中,苹果推出了 Tipkit,开发者可以通过 Tipkit 快速向应用中添加例如新手引导、新功能介绍等功能,并且 Tipkit 可以通过 iCloud 跨设备显示。本文是 Tipkit 使用的一个实战教程,想要了解这个新功能的同学,可以跟着示例快速实践并掌握如何使用。 + + +### 🐕 [Mastering Thread Safety in Swift With One Runtime Trick](https://betterprogramming.pub/mastering-thread-safety-in-swift-with-one-runtime-trick-260c358a7515) + +[@莲叔](https://github.com/aaaron7):作者首先简单的介绍了多线程开发中最典型会遇到的问题,然后介绍了在苹果平台中性能最好的锁:os_unfair_lock,同时介绍在了 Swift 中如何使用它。之后作者演示了如何通过 propertyWrapper 来更通用的实现原子化的变量,并搭配一个比较冷门的 _modify 方法来规避常见赋值可能因为 get+set 组合不原子化的坑。 + +### 🐕 [Improve the build times of your SPM Packages and your apps](https://mdb1.github.io/2023-08-18-improve-build-times-in-spm-packages-and-in-your-apps/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文主要涉及如何缩短 SPM(Swift Package Manager)包和应用程序的构建时间,以提高开发效率。以下是主要要点: +- 测量和改进构建时间:文章开始强调了测量构建时间的重要性,并建议在测试前 / 测试后使用相同的环境来进行测量。它区分了两种构建类型: + - Clean Builds(干净构建):完整重新编译整个代码库,无论是否有更改 + - Incremental Builds(增量构建):仅编译自上次构建以来发生更改的代码 + +- 使用时序摘要和最近的构建时间线:文章介绍了 Xcode 提供的两个工具,用于测量编译时间和构建时间线,以帮助识别需要优化的区域 +- 改进 Xcode 项目中的编译时间:文章提供了一些建议,包括启用警告以标识编译时间过长的代码、明确指定类型以减少编译时间等 +- 改进 SPM 包中的编译时间:文章介绍了如何通过在 SPM 包中应用相同的优化来减少构建时间,以及如何使用自定义规则来规范代码以提高编译效率 +- SwiftLint 规则:文章提到了一些 SwiftLint 规则,如 explicit_init 和 explicit_type_interface,可以帮助简化代码并可能减少构建时间 + +总的来说,这篇文章提供了关于如何提高 SPM 包和应用程序构建效率的详细指南,包括测量、警告启用、类型明确指定等技巧和建议。通过实施这些优化,开发团队可以更快地构建和测试他们的代码。 + +### 🐕 [为现有 App 及 API 架构实现 End-to-End Testing 的可能性验证](https://medium.com/zrealm-ios-dev/poc-app-end-to-end-testing-local-snapshot-api-mock-server-5a5c4b25a83d) + +[@EyreFree](https://github.com/EyreFree):本文记录了作者实验在现有的 App / API 架构之上使用 Proxy Server 录制 API Request & Response 并回放作为 Mock Server API 给 End-To-End Testing 测试时使用的做法试探,同时尝试了基于 Mitmproxy 套件自行撰写 API 录制和回放脚本,有在做相关工作的同学建议阅读。 + +### 🐕 [解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug](https://www.fatbobman.com/posts/serious-issues-caused-by-delayed-state-updates-in-SwiftUI/) + +[@Damien](https://github.com/ZengyiMa):SwiftUI 是一个响应式框架,当数据源发生变化时,框架会自动更新视图。本文解析了 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误: +* 通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 +* 当视图正在滚动时返回上一层视图会导致应用崩溃 + +同时作者也提供了对应的解决方案,如果读者有遇到类似的问题,不妨一读。 + +### 🐕 [腾讯 QQ 桌面版架构升级:内存优化探索与总结](https://mp.weixin.qq.com/s/REHP26sx-8HjDIvGM63kJw) + +[@Leo](https://github.com/leomobiledeveloper):桌面版应用相比 Web 端具有停留时间长的特点,如果没有控制好内存,会导致交互响应慢或者崩溃。在这篇文章中,QQ 相关团队和大家分享新版 QQ 在内存优化方面的探索和阶段性优化进展。虽然本文的讨论主要集中在 Windows 平台,但由于 Electron 的跨平台特性,大部分优化措施也同样适用于 macOS 和 Linux 平台。 + +### 🐎 [SwiftUI Tips:如何收起键盘](https://juejin.cn/post/7268592310040199223) + +[@享耳先森](https://github.com/iblacksun):文章列举了 `SwiftUI` 中多种收起键盘的方式,适合刚入 `SwiftUI` 的同学们。 + +### 🐎 [Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener](https://mp.weixin.qq.com/s/wrWTklYNwLlTMBZJHxaudA) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了 Flutter 在 3.13 版本中的新的生命周期类 AppLifecycleListener 的使用方法,新的 AppLifecycleListener 类不用再如之前一样选择 mixin 的处理方案,可以直接在类中进行初始化,使用起来更加方便并且有利于全局统一的处理。新的生命周期回调方法更多也更加直观。本文对 hidden 的由来也做了简单的讲解,有利于各位开发者更好的理解 hidden 与 show 方法。 + +## 工具 + +### [Arc on Windows projects: swift-build](https://github.com/thebrowsercompany/swift-build) + +[@kemchenj](https://kemchenj.github.io/):Arc 是一款在产品体验上做了很多革新的浏览器,除了产品之外,技术选型也非常激进,选择了 Swift 作为它们主要的编程语言,但 Arc 需要支持 macOS 之外的桌面系统,而 Apple 在 Windows/Linux 平台上的投入很少。 + +所以 Arc 团队找到了 LLVM 团队的工程师 Saleem Abdulrasool,出钱资助他去帮助搭建 Swift on Windows 的工具链,后来他甚至进入了 Swift 的核心团队专门负责这件事情,并且今年也正式加入了 Arc 团队的公司。 + +如果你也钟情于 Swift 并且需要在 Windows 上使用,可以关注这个项目了解 Swift on Windows 的最新进展。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#260-2023.09.11.md b/Reports/2023/#260-2023.09.11.md new file mode 100644 index 000000000..87467d78c --- /dev/null +++ b/Reports/2023/#260-2023.09.11.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #260 | 2023-09-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/260.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Hidden feature: static properties](https://www.swiftwithvincent.com/blog/hidden-feature-static-properties) + +[@极速男孩](https://github.com/ztlyyznf001):Swift 的静态属性具有一项隐藏特性:它们是隐式懒加载的,只在首次访问时初始化。这意味着,即使应用中有许多静态属性,它们也不会在应用启动时全部初始化,从而优化性能。若尝试显式地用 lazy 关键字声明静态属性,Swift 会报错,因为静态属性已经是懒加载的。 + +## 文章 + +### 🐕 [C++ 知识体系总结:语言核心与代码工程](https://mp.weixin.qq.com/s/lQoH4UF36_zKrw-Jbp2ylw) +[@莲叔](https://github.com/aaaron7):这篇文章初看下属于谁看了必然会收藏但大概率不会看的文章。但看完后又给我很不一样的体感,虽然文章较长而且涉及的点比较多,但并不是单纯追求大而全,而是围绕 C++ 一些常用的新特性进行了介绍,根据我的经验在现代 C++ 的项目里几乎都会用到里面介绍的特性,同时每个特性都包含示例代码帮忙理解,大幅提高了学习的效率。对于工作中需要和 C++ 打交道的同学来说是很不错的资料。 + +### 🐎 [The new Swift section in binaries built with Swift 5.9 and Xcode 15, \_\_TEXT/\_\_constg_swift](https://twitter.com/sond813/status/1699822345471541415) + +[@kemchenj](https://kemchenj.github.io):Swift 在运行时经常需要遍历查询类型的元信息,但 Swift 编译链接后的二进制产物里,类型的元信息是各自分散的,导致启动时会频繁触发 page fault,并且 CPU 缓存命中率也会下降。 + +在即将发布的 Swift 5.9 里,编译器会将这些信息集中存放到各自的 Section 里,改善前面提到的问题。 + +### 🐕 [一线大厂程序员的考公上岸心得](https://mp.weixin.qq.com/s/dlOEngLD150RaTkAlAVkww) + +[@老驴](https://weibo.com/u/6090610445):一篇和我们之前推荐的很不一样的文章,是一位之前在微软的 Edge 的同学,后来如何考公务员的访谈。在大家都不容易的时间里,算是比较有意思的经验分享。当然,这不代表老司机的立场,只是做一个分享,能让大家看到一些不一样的视角。 + +### 🐕 [Xcode 15 iOS 17 小组件适配必看:Widget needs to adopt container background](https://www.craft.me/s/UOcc5BqYFazbL2) + +[@anotheren](https://github.com/anotheren):在使用 Xcode 15 后,如果你的项目代码包括了小组件,那么就会收到 "Widget needs to adopt container background" 的提示,要求进行相关适配。本文介绍了相关适配的要点,推荐阅读。 + +### 🐕 [Develop and test OpticID for Vision Pro](https://blog.eidinger.info/develop-and-test-opticid-for-vision-pro) + +[@EyreFree](https://github.com/EyreFree):Optic ID 是一种全新的安全生物识别系统,用于对用户进行身份验证,它的调用方式和在 iOS App 中使用 FaceID 类似。在这篇博文中,作者解释了开发者应该如何利用 Optic ID 进行身份验证以及如何在 Vision Pro 模拟器中测试 OpticID,感兴趣的同学可以阅读原文进行了解。 + +### 🐕 [实战总结|抽丝剥茧,记一次神奇的崩溃](https://mp.weixin.qq.com/s/vMlK7oIQH62VV6qHSPHnQQ) + +[@xuyafei86](https://github.com/xiaofei86):本文详细回放了一个崩溃案例的分析过程,感兴趣的同学可以阅读原文了解。 +1. 回顾了 C++ 多态和类内存布局相关知识,了解原理后查看内存让我们看到了更多代码内部的细节。 +2. 回顾了 pc 指针的含义并了解了更多 arm 异常处理机制,解释了一些日常认为理所当然的结论背后的原理。 +3. 回顾了内存屏障相关知识,并构造了 demo 对理论分析进行了实践验证。 + + +## 工具 + +### 🐎 [京东京喜 iOS 包体积分析工具](https://juejin.cn/post/7273740834201600063) +[@Damien](https://github.com/ZengyiMa):一款用于分析 iOS IPA 包的脚本工具,使用此工具可以自动扫描发现可修复的包体积问题,同时可以生成包体积数据用于查看。工具京东京喜团队内部已经使用很长一段时间,希望可以帮助到更多的开发同学更加效率的优化包体积问题。 + +## 代码 + +### 🐎 [add a label to the outer loop and use break with the label](https://twitter.com/lee_kah_seng/status/1696795033033208151?s=43&t=Oi5pq1Y0PftkjDmJadkvxQ) + +[@zoeGuo](https://github.com/zoeGuo):在 Swift 中使用嵌套循环的时候,你可能会有这样的需求:同时跳出内部和外部的循环;这个时候就可以为外层循环添加一个标签,在需要 break 的时机,选择 break 这个标签。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#261-2023.09.18.md b/Reports/2023/#261-2023.09.18.md new file mode 100644 index 000000000..11012436f --- /dev/null +++ b/Reports/2023/#261-2023.09.18.md @@ -0,0 +1,106 @@ +# 老司机 iOS 周报 #261 | 2023-09-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/261.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store submissions now open for the latest OS releases](https://developer.apple.com/news/?id=khzvxn8a) + +Xcode 15 RC 版本已经正式发布,目前 AppStore 已经可以接受使用 RC 版 Xcode 构建的产物了,同时苹果预告将在 2024 年 4 月起禁止使用 Xcode 14 提交新的产物。 + +## 文章 + +### 🐎 [网易云音乐 Tango 低代码引擎正式开源!](https://mp.weixin.qq.com/s/X_F2JMY3rUm_mH-NP1FmEA) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了网易云开发的一款快速构建低代码平台的低代码设计器框架 Tango,该框架主要用于简化前端系统的搭建流程。相较于基于私有 Schema 的低代码搭建方案,Tango 的基于源码 AST 转换方式可以做到面向以源码为中心的应用搭建场景,并且具有更好的扩展性,原有组件亦可以无缝低成本接入。现今 Tango 已经开源,大家可以去 GitHub 直接查看源码以及应用文档。 + +### 🐎 [Symbolicating SwiftUI (and any Apple Framework)](https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework) + +[@邦Ben](https://weibo.com/linwenbang):Apple 为大多数系统框架(UIKit,AVFoundation 等)提供了符号,但其他如 SwiftUI,Combing 等则没有提供,那么依赖这个进行符号化的工具,这无法正确的显示。文中作者通过参考 Libc 中开源的代码 backtrace.c 中的实现,并且改进了方法进一步实现了获取完整符号的方法,在做相关内容的同学,可以参考一下。 + +### 🐎 [Understanding Container Background for Widget in iOS 17](https://swiftsenpai.com/development/widget-container-background/) + +[@享耳先森](https://github.com/iblacksun):在即将发布的 iOS 17 中,Apple 扩展了 Widget 的使用范围,为了适应这一变化,引入了 `containerBackground(for:alignment:content:)` 这一 API。如果使用 Xcode 15 编译项目而 Widget 没有适配这一 API 将会报错,文章解释了这一 API 的作用及用法。 + +### 🐢 [A Day in the Life of a SwiftUI View](https://chris.eidhof.nl/presentations/day-in-the-life/) +[@Smallfly](https://github.com/iostalks):这篇文章是 SwiftConf.to 大会上的演讲稿。主题是关于作者所理解的 SwiftUI 背后的思维模式。作者通过演示如何将 SwiftUI 代码转化成视图树(View Tree)和渲染树(Render Tree)的方式来分享他的理解。 + +演讲内容包括以下要点: +- 如何将 SwiftUI 的代码转化成视图树和渲染树。 +- 视图树是短暂的,而渲染树是持久的,它们之间的区别和重要性。 +- 如何处理异步加载数据,以及在渲染树中使用任务(task)来实现数据加载。 +- 对 SwiftUI 布局系统的讲解,包括如何使用 `resizable` 和 `aspectRatio` 来控制视图的大小和比例。 +- 使用环境(Environment)和偏好设置(Preferences)在视图树和渲染树中传递信息的方法。 + +文章中提到了一些 SwiftUI 的内部工作原理和技巧,以及如何更好地理解和利用 SwiftUI 进行应用程序开发。这篇文章可能对希望深入了解 SwiftUI 的开发者有所帮助。 + +### 🐎 [我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash](https://mp.weixin.qq.com/s/salgoWNYfqjhNwu30aHRnA) + +[@JonyFang](https://github.com/JonyFang):因键盘 Crash 问题,通过逆向分析定位到 iOS16 系统键盘 `tryLock` 时的系统 Bug,提供了一套可修复的方案。借助 `+(void)load` 方法在 App 启动时执行的特点实现对 `-[UIKeyboardTaskQueue tryLockWhenReadyForMainThread]` 方法的 Hook,仅在 iOS 16 的 Arm64 架构上生效。 + +## 工具 + +### [Introducing swiftly, a new Swift toolchain installer and manager](https://forums.swift.org/t/introducing-swiftly-a-new-swift-toolchain-installer-and-manager/67254) + +[@kemchenj](https://kemchenj.github.io):Swiftly 是一个 Swift 的版本管理器,类似于 nvm,rvm,rustup,可以用来快速安装各个版本的 toolchain 并且进行切换,作为 SSWG 的项目正在孵化当中,以后有望成为官方首选的 Swift 安装方式。 + +## 代码 + +### [SwiftDataKit](https://github.com/fatbobman/SwiftDataKit) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftDataKit 是 SwiftData 的扩展库,它使 SwiftData 开发人员可以访问 SwiftData 元素背后对应的 Core Data 对象。由于 SwiftData 框架功能尚不完善,开发人员仍需通过调用 Core Data 的方法来实现一些高级功能。使用 SwiftDataKit,可以让开发人员在某些场景下避免重复创建 Core Data 版本的 Data Model 和 Stack。更多详情可参阅 [SwiftDataKit:让您在 SwiftData 中使用 Core Data 的高级功能](https://www.fatbobman.com/posts/use-Core-Data-features-in-SwiftData-by-SwiftDataKit/)。 + + +## 音视频 + +### 🐎 [Introducing a Memory-Safe Successor Language in Large C++ Code Bases - John McCall - CppNow 2023](https://www.youtube.com/watch?v=lgivCGdmFrw) + +[@老峰](https://github.com/gesantung):视频主要讲了 Apple 生态过去的编程语言(C/C++/Objective-C/Objective-C++)存在内存安全的问题,以及后继者 Swift 如何解决这些问题,为什么要使用 Swift 等。 + +### 🚧 [Swift TO](https://www.swiftconf.to/) +[@zvving](https://github.com/zvving):Swift TO,一个源自加拿大的 iOS 社区组织,尽管面临严峻的运营挑战并[即将结束运营](https://www.swiftconf.to/swift-to-is-closing-down/),但依旧保持开放性,将最近的技术分享视频公开,欢迎感兴趣的朋友通过视频参与交流学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 百度网盘 - 基础架构/业务 - iOS/Android/FE + +[上海/杭州/北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#262-2023.09.25.md b/Reports/2023/#262-2023.09.25.md new file mode 100644 index 000000000..01f50fbf2 --- /dev/null +++ b/Reports/2023/#262-2023.09.25.md @@ -0,0 +1,132 @@ +# 老司机 iOS 周报 #262 | 2023-09-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/262.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [WebP 堆缓冲区溢出 安全漏洞](https://github.com/advisories/GHSA-j7hp-h8jx-5ppr) + +23 年 9 月 12 日 Libwebp 公布了一个高危漏洞 [CVE-2023-4863](https://nvd.nist.gov/vuln/detail/CVE-2023-4863),评级为 **Critical(8.8)** 。受影响方众多,包括 Chrome,Firefox 等浏览器;集成 libWebP 的客户端 APP,以及包括部分版本的 Electron、flutter 。列举部分受影响的组件: + +- webP(< [1.3.2](https://chromium.googlesource.com/webm/libwebp/+/refs/heads/1.3.2)),推荐直接升级至 1.3.2 +- Electron(< 26.2.2/25.8.2/24.8.3/22.3.24) +- flutter(< 3.13.4) + +由于漏洞已被公开,有被利用后攻击的风险(具体攻击方式不便展开),大家可以视项目情况进行升级。 + +## 文章 + +### 🐕 [iOS 点九图 NinePatch 解析](https://mp.weixin.qq.com/s/angyJag7AZntt2FLNCOuXw) + +[@Barney](~https://github.com/BarneyZhaoooo~):文章主要介绍了 iOS 点九图的应用实战。有原理介绍也有代码,是非常具体的实践,值得学习。 + +- 点九图制作生成。 +- PNG 文件格式介绍和代码实践。 + + +### 🐕 [开箱即用-移动网络 IPv6 浓度检测工具](https://juejin.cn/post/7278899547828224039) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文介绍了一款移动网络 IPv6 浓度的检测工具,旨在推动 IPv6 技术的广泛应用。本文详细说明了该工具的背景、使用方法,以及如何通过抓包和数据分析来评估移动应用的 IPv6 流量占比,进而指导网络改进工作。此外,本文还提供了其他诸如手机抓包、Safari 调试等检测方法,以帮助读者更好地理解和推广 IPv6 技术在移动网络中的应用。 + +### 🐎 [Shake to undo in a SwiftUI app](https://blog.thomasdurand.fr/story/2023-09-04-shake-to-undo-swiftui/) + +[@zoeGuo](https://github.com/zoeGuo):这篇文章介绍了如何在 SwiftUI 应用中实现"摇一摇撤销"的功能。作者从怎么在 SwiftUI 中使用 UndoManager ,到具体如何在 SwiftUI 中实现"摇一摇"手势,给予用户适当的提示保证数据不会被误操作丢失,以及监听 undo 操作的发生来正确处理逻辑,提供了使用 SwiftUI 实现"摇一摇撤销"功能的详细步骤和思路。作者最后展示了将所有这些逻辑和 UI 实现封装至一个可重用的修饰符中,整个功能的使用代码变得极其简洁。 + +### 🐢 [How to build an iOS Live Activity](https://medium.com/kinandcartacreated/how-to-build-ios-live-activity-d1b2f238819e) + +[@anotheren](https://github.com/anotheren):这是一篇新手向的文章,从创建、UI 展示、数据更新等各方面给出了如何构建你的第一个“ Live Activity ”(实时活动) 的全流程指导,是时候将实时活动加入你的应用了。 + +### 🐕 [Swift Macro: Revisited - The Strengths and Essence](https://wezzard.com/post/2023/08/swift-macro-revisited-the-strengths-and-essence-a5a4) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章详细探讨了 Swift 宏的优势和本质。 + +- 通过在编译时转换程序员的代码来生成代码。具备类型检查和语法树检查能力,能够限定宏的使用场景,还可以明确宏接受的参数类型。 +- 对于独立宏,它们可以影响使用处的控制流并共享词法范围。 +- 对于附加宏,它们可以将现有成员变量,转换成另一种形式来扩展该类型,并通过添加访问器来重写属性。扩展内容不仅带来新的行为,而且共享扩展点的”命名空间”。还值得注意的是,向存储属性添加访问器也会将其语义从存储属性更改为计算属性。 + +相比 Swift 中现有的代码重用方法,Swift Macro 通过拥抱不同的设计理念,提高了语言的代码可重用性。 + +### 🐕 [Swift Macro: Revisited - Traps and Pitfalls](https://wezzard.com/post/2023/08/swift-macro-revisited-traps-and-pitfalls-1034) + +[@邦Ben](https://weibo.com/linwenbang): + +该文章对 Swift 宏使用过程中会出现的一些陷阱问题进行了示例说明,例如: +- 宏里面如果包含了 return,在 for 循环里用,展开会直接 return 而不是继续执行 +- 定义命名冲突,其他框架的 propertyWrapper 导致的冲突,或者是 lazy 都会冲突,重复访问等 +- 语义冲突 + +解决方案文中也给了建议: +- 宏名字清晰,如果不允许在某个场景使用的话,可以写清楚 +- 将宏扩展放在闭包内进行保护 +- 引用其他库的时候尽量保证命名唯一 +- 宏内部不进行定义变量 +- 提供重命名的方法 +- 提供 ignore 方法 +- 提供对应的使用说明文档 + +展开后的问题和你在 OC 中用到宏也是会遇到类似的场景,大规模以及复杂场景使用的时候,尤其需要注意这类异常 case + +### 🐎 [iPhone 15 Screen Sizes](https://useyourloaf.com/blog/iphone-15-screen-sizes/) + +[@ChenghzhiHuang](https://github.com/ChenghzhiHuang):本文总结了 iPhone 15 系列的屏幕信息,包括 StatusBarHeight、SafeArea、屏幕分辨率等。需要适配的同学可以自行翻阅。 + +## 工具 + +### 🐎 [Flutter 最优秀动画库「完全商业化」,Rive 2 你全面了解过吗?](https://juejin.cn/post/7275155682051145787) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Rive 动画在 Flutter 领域类似于 Lottie 在 iOS 和 Android 上的地位,同样提供了在线编辑器;当然了,Rive 也是支持全平台的,本文带你详细入手 Rive 动画,从制作到代码联动。 + +## 代码 + +### 🐎 [ExampleKit](https://github.com/toph42/ExampleKit) + +[@Cooper Chen](https://github.com/cjlcooper):这个开源工程提供了在 Swift Playgrounds 中创建自己的库并进行发布管理,其中详细介绍了如何创建模板、源控制等操作,这对于需要进行相同代码不同平台开发的开发者来说是一个实用的工具。 + +### 🐎 [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing) + +[@J_Knight_](https://github.com/knightsj):提供了一个开源的用于 Swift 开发的快照测试(Snapshot Testing)框架。除了支持对 UIView 进行快照以外, 还支持其他数据类型以及在不同设备型号上的快照。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 百度网盘 - 基础架构 / 业务 - iOS/Android/FE + +[上海 / 杭州 / 北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#263-2023.10.16.md b/Reports/2023/#263-2023.10.16.md new file mode 100644 index 000000000..7ff6a0c67 --- /dev/null +++ b/Reports/2023/#263-2023.10.16.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #263 | 2023-10-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/263.png?raw=true) + +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [ICP 备案上线](https://developer.apple.com/cn/help/app-store-connect/reference/app-information/) + +国庆节前夕,苹果审核商店也正式上线了 ICP 备案。目前新 APP 需要填写备案号才能提交审核;老 APP 目前不填备案号也能正常提审(预计是明年 4 月强制执行)。 + +> 中国工业和信息化部(MIIT)要求 App 必须具备有效的互联网信息服务提供者(ICP)备案号。此外,游戏 App 必须取得网络游戏出版物号。图书和报刊杂志 App 必须持有中国国家新闻出版署(NPPA)颁发的《网络出版服务许可证》。包含宗教内容的 App 必须持有中国国家宗教事务局(NRAA)颁发的《互联网宗教信息服务许可证》。新闻 App 必须持有中国国家互联网信息办公室(CAC)颁发的《互联网新闻信息服务许可证》。如果你已经或计划在中国大陆的 App Store 中提供上述类型的 App,则必须提供相关信息和证明文件。 + +### [Xcode 15.1 Beta Release Note](https://developer.apple.com/documentation/xcode-release-notes/xcode-15_1-release-notes) + +Xcode 15.1 Beta 版本发布,除了常规的新 SDK 发布,这次一条相对重要的信息是,从 15.1 开始,X86/64 的 芯片组(也就是 Intel CPU)不再能够开发 VisionOS ,必须使用 silicon 系列芯片组(俗称 M 系列),15.0 的时候还是支持 X86/64 的,此次放弃 X86/64 令人担忧苹果后续对老机型的支持。 + +## 文章 + +### 🐕 [Migrating Ice Cubes to the SwiftUI Observation framework](https://dimillian.medium.com/migrating-ice-cubes-to-the-swiftui-observation-framework-821f90deebee) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了作者将他的开源 Mastodon 客户端 Ice Cubes 迁移到了新的 Observation framework 的过程。作者分享了一些关键点: + +- 迁移并不复杂,作者只花了几个小时就完成了。 +- 迁移修复了一些 bug,并不会引入新的问题。 +- 性能改进明显,值得投入。 + +作者认为 Observation framework 是 SwiftUI 的一项重大改进,它简单易用,并且消除了以前数据流中的许多令人头疼的问题 + +### 🐕 [Dismiss keyboard when return is pressed in a multiline SwiftUI TextField](https://danielsaidi.com/blog/2023/09/15/dismiss-keyboard-when-return-is-pressed-in-a-multiline-swiftui-textfield) + +[@Smallfly](https://github.com/iostalks):这篇文章主要介绍了在 SwiftUI 中如何实现多行文本框的回车键提交和键盘自动收起功能。作者使用 `FocusState` 和 `onChange` 修饰符来监听文本变化,实现了多行文本框的提交和键盘自动收起功能,并将其封装为了一个可重用的自定义 view modifier。如果你正在开发 SwiftUI 应用,并且遇到了类似的问题,这篇文章可能会对你有所帮助。 + +### 🐕 [Interoperability: Swift ’ s Super Power](https://browsercompany.substack.com/cp/137231709) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 作为现代的语言,在设计选择上使其展示了灵活性和兼容性且不需要以可用性为代价的特性,而使 Swift 专注于与其他语言的本地互操作性,成为 Swift 构建丰富的本地应用的一个重要目标。同时 Swift 的互操作性工具库使其成为在现有平台上构建丰富的本地应用程序和库的有力语言,并以其改进的内存安全性和强大的易用性为 C 和 C++ 提供了一个很好的替代方案。本文介绍了在 Swift 中使用 C++ Interop 和 C Interop 在 Windows 平台支持 COM 模式,同时也改进了 COM 对于 Swift 的支持,通过在 Windows 平台以及对 Swift 互操作性方法的探索,为开发者提供了一个良好的基础,让我们了解 Swift 的互操作性工具如何允许我们构建可以访问平台 API 的跨平台应用程序。 + +### 🐢 [深入理解 iOS Jetsam 机制,助力提升 Flotsam 召回率](https://mp.weixin.qq.com/s/vUMmQvZ1I91fhf8kFXY_mA) + +[@xuyafei86](https://github.com/xiaofei86):本文将深入介绍 iOS 系统中的 Jetsam 机制,探讨其原理和作用。Jetsam 机制负责在内存不足时终止进程以释放内存资源,了解 Jetsam 的工作原理和相关策略,可以帮助开发者优化应用程序的内存使用,提高 Flotsam 召回率。 +Flotsam 是快手定义的指标,是指 iOS 上未被监控捕获到的前台异常退出,包括但不限于由于内存溢出引起的退出。与 Jetsam 不同,Flotsam 更多地关注那些零碎、尚未明确归因的异常退出。了解 Jetsam 的工作原理和相关策略,对开发者来说,不仅有助于优化应用内存使用,还能显著提高 Flotsam 召回率,进一步提升应用的稳定性和用户体验。 + +### 🐎 [Swift 中闭包底层原理探索](https://juejin.cn/post/6935797942435446791) + +[@J_Knight_](https://github.com/knightsj):本文作者使用代码实例并利用导出的 SIL 和 LLVM 文件内的代码(附上了详细的代码注释)详细介绍了在 Swift 中闭包捕获单个值和多个值的原理。 + +### 🐢 [The Absolute Minimum Every Software Developer Must Know About Unicode in 2023](https://tonsky.me/blog/unicode/) + +[@水水](https://www.xuyanlan.com/):本文介绍了作者认为 2023 年每个软件开发人员需要知道的关于 Unicode 的一些基本知识点如下 +- 什么是 Unicode +- Unicode 有多大 +- Unicode 目前分配情况 +- Unicode 作为私人用途的有哪些 +- UTF-8 是什么 +- 为什么显示 �、Emoji 长度是怎么计算的 + +...... 等一系列的问题进行了整理和解释 ~ + +## 代码 + +### 🐕 [@Model for CoreData](https://www.alwaysrightinstitute.com//managedmodels/) + +[@极速男孩](https://github.com/ztlyyznf001):Apple 在 2023 年 WWDC 上发布了 Swift 数据持久化框架 SwiftData。本文主要介绍了 ManagedModels 这个库,他为 CoreData 提供类似 SwiftData 的 API ,但不需 iOS 17+ 版本。主要区别包括:ManagedModels 中的类需明确从 NSManagedObject 继承,使用 @FetchRequest 而非 SwiftData 的 @Query 。文章提供了使用 ManagedModels 的代码示例,以及两个示例程序。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海 / 北京] 西瓜视频 - iOS + +[北京] 百度网盘 - 基础架构 / 业务 - iOS/Android/FE + +[上海 / 杭州 / 北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#264-2023.10.23.md b/Reports/2023/#264-2023.10.23.md new file mode 100644 index 000000000..358d30ed7 --- /dev/null +++ b/Reports/2023/#264-2023.10.23.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #264 | 2023-10-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/264.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [云音乐如何「搭」出新首页](https://mp.weixin.qq.com/s/rZzpXrU3T_0gbKhpM0M4dA) + +[@JonyFang](https://github.com/JonyFang):本文介绍了云音乐如何通过可视化搭建系统支撑新版首页这样的核心场景,提出一套基于性能、动态化和精细化运营角度的解决方案。文章还探讨了动态化能力的重要性、各种动态化方案的能力和性能表现、针对不同业务诉求做出合适选择的必要性。 + +### 🌟 🐕 [【iOS】一段防护代码引发的内存风暴](https://mp.weixin.qq.com/s/zgwciJibBxyrA_wT2-w3QQ) + +[@Cooper Chen](https://github.com/cjlcooper):本文详细描述了腾讯音乐在一次防护代码导致的 OOM 问题上进行排查的过程,不仅详细解释了内存分析问题从基建到详细手段的步骤,也从另一个侧面说明了 Runloop 和 Autoreleasepool 的关系。值得一提的是,这个 OOM 问题的原因是 CF 不同版本在 __CFRunLoopDoObservers 里面遍历 observer 的实现方式不同导致,采用数组方式的高版本系统会出现上述的 OOM 问题,这对于安全气垫相关需求开发同学有着极高的参考价值。 + +### 🌟 🐢 [Swift Parameter Packs](https://paul-samuels.com/blog/2023/09/29/swift-parameter-packs/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.9 已经发布,除了广为人知的 `Macros`,还有一项比较少人提到的是 `Parameter Packs`,本文介绍了 `Parameter Packs` 的三种使用场景,如想更深入的理解 Swift 5.9 的更新,建议阅读另一篇:[What’s new in Swift 5.9?](https://www.hackingwithswift.com/articles/258/whats-new-in-swift-5-9) + +### 🐕 [Xcode 15以下版本调试 iOS 17 设备](https://developer.apple.com/forums/thread/730947?answerId=758061022#758061022) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是在 Apple 开发论坛上讨论的,关于无法使用 Xcode 14.x 版本调试 iOS 17 设备的问题。最终找到一个行之有效的可行路径。先在终端中运行 `defaults write com.apple.dt.Xcode DVTEnableCoreDevice enabled`,然后重新启动 Xcode 14.x,iOS 17 设备将显示在 Xcode 中,进而可以像往常一样运行和调试应用程序。 + +### 🐎 [Changes to URL string parsing in iOS 17](https://augmentedcode.io/2023/10/02/changes-to-url-string-parsing-in-ios-17/) + +[@Damien](https://github.com/ZengyiMa):在 iOS 17 系统中,URL 类中的 init(string:) 方法的行为和 URLComponents 的解析 URL 方法进行了对齐,使其解析行为发生了变化,新版本将会产生对无效字符进行编码,然而这一行为在 iOS 17 以下是不存在的,如果大家对 URL 类中产生的结果较为敏感,建议确认一下变化是否对当前的 App 是否有预期之外的影响。 + +### 🐎 [A New Approach to Testing in Swift](https://forums.swift.org/t/a-new-approach-to-testing-in-swift/67425) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队于近日发布了 swift-testing 预览版,旨在替代 XCTest 成为新的官方测试框架,将 Swift 的特性以及这些年测试框架的发展应用到这个新的库里。 + +XCTest 作为 Apple 平台的测试框架,最早在 1998 年编写并且大量使用 Objective-C 的动态特性,包括动态消息传递,NSInvocation 和 Objective-C Runtime 等。 + +当 Swift 诞生时,也顺理成章地继续沿用 XCTest,对 XCTest 进行了一系列拓展以便支持 Swift,但这始终是一个 1998 年编写的框架,并且与 Objective-C 重度耦合,很多功能与 Swift 天生冲突,所以需要一个全新的框架作为继任者。 + + +### 🐎 [直播流⻚⾯内存优化⽅案](https://mp.weixin.qq.com/s/RzOpU_50WIZjUUNuKOBShA) + +[@JonyFang](https://github.com/JonyFang):上下滑过程中高清直播背景图带来的内存问题相关优化,有类似诉求,解决方案可做参考。 + +### 🐎 [Android 和 iOS 渲染架构差异对比,孰胜孰负?](https://mp.weixin.qq.com/s/5s11skxtI5FHVTa3ZuqQ7g) + +[@Crazy](https://github.com/jiyan135960):本文是一篇科普类文章,主要对比了 Android 与 iOS 两个系统在绘制原理上的区别。文章开篇先简单的讲解了 SurfaceFlinger 和 backboard 的区别,通过对比两种渲染方法后引出 OpenGL 与 Metal 和 Vulkan 的区别,并简单的介绍了关于 OpenGL 的实现与缺点。文章的内容相对简单,没有很多的实现逻辑与长篇大论的代码,只是让大家简单的了解下双端绘制逻辑上的不同。 + +## 代码 + +### 🐕 [SwiftUIViewDebug](https://github.com/Kyle-Ye/SwiftUIViewDebug#swiftuiviewdebug) + +[@老峰](https://github.com/gesantung):SwiftUIViewDebug 是 SwiftUI 调试工具库,可以使将调试信息编码为 Swift.Data,然后转换为 Swift.String,最后以可读的 JSON 格式来展示视图信息。 + +### [swift-macro-testing](https://github.com/pointfreeco/swift-macro-testing) + +[@kemchenj](https://kemchenj.github.io/):由 PointFree 开发的一款 macro 测试库,对比 SwiftSyntax 提供的测试函数提供了更多功能,例如更丰富的诊断信息,自动填充测试用例的 fix-it 等等,对于 macro 的编写和测试都有非常大的帮助。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#265-2023.10.30.md b/Reports/2023/#265-2023.10.30.md new file mode 100644 index 000000000..5b71de145 --- /dev/null +++ b/Reports/2023/#265-2023.10.30.md @@ -0,0 +1,72 @@ +# 老司机 iOS 周报 #265 | 2023-10-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/265.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS & iPadOS 17.2 Beta & Xcode 15.1 Beta 2 Release](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17_2-release-notes) + +上周苹果发布了 [iOS & iPadOS 17.2](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17_2-release-notes) 、[watchOS 10.2](https://developer.apple.com/documentation/watchos-release-notes/watchos-10_2-release-notes) 、[Xcode 15.1](https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-15_1-release-notes) 等系列 Beta 版本的更新。较为重要的信息如下: + +- SwiftUI 新增了 API ``_logChanges()`` 方便开发者在 Debug 下打印 SwiftUI 的变更。与 ``_printChanges()`` 区别仅在于 ``_logChanges()`` 会将日志也打印到系统控制台中。此 API 对所有 iOS/iPadOS/watchOS 等都有效。 + +- 对使用 Xcode 15.0 构建包含 swift 代码的 App 会较老的 MAC 版本 (10.13) 启动时崩溃,workaround 方案是添加 ``$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/macosx/libswiftAppKit.dylib`` 到 Other Linker Flags 中,此问题在 15.1 Beta 中已修复。详见:[swift/issues/68163](https://github.com/apple/swift/issues/68163)。 + +## 文章 + +### 🐎 [Bad practice: not using Phantom Types](https://www.swiftwithvincent.com/blog/bad-practice-not-using-phantom-types) + +[@Damien](https://github.com/ZengyiMa):这篇文章讨论了在 Swift 编程中使用虚类型(Phantom Types)引发的错误。作者首先构造了 2 个示例对象,使用虚函数并且导致了错误的行为。随后提出了改进的方案,从而避免了错误的代码行为,想了解 Swift 虚函数感兴趣的同学不妨一读。 + +### 🐎 [Designing for spatial computing: from iOS and iPadOS to visionOS](https://www.createwithswift.com/designing-for-visionos-shifting-from-ios-and-ipados/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了苹果的 visionOS 以及它在空间计算领域的重要性。文章强调了设计师和开发人员需要了解空间设计的基本原则,以及如何将应用程序从 iOS/iPadOS 平稳地过渡到 visionOS。文章还介绍了 visionOS 应用程序的核心结构,包括窗口、体积、标签栏、侧边栏、装饰、菜单和弹出窗口、以及模态视图。最后,文章强调在从 iOS/iPadOS 过渡到 visionOS 时,需要考虑应用程序的核心功能,并将其适应空间计算范式,而不仅仅是简单地将应用程序移植到新平台。 + +### 🐎 [Being a good citizen in the land of SwiftSyntax](https://www.pointfree.co/blog/posts/116-being-a-good-citizen-in-the-land-of-swiftsyntax) + +[@zvving](https://github.com/zvving):作者使用 SwiftSyntax 依赖管理的实例,详细解释了如何制定更加灵活的主版本依赖声明,从而规避由与第三方库的依赖关系引起的冲突。同时,他建议通过将核心库和可选库分拆,来防止不必要的编译开销。这些思路为 Swift 库的开发者提供了有益的参考。 + +### 🐎 [Apple ’ s use of Swift and SwiftUI in iOS 17](https://blog.timac.org/2023/1019-state-of-swift-and-swiftui-ios17/) + +[@JonyFang](https://github.com/JonyFang):通过 iOS 内置应用程序使用的编程语言,分析到 iOS17 的版本过程中 Swift、SwiftUI 的覆盖比例。通过分析结果可以看到:Objective-C 仍然是 iOS 的核心,并被大多数应用程序直接或间接使用。Swift 和 SwiftUI 的采用持续增长,而 Objective-C、C 和 C++ 的份额逐渐减少。 + +### 🐎 [The Care and Feeding of Developer ID](https://developer.apple.com/forums/thread/732320) + +[@水水](https://www.xuyanlan.com/):这个链接集中记录了对于开发者 ID 签名身份方面会遇到的问题,以及一些注意事项和 Tips。这里还介绍了如何备份你的私钥以及如果你没有独立备份你的开发者 ID 签名身份,如何从 Mac 的常规备份中恢复它。读者可以收藏此链接,可以作为后续关于签名方面的问题参考 ~ + +## 工具 + +### 🐎 [Apparency - The App That Opens Apps](https://www.mothersruin.com/software/Apparency/) + +[@J_Knight_](https://github.com/knightsj):介绍了一个可以查看 Mac 应用信息的 Mac 应用:Apparency。具体可以查看的信息是:使用的 framework,Info.plist,macOS version info,identifiers,document types 和 URLs 等等信息。 + +## 音视频 + +### [Matthew Massicotte - The Bleeding Edge of Swift Concurrency](https://www.youtube.com/watch?v=HqjqwW12wpw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个探讨 Swift 并发编程主题的视频,并发编程是一个涉及异步操作和并行处理的领域。该视频将介绍 Swift 中的 async/await 机制和 actor 模型,并讨论如何避免在引入这些机制时可能出现的竞争条件和死锁等陷阱。它的目标是帮助观众了解如何在编写并发代码时避免常见的陷阱和错误,从而编写出更可靠、高效的代码。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#266-2023.11.06.md b/Reports/2023/#266-2023.11.06.md new file mode 100644 index 000000000..719d85571 --- /dev/null +++ b/Reports/2023/#266-2023.11.06.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #266 | 2023-11-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/266.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [2023 年每个软件开发者都必须知道的关于 Unicode 的最基本的知识(仍然不准找借口!)](https://blog.xinshijiededa.men/unicode/) + +[@xuyafei86](https://github.com/xiaofei86):本文使用风趣幽默的语言和生动的配图介绍了字符串编码的发展和 Unicode / UTF-8 的 “基本知识”,可以帮助读者更深入的理解 Swift 中字符串的设计。感兴趣的同学可以阅读原文了解。 + +## 文章 + +### 🐕 [视频号直播:如何进一步降低功耗占用?](https://mp.weixin.qq.com/s/LKoGJylYfyk8iTXlvoW0gA) + +[@莲叔](https://github.com/aaaron7):这篇文章从一个简单的问题出发:同样的直播间,在有点赞动画时的帧率和 gpu 占用显著高于无动画时,一步步讲解了 iOS 系统渲染的原理以及推导了问题的原因,给出了解决办法(通过 iOS 15 提供的新的 CAAnimation 的 API)。之后进一步分析了系统方案的原理,并且给出了将动画帧率控制从 CAAnimation 动画扩展到 UIView block 动画以及 UIScrollView 动画中,实现整体更稳定的帧率,方案很完整。另外,解决问题是一方面,文章更有价值的点还是对于 ios 的渲染原理做了比较详实的描述,推荐大家阅读。 + +### 🐕 [深入理解 MachO 结构与运行时系统](https://joey520.github.io/2020/01/30/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3MachO%E7%BB%93%E6%9E%84/%23%E5%89%8D%E8%A8%80) + +[@Barney](https://github.com/BarneyZhaoooo):本篇文章详细介绍了 MachO 的结构。前半段主要是结构分析,后半段着重描述 OC 相关数据。理解这些有助于日常写出更高性能的代码,可以反复仔细阅读。 + +1. **LINK EDIT、符号表、Fishhook 原理介绍。** +2. **OC 相关数据的详细介绍** +3. **探究这些的意义** + +### 🐎 [Switching Build Systems, Seamlessly](https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/) + +[@Smallfly](https://github.com/iostalks):本文主要分享了 Spotify 团队无缝切换构建系统到 Bazel 的过程。随着移动应用程序的规模越来越大,他们的代码库年均增长率超过 30 %,开发者的幸福感和生产力显著下降。通过迁移到 Bazel,一个超大工程原本使用 Xcode 构建耗时超过 45 分钟,迁移后时间缩短到少于 10 分钟。这个过程经历多套构建系统并存以及层层的验证,最后实现能完全由 Bazel 构建 iOS 客户端。 + +### 🐢 [How async/await works internally in Swift](https://swiftrocks.com/how-async-await-works-internally-in-swift) + +[@EyreFree](https://github.com/EyreFree):文章主要探讨了 Swift 中 async/await 的内部工作机制。开头解释了 Swift 的内存安全目标,及并发问题如何影响这个目标。随后,文章深入探讨了 GCD 如何处理并发,以及它的局限性。文章强调了 Swift 引入 async/await 的重要性,例如用以改善并发管理,减少未定义行为等。最后,概述了 async/await 的历史,以及如何利用它来简化并发代码的编写,推荐阅读。 + +### 🐢 [Working With UIViewRepresentable](https://chris.eidhof.nl/post/view-representable/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章中,他探讨了在 SwiftUI 中使用 UIViewRepresentable ,NSViewRepresentable 或 UIViewControllerRepresentable 来实现 SwiftUI 和 UIKit/AppKit 之间状态通信的几个挑战和解决方案。主要点包括: +1. 根据 SwiftUI 状态变化更新 UIView 时,只更改必要的 UIView 属性。 +2. 对于 UIKit 变化影响的 SwiftUI 更新,应异步执行以避免运行时警告。 +3. 通过创建一个 MapView 包装器和一个 NSTextView 包装器为例,解释了如何在更新方法中仅在必要时更新视图,以及如何缓存并比较值以避免不必要的更新。 +4. 如何通过修改绑定或调用闭包来从 NSView 向 SwiftUI 通信事件。 + +### 🐕 [Fatbobman ’ s Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-001) + +[@老驴](https://weibo.com/u/6090610445):Fatbobman 在结束了 100 期的摸鱼周报之后新开了个新坑,叫 Fatbobman ’ s Swift Weekly,目前已经出到了第三期。Fatbobman 的周报和老司机的周报比较类似,会推荐一些 Swift,iOS 开发的相关内容,但是提供了双语内容。有兴趣的话可以关注或者订阅一波。 + +### 🐕 [记一个诡异的 TCP 挥手乱序问题](https://mp.weixin.qq.com/s/vX0C-AmJ_tIddWbsWeizJA) + +[@Crazy](https://github.com/jiyan135960):本文是一篇网络底层的讲解文章,内容有一定深度,并且给大家提供了很多解决这种疑难问题的思路。作者从一个挥手乱序问题开始,告知了大家问题出现的原因:四次挥手中,由于 fin 包和 ack 包乱序,导致等了一次 timeout 才关闭连接。之后又从这个结果开始介绍解决问题的思路与过程,其中包括问题复现试验,内部源码分析,修改内核配合测试,最后确认问题位置。本文最后更是讲解了 close() 下的 tcp 状态转移问题。本篇文章涉及了许多 TCP 的源码与底层知识,读起来会偏久,重要的是学会作者处理这种疑难问题的思路与方法。 + +## 音视频 + +### 🐕 [Swift Connection 2023 - Hidde van der Ploeg - How to Make Your App Look Like You've Hired a Designer](https://www.youtube.com/watch?v=tlk9BRvIbq4) + +[@Cooper Chen](https://github.com/cjlcooper):这个视频是 Swift Connection 2023 关于普通开发者如何在没有设计师的情况下,遵循一些设计规范来保证 App 的设计感,其中包含以下几点: +- 定义明确品牌(Define a clear brand) +- 设计是一种感觉(Design is how it feeling) +- 保证设计的一致性(Consistence) +- 保证用户的关注点(Keep focus) +- 使用层次结构(hierarchical) +- 给 UI 保留空隙(Give sapce to breath) + +这个视频对于独立开发有着很好的参考价值,能帮助开发者更好的设计自己的 UI 界面。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#267-2023.11.13.md b/Reports/2023/#267-2023.11.13.md new file mode 100644 index 000000000..a8fe2356d --- /dev/null +++ b/Reports/2023/#267-2023.11.13.md @@ -0,0 +1,89 @@ +# 老司机 iOS 周报 #267 | 2023-11-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/267.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 挑战赛](https://developer.apple.com/events/view/98ZM6WUVR4/dashboard) + +挑战赛地点在上海,分为两场,分别是 11 月 21、22 日,12 月 5、6 日,还没有亲自体验过 Vision Pro 的同学可以报名尝试参加,苹果会培训 空间计算 相关的知识。 + +## 文章 + +### 🐢 [深入浅出 MachO](https://evilpan.com/2020/09/06/macho-inside-out/#mach-o-101) + +[@JonyFang](https://github.com/JonyFang): 本文通过对 MachO 文件的文件格式研究,介绍了 MacOS 和 iOS 中可执行文件的加载过程,从内核中的处理一直到动态连接器 dyld 的代码分析。可以看出 MachO 与 ELF 相比实现方式各有优势,但是在内核中原生增加了对代码的签名和加密,其实 ELF 也很容易实现类似的功能,但开放系统需要更多考虑兼容性的问题,不像苹果可以大刀阔斧的改动。对于 MachO 的深入理解其实也有助于日常的相关优化,比如 Apple Store 的加密实现以及代码签名的大致原理,还有针对 dyld_cache 的处理等,其中每一项都值得去深入挖掘。 + +### 🐎 [Calculating a Smooth Clock Hands Animation](https://david-smith.org/blog/2023/11/06/design-notes-46/) + +[@Smallfly](https://github.com/iostalks):这篇文章分享了作者在 Widgetsmith 应用中解决时钟指针旋转角度计算问题的经历。开始是发现在 iOS17 下旋转动画问题,于是进行了多次调整,尝试通过考虑每天的开始角度和连续旋转的方案,不过依然存在问题。最终,作者采用了一种基于天数计算的方法,考虑了每天时钟指针的完整旋转次数,并通过测试验证了这一解决方案的有效性。作者提供了方案的 Demo,有相关需求的读者不妨一读。 + +### 🐕 [Bad practice: not using multiline strings](https://www.swiftwithvincent.com/blog/bad-practice-not-using-multiline-strings) + +[@Barney](https://github.com/BarneyZhaoooo):本次推荐是一篇博客,简单介绍了 Swift 对多行字符串的支持,尽量避免主动在字符串中加入 \ 使得代码越来越难以维护。文章浅显易懂还附带视频,一分钟时间就可以掌握一个小知识,值得一看。 + +### 🐕 [iOS Crash 治理:淘宝 VisionKitCore 问题修复](https://mp.weixin.qq.com/s/pmnrDbIeueGS_7Sck-83qQ) + +[@Cooper Chen](https://github.com/cjlcooper):本文详细介绍了手淘技术团队定位 iOS 16.0 ~ iOS 16.2 WKWebView 的系统 bug 的过程,文章详细介绍了如何通过堆栈特征分析、版本对比等方式进行问题原因分析,到最终提出了详细的解决方案,并进行线上验证的过程,其中涉及的 Crash 排查思路值得开发者学习和借鉴。 + +### 🐕 [iOS libMalloc 源码分析](https://juejin.cn/post/7290817530415775804) + +[@老峰](https://github.com/GesanTung):libMalloc 作为内存分配器,研究相关机制,对于理解操作系统内存管理有较大价值。本文作者针对 iOS 底层堆内存分配器 libMalloc 的开源版本(libmalloc-409.40.6)结合源码分析了 NanoZone、ScalableZone(tiny、small、medium、large )不同的内存机制。 + +### 🐕 [Progress toward the Swift 6 language mode](https://forums.swift.org/t/progress-toward-the-swift-6-language-mode/68315) + +[@AidenRao](https://weibo.com/AidenRao):该文章介绍了 Swift 6 的发展和计划,目前的重点在于默认情况下避免数据竞争。[逐步采用即将到来的语言](https://github.com/apple/swift-evolution/blob/main/proposals/0362-piecemeal-future-features.md) 对于迁移到 Swift 6 至关重要:可以一次启用一项即将推出的功能,以逐步将代码库迁移到 Swift 6。 + +### 🐎 [Things I wish someone would have told me about configuring VSCode](https://www.bryanbraun.com/2023/08/10/things-i-wish-someone-would-have-told-me-about-configuring-vscode/) + +[@anotheren](https://github.com/anotheren):本文介绍了一些 VSCode 设置的小技巧,包括: +* 使用 `.gitignore_global` 来全局忽略 `.vscode` 文件夹; +* 工作区级别的插件设置; +* 内建终端的使用; + +推荐使用 VSCode 的同学一看。 + +### 🐎 [Hierarchical background styles in SwiftUI](https://nilcoalescing.com/blog/HierarchicalBackgroundStyles/) + +[@Damien](https://github.com/ZengyiMa):本文内容主要讲述了如何在 SwiftUI 中获取和使用系统背景颜色。在 iOS 17 之前,我们通常需要从 UIColor 转换来获取这些颜色。但从 iOS 17 开始,可以直接通过 ShapeStyle 的实例来获取,例如 secondary,tertiary 等属性。这些背景颜色取决于当前的操作系统和颜色方案(启用了浅色或深色模式)。 + +### 🐎 [Why Curiosity Is Better Than Being Smart?](https://durmonski.com/life-advice/curiosity-is-better-than-being-smart/) + +[@水水](https://www.xuyanlan.com/):为什么好奇心比聪明更重要?这篇文章作者从自己出发来告诉读者为什么好奇心很重要,聪明人的思维过程是怎样的、好奇心为什么可以让人变聪明甚至可以变的更聪明、以及如何提高好奇心。好奇的读者可以看看本文哦 ~ + +## 开源库 + +### 🌟 [Grape](https://github.com/li3zhen1/Grape) + +[@Leo](https://github.com/leomobiledeveloper):一款 swift 编写的支持力模拟和可视化绘制的开源库,兼容 iOS/macOS/vision OS/watch OS. 开发者可以直接利用可视化能力绘制 Force Directed Graph(力导向图),也可以用力模拟模块来自定义实现一些能力。 + +## 音视频 + +### [NSSpain XI (2023)](https://vimeo.com/showcase/10672108) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):NSSpain 是一个知名的 iOS 开发者会议,在 NSSpain XI (2023) 中,涵盖了包括应用程序设计、性能优化、新的开发工具、Swift 编程语言的最新进展以及与 Apple 生态系统相关的多个主题,这个会议为开发者提供了与同行建立联系和交流的绝佳机会。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#268-2023.11.20.md b/Reports/2023/#268-2023.11.20.md new file mode 100644 index 000000000..114012983 --- /dev/null +++ b/Reports/2023/#268-2023.11.20.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #268 | 2023-11-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/268.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### [Generating Random Numbers Elegantly in Swift ](https://www.swiftjectivec.com/swift-randomnumbergenerator/) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了在 Swift 中使用 RandomNumberGenerator 实现产生随机数的方式。写法优雅,可以产生自己任意范围的随机数,线程安全,还会根据 Swift 运行的平台来决定实现随机数的 api。 + +## 文章 + +### 🐎 [Reasoning about protocols](https://www.swiftindepth.com/articles/reasoning-about-protocols/) + +[@J_Knight_](https://github.com/knightsj):本文作者结合代码实例介绍了在 Swift 中面向协议编程的几个应用场景(动态派发,类泛型,编译期约束和实现合成)。 + +### 🐕 [在 Airbnb 爱彼迎解锁 SwiftUI](https://mp.weixin.qq.com/s/AokW7NZvjBT76iaRnEnsOA) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了 Airbnb 在 iOS 应用中采用 SwiftUI 替代原有的 UI 框架 Epoxy 的实践。 也解释了为什么他们决定在 Airbnb 中使用 SwiftUI,并详细介绍了如何将 SwiftUI 集成到 Airbnb 的界面设计中。一个很好的实践,可以作为大家引入 SwiftUI 的参考。 + +### 🐕 [The complete guide to iOS & macOS development in Neovim](https://wojciechkulik.pl/ios/the-complete-guide-to-ios-macos-development-in-neovim) + +[@Smallfly](https://github.com/iostalks):使用 Xcode 开发大型项目的体验一言难尽,这篇文章手把手教你如何在 Neovim 搭建 iOS&macOS 开发环境。支持的功能主要有: +- 代码补全(Code Completion) +- 代码检查与格式化(Linting & Formatting) +- 构建、运行与测试(Build, Run & Test) +- 调试(Debugging) + +所有这些一起至少覆盖了 90% 以上的开发时间,还有少部分功能还是需要依赖 Xcode,例如性能跟踪、调试 UI、管理签名证书等。如果你是一名 vim 党,推荐一试。 + +### 🐎 [An early look at the future of testing with swift-testing](https://www.polpiella.dev/swift-testing/) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队在前一段时间推出了 swift-testing 的 beta 版本,旨在替代 XCTest,让开发者可以用更加现代化的语法编写测试。 + +这篇文章用一个简单的例子介绍了 swift-testing 的接入和用法,可以看到跟 XCTest 对比提供了更简洁的语法,更好的 async 支持以及更加清晰的诊断信息。 + +### [百度 APP iOS 端包体积 50M 优化实践(七)编译器优化](https://mp.weixin.qq.com/s/fmiccOgRx9_wopX9QmZiEA) + +[@JonyFang](https://github.com/JonyFang): 本文介绍了百度 APP iOS 端包体积优化的编译器优化方案。涉及到的点有:GCC 语言编译优化、Swift 编译优化、LTO 优化、剥离调试符号、剥离符号表、剔除未引用代码、Asset 优化、C++ 虚函数优化、三方 SDK 编译器方向瘦身、指令集架构优化、Xcode 升级优化、Swift 内置动态库优化等。 + +## 工具 + +### [SwiftBar](https://github.com/swiftbar/SwiftBar) + +[@xuyafei86](https://github.com/xiaofei86):SwiftBar 是一款使用 Swift 编写,用来在 MacOS 菜单栏上展示自定义功能的开源工具。可以使用 Homebrew 安装,只需编写一个 Shell 脚本并将其添加到 SwiftBar 即可使用。你还可以从其插件仓库安装别人编写的脚本,比如展示 CPU 和内存占用、处理文本等。 + +## 设计 + +### 🐎 [Ensure Visual Accessibility: Glyphs, Icons and Shapes](https://www.createwithswift.com/ensure-visual-accessibility-glyphs-icons-and-symbols/) + +[@水水](https://www.xuyanlan.com/):了解如何正确使用应用程序 UI 上的视觉元素,同时保持其可访问性,包括字形、图标和形状,这些是传达信息、指导我们行动和塑造我们感知的基础。在苹果生态系统中鼓励正确的使用象形文字以及其组合来设计你的视觉元素,需要保证其具有清晰、一致性并且支持辅助功能标签。这篇文章还给了很多相关设计上的具体建议,感兴趣的可以参考。 + +## 音视频 + +### 🐢 [SwiftUI + Metal – Create special effects by building your own shaders](https://www.youtube.com/watch?v=EgzWwgRpUuw) + +[@Cooper Chen](https://github.com/cjlcooper):视频介绍了基于 SwiftUI + Metal 的形式,通过构建自己的着色器来创建特殊效果,包括如何重新着色、如何实现动画渐变、如何进行形状转换等内容,对于从 c++ 过渡到 SwiftUI 开发 Metal 相关内容的开发者有着很好的参考价值。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#269-2023.11.27.md b/Reports/2023/#269-2023.11.27.md new file mode 100644 index 000000000..74059fd51 --- /dev/null +++ b/Reports/2023/#269-2023.11.27.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #269 | 2023-11-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/269.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐢 [Flutter 3.16 + Dart 3.2 发布](https://mp.weixin.qq.com/s/vbkhjPNboqK1oDy_J5pzeA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 常规季度更新发布了,本次发布为 Flutter 3.16 + Dart 3.2; 一如既往,本次更新还是以稳定性和性能优化为主,其中值得关注的是 Android Impeller 和 Material 3 成为新的默认主题, 当然了在组件和工具链上也做出了不少改进和更新,感兴趣的同学可以在文中注意查看;[另一个值得关注的点是 Dart 3.2 发布,该版本在 Dart Web 和 Wasm 做了较多更新](https://mp.weixin.qq.com/s/UA5MQLzdf_ZPS56EdNLf2A),从这里可以看到 Flutter 团队对于浏览器端的努力一直在持续,可预见的是 Flutter 在浏览器端的未来可期 + +## 新手推荐 + +### 🐎 [Swift strings look identical but aren't](https://damian.fyi/swift/2023/11/13/swift-strings-look-identical-but-aren't.html) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了两个看起来相同的字符,因为当中包含一个 '\u{FEFF}' 字节顺序标记导致他们出现不相等的情况,作者用了 String 扩展和 'trimmingCharacters(in: .controlCharacters)' 的方式来移除这个标记。 + +## 文章 + +### 🌟 🐢 [What Every C Programmer Should Know About Undefined Behavior #1/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html) [#2/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html) [#3/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html) +[@Smallfly](https://github.com/iostalks):这是探讨 C 系语言未定义行为的系列文章。在系列的第一部分中,作者解释了 C 语言中的未定义行为,并展示了一些案例,说明了它使 C 语言比「安全」语言更具性能的原因。在第二部分,探讨了未定义行为导致的令人惊讶的错误,以及许多程序员对 C 语言存在的一些广泛误解。在最后一部分,探讨了编译器在提供陷阱警告时面临的挑战,并讨论 LLVM 和 Clang 提供的一些功能和工具,以实现性能提升的同时减少一些意外情况发生。 + +### 🐕 [Debugging SwiftUI views: what caused that change?](https://www.avanderlee.com/swiftui/debugging-swiftui-views/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了调试 SwiftUI 的关键技巧。使用 Self._printChanges 或 Self._logChanges 静态方法可以帮助我们找到引起重绘的根本原因。将视图单一化简单化往往是排查复杂问题的关键,文章分下面五个步骤娓娓道来。 + +- **What is a dynamic SwiftUI View?** +- **The problem of a Massive SwiftUI View** +- **Using LLDB to debug a change** +- **Solving redraw issues in SwiftUI** +- **Debugging changes using code** + +### 🐎 [Custom Traits and SwiftUI](https://useyourloaf.com/blog/custom-traits-and-swiftui/) + +[@Damien](https://zengyima.github.com/):本文主要讲述了在 iOS 17 中,开发者可以添加自定义 Traits 到 UIKit Traits 环境中,并与 SwiftUI 环境进行互操作。在 iOS 17 中,Traits 的处理方式发生了重大变化,Traits 现在可以从 UIScreen、UIWindowScene、UIViewController、UIView 等流向任何子视图控制器。此外,还介绍了如何创建一个自定义 Traits,并给出了一个实际的例子。 + +### 🐎 [Revealing and explaining package scores](https://blog.swiftpackageindex.com/posts/revealing-and-explaining-package-scores) + +[@EyreFree](https://github.com/EyreFree):这篇文章主要介绍了 Swift Package Index 中的一个新功能:Package 评分,并解释了这个分数是如何计算的。得分系统基于多个特征来评估软件包,包括:软件包是否被存档、是否拥有与 App Store 兼容的开源许可证、发布次数、Star 数量、依赖数量、最近活动、文档和贡献者数量、是否有测试代码和是否有 README 文档等,可以作为大家选择开源库的参考。 + +## 代码 + +### [MachOView](https://github.com/gdbinit/MachOView) +Mach-O 相信很多同学或多或少已经接触过或者有所了解,它是 Mach Object 文件格式的缩写,是 mac 以及 iOS 上的可执行文件。MachOView 这个工具可以快速查看 Math-O 格式的文件,简单易用,同时工具在今年迎来了 3.0 版本的大更新。对于经常需要分析静态库等文件的同学可以下载使用 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#270-2023.12.04.md b/Reports/2023/#270-2023.12.04.md new file mode 100644 index 000000000..ba40ec45f --- /dev/null +++ b/Reports/2023/#270-2023.12.04.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #270 | 2023-12-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/270.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 即将迎来圣诞审核高峰,各位开发者调整好提交时间 + +苹果预告将在 12 月 22~27 日 迎来圣诞假期,期间审核会相对变慢,根据惯例加急也会照常开放,有期间发版需求的同学需要早做安排。根据往年经验在 20 日提审大概率可以在高峰来临前通过审核。 + +## 文章 + +### 🐕 [建立个人学习观|地铁上的自习室](https://mp.weixin.qq.com/s/azyF-y5jPIy5trOpZFf0pA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/): 本文旨在帮助初入职场或陷入迷茫的读者建立个人学习观,强调在日常生活中保持学习心态,在不同空间和阶段中收获额外的东西,让学习成为一种习惯,丰富自己的知识和人生。 + +### 🐎 [Missing Xcode run test buttons](https://paul-samuels.com/blog/2023/10/24/missing-xcode-run-test-buttons/) + +[@Barney](https://github.com/BarneyZhaoooo):Xcode 运行测试按钮缺失恢复的小技巧、复制测试类名到导航器面版的过滤器中然后在该面板中点击播放按钮。 + +### 🐎 [Apple’s use of AppKit, Catalyst, Swift and SwiftUI in macOS Sonoma](https://blog.timac.org/2023/1128-state-of-appkit-catalyst-swift-swiftui-mac/) + +[@Smallfly](https://github.com/iostalks):这篇文章对 macOS 的开发组件和语言的演变提供了深入洞察,涉及了二进制数量、编程语言选择以及 UI 框架采用等方面。Sonoma 总共有 7884 个二进制文件,其中 Objective-C 仍然是核心语言,Swift 使用率不断增加。 + +SwiftUI 在 Sonoma 中得到显著应用,文章还观察到 Swift 在安全区域处理器中的使用,展示了 Swift 在受限环境中的适用性。总体而言,Swift 和 SwiftUI 的采用不断增长,而 Mac Catalyst 则呈下降趋势,标志着这项技术已进入过渡期。 + +### 🐕 [Observable Architecture Beta!](https://www.pointfree.co/blog/posts/125-observable-architecture-beta) + +[@zvving](https://github.com/zvving):Swift 5.9 引入的 `@Observable` 标志着数据驱动 UI 方式的重大转变。随着这种变化,The Composable Architecture(TCA) 项目推出了重要的升级——集成 Observable 并向后兼容至 iOS 13 的新版本。目前,TCA 项目在 GitHub 上的关注已度突破了一万星标。 + +值得指出的是,TCA 是一种有较高学习和应用成本,但同时又提供大量示例和教程的重量级框架。如果你对 TCA 感兴趣,可以通过[TCA - SwiftUI 的救星?系列文章](https://onevcat.com/2021/12/tca-1/)、[聊一聊可组装框架(TCA)](https://fatbobman.com/posts/the_Composable_Architecture/)或阅读[官方教程](https://pointfreeco.github.io/swift-composable-architecture/main/tutorials/meetcomposablearchitecture/)来深入了解。 + +### 🐎 [《产生式元编程》第三章 替换蓝染概念纤悉](https://mp.weixin.qq.com/s/V5LRUPhSCagSI5W3lj9hbw) + +[@J_Knight_](https://github.com/knightsj):本文作者结合代码介绍了宏被替换的过程:如果是有参数的宏。会先替换参数;如果是无参数的,则直接扫描。系统会将扫描一直循环进行下去,而扫描停止的条件是触发了蓝染。蓝染的概念是:一次扫描中,若是替换的 token 引用了其自身,该 token 就会被标记为不可处理状态。这个标记动作就称为 Painted blue。然后作者讲解了蓝染的触发机制,以及剖析了 C 预处理器不支持递归的原因。 + +### 🐎 [初探 SwiftUI Link](https://kyleye.top/posts/explore-swiftui-link/) + +[@kemchenj](https://kemchenj.github.io/):本文从 `Link` 在 watchOS 上无法成功打开链接开始探究,先是逆向出 `Link` 的实现,接着是私有 API `_openSensitiveURL` 的调用,`OpenSensitiveURLActionKey` 的实现细节,最终将研究的内容汇总得到最合理的解决方案。 + +### 🐎 [iPhone 加入游戏,但 USB-C 的乱纪元还没有完结](https://sspai.com/post/84508) + +[@老驴](https://weibo.com/u/6090610445):来自少数派的一篇科普向的文章,主要是给大家梳理下 USB-C ,Thunderbolt 和传输协议之间的各种交错复杂的关系。不过,即便你没有能完全搞懂也没关系,因为大多数情况下不影响基本的充电,而更多的是影响数据传输速度。 + +## 工具 + +### [devv.ai](https://devv.ai/) + +[@zoeGuo](https://github.com/zoeGuo):[devv.ai](https://devv.ai/) 自称“最懂程序员的新一代 AI 搜索引擎”。你可以用它来搜索某个技术名词,可以获得比较完善的技术摘要,还有引用原文。可以在上一问题上追加提问,因为接入了搜索引擎的数据,回答结果也都比较新,程序员可以试试用它学习一些新的概念。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#271-2023.12.11.md b/Reports/2023/#271-2023.12.11.md new file mode 100644 index 000000000..ce2b8d948 --- /dev/null +++ b/Reports/2023/#271-2023.12.11.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #271 | 2023-12-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/271.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [25 hours of Xcode Cloud now included with the Apple Developer Program](https://developer.apple.com/news/?id=ik9z4ll6) + +从 2024 年 1 月开始,每个付费开发者都将免费获得每月 25 小时的 Xcode Cloud 服务。使用 Xcode Cloud 服务可以方便得完成打包上传提审 TF 这一系列操作,对于独立开发者来说不用花费时间精力研究 AppStore Connect API 还是很有吸引力的。 + +## 新手推荐 + +### 🐎 [Play an animation in RealityKit](https://www.createwithswift.com/play-an-animation-in-realitykit) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇介绍使用 RealityKit 在 3D 模型上实现动画的入门级文章。文章简单介绍了 RealityKit 为 3D 模型提供的默认动画如何使用,以及自定义动画的几种方法:定义 transform 变量,通过 move 方法做动画;定义对象的起始位置,使用 FromToByAnimation 方法做动画; OrbitAnimation 可以使对象从指定点开始做平滑的圆周运动;BlendTreeAnimation 可以将多个动画合并执行。 + +### 🐕 [AsyncStream in the real world: wrapping an Apple Photos callback](https://damian.fyi/swift/2023/12/03/asyncstream-in-the-real-world-wrapping-an-apple-photos-callback.html) + +[@Barney](https://github.com/BarneyZhaoooo):本文以获取相册照片为例,具体讲述了如何使用 **AsyncStream** 优雅地包装相册获取回调。 + +- 普通写法展示 +- 进阶写法展示 +- 小问题解决 + +## 文章 + +### 🐢 [现代 CPU 技术发展](https://juejin.cn/post/7309061655094837283) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章深入探讨了现代 CPU 技术的多个方面。首先,它详细描述了提升 CPU 性能的各种方法,如增加晶体管数量、优化流水线微架构等。其次,文章强调了模块化设计在现代 CPU 设计中的重要性,以及如何通过组合基础指令集和扩展指令集来满足不同场景的需求。此外,文章也指出了功耗墙对 CPU 性能提升的限制,并探讨了未来可能通过新增 DSA 模块和使用 Chiplet 技术等方式来克服这些限制。在指令集架构方面,文章比较了不同指令集对 CPU 性能和能耗的影响,尤其关注了 x86 和 ARM 平台之间的差异。最后,文章还展望了未来 CPU 可能的发展趋势,包括提高 IPC 和时钟频率、增强多线程并行能力、优化内存技术以及采用大小核异构架构等。总之,这篇文章为读者提供了一个全面而深入的现代 CPU 技术概览,既回顾了当前的技术现状,又展望了未来的发展趋势。 + +### 🐎 [Introducing Swift MMIO](https://forums.swift.org/t/introducing-swift-mmio/68525) + +[@AidenRao](https://weibo.com/AidenRao):swift-mmio 是一个为嵌入式 Swift 生态系统设计的库,旨在为嵌入式固件开发提供安全、可靠的 API,例如读取和写入内存映射寄存器。swift-mmio 从 C++ 和 Rust 等语言的 mmio 库中汲取灵感,专注于提高与 MMIO 交互的代码的正确性。swift-mmio API 仍在不断发展,作者欢迎大家在 Swift 论坛、GitHub 上提供反馈, + +### 🐎 [2024 年 Kotlin Multiplatform 发展路线图 | 官方博客](https://mp.weixin.qq.com/s/IANDWuYiLlE_f2TSTPukaw) + +[@Crazy](https://github.com/jiyan135960):本文是官方推出的一篇关于 Kotlin Multiplatform 在 2024 年开发计划的文章,主要介绍了 Kotlin Multiplatform 团队在 2024 年的整体规划。首先确认了 Compose Multiplatform 在未来的核心地位,ComposeUI 在 Android 端逐渐进入大家的视野,就像当年 Java 切换为 Kotlin 一样,CompseUI 也会逐渐替换 XML 的页面构建形式成为 Android 开发的主流,毕竟 XML 的弊端实在太多,虽然近几年有了 ViewBinding 和 DataBinding 的辅助以后已经好了很多,但是对比于 Flutter 这种简单且快速的构建方式来讲差了很多。在工具方面 Fleet 已经可以开发 Kotlin Multiplatform 并且文章中介绍后续会快速迭代完善开发体验.对于 Multiplatform 核心的研发主要还是提升全平台开发者的开发体验,比如提升编译速度,在 IDE 与构建系统中即成 Swift Export 等。最后是对库生态的介绍,总结一下就是虽然稳定,但还需努力,改动一定很大,但是会兼容。让我们共同期待 Kotlin Multiplatform 可以像 Flutter 一样,在某个时间给我们一个惊喜。 + +### 🐎 [Upcoming third-party SDK requirements](https://developer.apple.com/cn/support/third-party-SDK-requirements/) + +[@Damien](https://github.com/ZengyiMa):在 2024 年春季,苹果商店即将开启 Privacy manifests 清单的审核,届时,在上传 App 的时候,我们需要提供隐私清单和 SDK 签名,此外苹果也给出了最新的 SDK 名单列表。请大家一定尽早准备,以免在审核期间被拒审。 + +### 🐕 [MusicKit and App Clips](https://www.polpiella.dev/musickit-and-app-clips/) + +[@anotheren](https://github.com/anotheren):[MusicKit](https://developer.apple.com/documentation/musickit) 是一个与 Apple Music 交互的 Apple 官方框架,这是开发者最方便获取 Apple Music 内容的方式,但是它在 App Clips 中工作不正常。作者介绍了如何通过 URLSession 直接构造 [Apple Music API](https://developer.apple.com/documentation/applemusicapi) 请求,来直接获取相关数据。 + +## 代码 + +### 🐎 [Pow: Delightful SwiftUI effects for your app](https://movingparts.io/pow) + +[@zvving](https://github.com/zvving):Pow 是一款基于 SwiftUI 的动画库,其官网详细提供了各类内置动画的预览和上手指南,能方便地为你的 App 注入精美的动画效果。最近,Pow 宣布开源,为那些寻求深入理解 Pow 动画实现的开发者们提供了便利,强烈推荐大家尝试使用和学习! + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#272-2023.12.18.md b/Reports/2023/#272-2023.12.18.md new file mode 100644 index 000000000..909b609ec --- /dev/null +++ b/Reports/2023/#272-2023.12.18.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #272 | 2023-12-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Flutter 小技巧之 3.16 升级最坑 M3 默认适配技巧](https://mp.weixin.qq.com/s/SIEYjZn0gKNMCGlPeg1rGw) + +[@Crazy](https://github.com/jiyan135960):本文是一篇介绍如何在升级 Material 3 后,适配原有 Material 2 控件的文章,本文虽然读起来会很快,但是会为开发者减少大量的时间去解决系统级的适配问题。本文主要介绍了以下几个控件在 Material 3 升级后的变化,以及如何适配 Material 2 的方法。 + +- AppBar: 背景的颜色,icon 的颜色,字体的颜色,都会被修改。文章中介绍通过修改 AppBarTheme 的 backgroundColor 来设置背景颜色,然后在 AppBarTheme 里配置 iconTheme 来修改 icon 的颜色与大小,最后通过 titleTextStyle 来修改字体的大小。 +- Card: 升级后的 Card 会在设置完颜色后仍然有浅蓝色的效果,文章中介绍通过在 ColorScheme 下设置 surfaceTint 为透明色就可以解决这个问题。 +- FloatingActionButton: 升级后此控件变化极大,不仅颜色变化,就连形状也发生了变化。文章中介绍首先通过修改控件中 floatingActionButtonTheme 属性里面的 backgroundColor 与 shape 两个属性完成背景颜色与形状的修改,然后通过修改 floatingActionButtonTheme 的 foregroundColor 属性来修改 icon 的颜色。 +- primarySwatch: 文章中提到如果之前使用了 primaryColorDark 和 primaryColorLight 作为配置,升级后会发生改变,只要在 ThemeData 中为 primarySwatch 参数赋值为 color as MaterialColor 即可解决。 + +### 🐢 [Hummer 引擎优化系列 - PlatformView 的演进历史与优化探索](https://mp.weixin.qq.com/s/R3UUlgEPVR909NB_Jz6o-w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): PlatformView 是 Flutter 中插入 Native 组件的唯一方式,自诞生以来经历了多次迭代和优化;本文由 U4 内核技术组分享,沿着 PlatformView 方案的演进历史,剖析各个方案的实现原理和优缺点,给出最佳实践,帮助读者理解和正确选择 PlatformView 的渲染模式;小编强烈推荐各位在用 Flutter 技术的同学详细阅读本文。 + +### 🐕 [SFSafariViewController in SwiftUI: Open webpages in-app](https://www.avanderlee.com/swiftui/sfsafariviewcontroller-open-webpages-in-app/) +[@享耳先森](https://github.com/iblacksun):`SFSafariViewController` 常用于在 App 内打开外部链接,但目前并没有 `SwiftUI` 版本。本文深入浅出,开始使用 `UIViewRepresentable` 简单封装 UIKit 使其在 `SwiftUI` 可用,之后再结合 `View Modifier` 等特性优化。 + +### 🐕 [网易云音乐 RN 新架构升级实践](https://mp.weixin.qq.com/s/tAf0SnW2M7Sp0E72YLJP5w) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文介绍了网易云音乐从 ReactNative 0.33 版本到 0.70 版本的升级历程,以及新架构升级的背景和收益。随着 RN 作为主要跨端方案建设的推进,业务对页面打开效率和使用体验的要求越来越高,跨端使用场景进一步扩大受阻。经过对比新老架构的性能、Bundle 包大小、客户端包大小、内存占用等多角度数据,新架构 Hermes 引擎预编译后性能得到了提升显著。 + +## 工具 + +### 🐕 [Marin's Side Projects 2023](https://trycombine.com/posts/marin-side-projects-2023) + +[@EyreFree](https://github.com/eyrefree):这篇文章是 Marin 对自己 2023 年进行的几个业余项目的分享与总结。介绍了包括一个实时从项目源文件中追踪 `TODO:` 和 `FIXME:` 注释的问题追踪器 Breadcrumbs、可视化显示 `Package.swift` 的 PackageView、使用 Swift 并发进行解压的 Unxippity、基于 Markdown 的应用程序演示制作工具 MarkWalkthrough、半 Markdown 编辑器半开发者控制台的 MarkPlayground、将文档作为 Markdown 文件处理的 PDFDoc 以及读取 Mac 控制台日志的 LogRider 在内的一些列应用程序,并提供了部分项目的代码,感兴趣的朋友可以看看。 + +### 🐕 [Flutter 上了 Apple 第三方重大列表,2024 春季 iOS 的隐私清单究竟是什么](https://mp.weixin.qq.com/s/Z5rc2ud3hJ2k7hN7EItyPA) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2023 年 WWDC 后宣布的隐私政策更新,对 Flutter 产生了重大影响。这些更新引入了第三方 SDK 的隐私清单,目的是提高数据收集和使用的透明度。Flutter 及其不少插件被苹果列为具有重大隐私影响,引发了对其数据实践的关注。这些更新要求开发者提交详细的隐私报告,包括数据收集类型、与用户的关联、跟踪用途和收集原因。此外,它们还要求声明跟踪域名,特别是在应用跟踪透明度 (ATT) 框架下,并要求对第三方 SDK 进行签名以防篡改。这些发展为 Flutter 开发者带来了挑战,特别是在适应 iOS 17 方面。 + +## 代码 + +### [MLX: An array framework for Apple Silicon (Made by Apple)](https://github.com/ml-explore/mlx) + +[@老驴](https://weibo.com/u/6090610445):Apple 也来赶最近的 AI 浪潮了。 Apple 发布了一个 为 Apple Silicon 特别优化的 Machine Learning 的框架,API 参照了 Numpy 和 PyTorch 进行设计,甚至写范例 port 了 LLaMA 这些热门的大语言模型。如果你最近也在玩大模型,尤其是想部署在本地的话,一起来学习下 Apple 的这个框架吧。 + +### [Async Algorithms 1.0 Released](https://github.com/apple/swift-async-algorithms) + +[@kemchenj](https://kemchenj.github.ion/):异步编程在避免堵塞的同时让我们失去了 control flow,但相对应的在异步的极致 Rx 里,我们也获得了 throttle/combineLatest 这些时间魔法。 + +Swift 新加入的 async/await 消除了同步编程和异步编程之间的差异,让我们可以在异步编程里也用上熟悉的 control flow,并且我们也没有失去时间魔法,它以 AsyncSequence 的形式存在于 Swift Concurrency 的世界里。 + +但 throttle/combineLatest 这些上层的操作符并没有直接在标准库里实现,而是在 Async Algorithms 这个库里探索实现,现在这个库发布了 1.0 版本宣布 API 的稳定。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#273-2023.12.25.md b/Reports/2023/#273-2023.12.25.md new file mode 100644 index 000000000..424e8efe3 --- /dev/null +++ b/Reports/2023/#273-2023.12.25.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #273 | 2023-12-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/273.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [独立开发提高产品定位成功率:找到 3 个对标产品](https://juejin.cn/post/7312640704404832283) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇独立开发者从自身经验中总结出的关于怎么找到产品方向,以及怎么提高产品定位成功率的文章。作者通过几个例子分别描述了“大池小鱼”原则,分别找到目标用户正在用的产品、同样卖点的产品以及你的参照产品,来快速定位你的独立开发产品。有多少读者是独立开发者或者正跃跃欲试独立开发呢?这篇文章也许会打开你的独立开发的思路哦~ + +### 🐕 [货拉拉 iOS 模块化路由框架:TheRouterSwift](https://juejin.cn/post/7281889329584275471) + +[@EyreFree](https://github.com/eyrefree):这篇文章介绍了货拉拉团队开发的 iOS 模块化路由框架 TheRouterSwift,这是 TheRouter 系列的 Swift 版本,旨在提供给 Swift 开发者一个高效的路由框架,用于模块间解耦和通信。它支持页面导航跳转、路由自动注册、路由映射文件导出、服务自动注册、动态化能力、链式编程、Objective-C 的适配、本地和远程服务调用等功能,还支持异步获取注册类和路由本地缓存能力,以优化性能和提高灵活性。文章详细介绍了 TheRouterSwift 的功能和使用方法,感兴趣的同学可查看原文获取更多信息。 + +### 🐢 [苹果 iOS 分发和安装 App 的那些趣事](https://juejin.cn/post/7315260397371490319) +[@享耳先森](https://github.com/iblacksun):本文介绍了苹果 iOS 应用分发和安装的一些有趣的事。讨论了不同的开发者计划和分发方式:包括企业签名、超级签名、TestFlight 签名和 MDM 超级签名,还提到了开发者模式、企业账号、设备注册限制以及自定 App 和非公开 App 分发的解决方案。最后,讨论了欧盟的《数字市场法》对苹果的影响和可能改变苹果软件生态的可能性。 + +### 🐎 [云音乐自研客户端 UI 自动化项目-Athena](https://mp.weixin.qq.com/s/CX9j63Wxe8qlvqVMjyRhpg) + +[@老峰](https://github.com/gesantung):本文介绍了云音乐在 UI 自动化测试上的一站式解决方案 Athena,其采用了录制的方式解决传统自动化方案录制门槛高、效率低下的问题,在回放过程中前置准备用例执行环境以及结合曙光埋点提升用例执行的稳定性,并且会保留执行过程中的现场信息以便后续溯因。最后通过私有云部署,在云端即可统一调度 Android 和 iOS 设备来执行任务。 + +### 🐎 [Symbolicating SwiftUI (and any Apple Framework)](https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework) + +[@Damien](https://github.com/ZengyiMa):这篇博客文章介绍了如何使用 Emerge Tools 的开源 ETSymblication 库和 symbolicator 来符号化 SwiftUI 等 Apple 框架。这个过程包括使用 Framework 选择器和两个步骤:线程和偏移量来提取符号。然后,将这些符号以 CSV 格式存储在数据库中,以便在 symbolicator 中引用。文章还详细解释了如何下载和理解崩溃报告,以便从中提取和解释信息。对符号化感兴趣的同学不妨一读。 + +### 🐕 [Trigger property observers from initializers in Swift](https://nilcoalescing.com/blog/TriggerPropertyObserversFromInitializersInSwift/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了几种 workarounds 使得 property observers 在 initialization 阶段也可以被触发。 +简短实用,大家可以选择适合自己的方式。 + +- Set properties after initialization +- Separate property setup method +- Create a defer closure +- Manually trigger side effects + +## 工具 + +### [MacSymbolicator](https://github.com/inket/MacSymbolicator) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个用于符号化 macOS/iOS 崩溃报告的 Mac 应用程序,可以方便快捷的符号化 crash 和 ips 文件。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#274-2024.01.08.md b/Reports/2024/#274-2024.01.08.md new file mode 100644 index 000000000..935e4269a --- /dev/null +++ b/Reports/2024/#274-2024.01.08.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #274 | 2024-01-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/274.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [The Art of the Corner Radius](https://david.y4ng.fr/the-art-of-the-corner-radius/) + +[@Barney](https://github.com/BarneyZhaoooo):本篇文章简单介绍了 swiftUI 中 **Corner Radius** 的基础使用,浅显易懂,图文并茂,只需 3 分钟就可以领略“圆角”的艺术。 + +## 文章 + +### 🌟 🐢 [微信业务开发方法与实践](https://mp.weixin.qq.com/s/we4LCGAwDC6bS7rQNztWMQ) + +[@xuyafei86](https://github.com/xiaofei86):在当前竞争激烈的商业环境中,深刻理解业务流程对于开发复杂软件系统至关重要。微信团队万字长文带你拔开迷雾,直达本质,深入理解业务是什么,以及如何挖掘业务价值。 + +本文详细阐释了业务建模的核心概念和方法,并通过支付业务的具体案例进行演示。你将从文中学到如何理解构建的业务系统背后所服务的目标组织,深入其业务流程,找出改进机会。感兴趣的同学可以阅读原文了解。 + +### [尾调用以及如何规避](https://r3zpy9khqv.feishu.cn/docs/doccnCwMGwhIDmMi4miM7VfHqpe) + +[@老峰](https://github.com/gesantung):尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的基本概念以及通过使用 OS_NOT_TAIL_CALLED 规避尾调用的代码优化方式。 + +### [浏览器内核创新技术演进及实践 - U4 5.0](https://mp.weixin.qq.com/s/5xIJIN2nUBN2h6McYFg2FQ) + +[@莲叔](https://github.com/aaaron7):U4 是 UC 基于 Chromium 内核二次开发的浏览器引擎,在阿里内部被广泛的使用。本篇文章介绍了在介绍 U4 的 5.0 新版本特性的同时,也科普了很多浏览器内核相关的技术,比如性能提升的关键模块:渲染引擎与 JS 引擎。移动端目前越来越多的业务通过 H5 来实现,作为客户端的同学多了解一些浏览器引擎的技术对于协助前端做出更优化的体验是很有帮助的。推荐阅读。 + +### [哥伦布即时设计平台 ChatGPT 落地实践](https://mp.weixin.qq.com/s/5BuX1m_GDHQzuW_Kj2siOw) + +[@水水](https://www.xuyanlan.com/):本文介绍了 ChatGPT 在哥伦布即时设计平台应用以及实现原理,通过设计 ChatGPT 交互 DSL、Prompt 与 Function 实现 Ai 智能交互、提高平台搭建效率。即让 AI 通过 DSL 了解即时设计能力,同时输出 DSL 解析执行,设计平台具备以下能力: +1.画布编辑能力:提供了丰富的画布编辑功能,包括添加、删除、复制、调整层级等操作,可以灵活地编辑页面的结构和布局。 +2.样式配置能力:支持对页面元素的样式进行配置,包括字体、颜色、大小、边框等,可以根据需求进行自定义的样式设置。 +3.数据接口配置能力:支持与数据接口的绑定,可以通过配置数据接口来实现页面内容的动态展示,提高页面的灵活性和可扩展性。 +4.交互事件配置能力:支持对页面元素的交互事件进行配置,包括点击、滑动、弹窗等,可以实现页面的交互效果,提升用户体验。 +5.预览和下载能力:提供了在线预览和下载代码的功能,可以实时查看页面效果,并将设计的页面代码下载到本地进行进一步开发和调试。 + +## 工具 + +### [Unxippity](https://trycombine.com/posts/an-app-experiment-about-unxipping-xcode-goes-to-github/) + +[@Smallfly](https://github.com/iostalks):这是一款 [unxip](https://github.com/saagarjha/unxip) 的可视化开源工具,用于加速下载和解压 Xcode。 + +## 代码 + +### [swift-retry](https://github.com/fumoboy007/swift-retry?tab=readme-ov-file) + +[@AidenRao](https://weibo.com/AidenRao):该项目是一个 Swift 语言的重试库,旨在提供合理的默认设置和强大的灵活性。 + +- 合理的默认设置:默认选择[指数退避](https://en.wikipedia.org/wiki/Exponential_backoff)算法,适用于大部分场景,避免对资源进行 DDoS。 +- 强大的灵活性:该库提供了多个自定义选项以适应不同的使用场景,包括自定义关闭、重试配置、退避算法选择以及时钟替换等。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#275-2024.01.15.md b/Reports/2024/#275-2024.01.15.md new file mode 100644 index 000000000..27b300fa3 --- /dev/null +++ b/Reports/2024/#275-2024.01.15.md @@ -0,0 +1,57 @@ +# 老司机 iOS 周报 #275 | 2024-01-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/275.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [@Observable Macro performance increase over ObservableObject](https://www.avanderlee.com/swiftui/observable-macro-performance-increase-observableobject/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要介绍 WWDC 2023 中首次公开的 @Observable 宏,这是一个设计精良的工具,旨在优化 SwiftUI 视图并提升应用性能。通过使用 @Observable 我们能有效地防止不必要的视图重绘 , 并更流畅地观察状态变化。尽管使用 @Observable 宏让我们无需再使用 @ObservedObject,ObservableObject 和 @Published,但为了确立模型数据来源仍需依赖 @State。 + +### 🐎 [Perception: A back-port of @Observable](https://www.pointfree.co/blog/posts/129-perception-a-back-port-of-observable) + +[@Smallfly](https://github.com/iostalks):Swift 5.9 引入了强大的观察者工具 @Observable 宏,但仅适用于 iOS 17、macOS 14、tvOS 17、watchOS 10 等新平台。由于少于 50% 的设备运行在 iOS 17 上,大多数开发者需要等待数年才能使用这些工具。[swift-perception](https://github.com/pointfreeco/swift-perception) 提供了在低版本中使用 @Observer 的能力,并且在高于 iOS 17 上会自动使用系统的实现。有需要的读者可以一试。 + +### 🐕 [Adapting your App Icon to visionOS](https://www.createwithswift.com/adapting-your-app-icon-to-visionos/) + +[@享耳先森](https://github.com/iblacksun):Apple Vision Pro 即将发售,如果你的 App 准备适配 visionOS,本文介绍了如何将现有的 App Icon 进行修改已完美匹配 visionOS 规范。 + +### 🐢 [iOS Availability 编译器实现机制解析](https://juejin.cn/post/7316202786173829146) + +[@JonyFang](https://github.com/jonyfang): 文章探讨了 iOS 开发中的 Availability 机制,这是 iOS 编译器提供的一个用于处理不同 iOS 系统版本之间 API 兼容性问题的功能。该机制允许开发人员声明 API 的版本约束,并进行可用性检查来防止在旧版 iOS 系统上调用不存在的新 API,从而避免应用崩溃。然而,作者通过研究 Clang 和 Swift 编译器源码指出,Availability 的检查只局限于方法内部的直接调用,不能保证完全的运行时安全性。 + +### 🐕 [Encrypted Portals between Macs – built in Swift and Rust](https://github.com/build-trust/ockam/blob/develop/examples/app/portals/README.md) +[@水水](https://www.xuyanlan.com/):Portals 是一款 Swift 开发的 Mac 应用程序。它使用 Ockam Rust 库在 Mac 上与任何人、任何地方私下共享服务。该服务通过端到端加密的 Ockam 门户进行安全共享。你的朋友将可以在他们的本地主机上访问它! + + +## 代码 + +### 🐎 [Missing compiler warning](https://github.com/apple/swift/issues/70630) + +[@Cooper Chen](https://github.com/cjlcooper):在 Swift 中,当 override 函数 / 方法具有相同名称但有更多参数,并且这些参数获得默认值时,理论上编译器会对这样的写法产生一个 waring,但是实际开发中并没有出现预期的警告,这个 issue 解释了以上行为的 root cause,并且提出可以使用 `let _ = Printable.init(from:as:)("Sebastian")` 这样的写法,同时也可以对 init 方法增加 `@_disfavoredOverload` 关键字的写法,但需要提醒的是,并不推荐这样的用法,但这为有类似 case 的开发者提供很好的思路。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#276-2024.01.22.md b/Reports/2024/#276-2024.01.22.md new file mode 100644 index 000000000..897dd62d2 --- /dev/null +++ b/Reports/2024/#276-2024.01.22.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #276 | 2024-01-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/276.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Bad practice: using "YYYY" to format a Date](https://www.swiftwithvincent.com/blog/bad-practice-using-yyyy-to-format-a-date) + +[@极速男孩](https://github.com/ztlyyznf001):文章讲述了在 Swift 编程语言中关于日期格式化的一个常见错误。"YYYY" 实际上表示的是该周开始的年份,这会导致新年初几天的日期显示不正确。例如,2023 年 1 月 1 日会错误地显示为 2022 年。这个错误通常在新年开始时才被注意到。正确的年份格式化方法应该使用 "yyyy" ,以确保准确表示日历年份​​。 + +## 文章 + +### 🐕 [在微信小程序里运行完整的 Flutter,我们是怎么做到的?](https://juejin.cn/post/7324923422295670834) + +[@邦 Ben](https://github.com/linwenbang):MPFlutter 是一个跨平台 Flutter 开发框架,可用于各种小程序、H5、原生应用开发。这类跨平台开发,在一些中小型的开发场景来说,可以提高比较大的效率。本文主要介绍一下在微信小程序上实现的原理,通过裁剪 Skia 生成符合微信小程序分包要求的 CanvasKit,使用 Flutter Web + W3C BOM + WebGL Canvas 跑通渲染流程,通过字体内置、智能分包的方式很好地解决了微信包体积限制。选型的过程也有介绍,有兴趣的同学可以仔细看看,也可以基于官网流程体验尝试。 + +参考链接:[官网](https://mpflutter.com/zh/) + +### 🐢 [Swift for C++ Practitioners, Part 1: Intro & Value Types](https://www.douggregor.net/posts/swift-for-cxx-practioners-value-types/) + +[@AidenRao](https://weibo.com/AidenRao):这个系列主要是通过将 C++ 的习惯用法、模式和思维模型映射到 Swift 中来帮助 C++ 开发学习和使用 Swift。如果你是一位 C++ 背景的开发,阅读 [Swift 入门指南](https://www.swift.org/getting-started/) 中有比较多的困惑,那可以尝试一下该系列,能帮助你更好的理解和应用 Swift。 + +### 🐕 [VisionPro News](https://developer.apple.com/news/?id=8fppguuh) && [Q&A: Building apps for visionOS](https://developer.apple.com/news/?id=prl6dp5r) + +[@EyreFree](https://github.com/EyreFree):在这两篇文章中,Apple 专家回答了关于 visionOS 的常见问题,涵盖了如何与实体互动、选择窗口组或沉浸式空间、可视化碰撞形状、在沉浸式空间中定位 SwiftUI 视图、编程定位窗口、用户关注点追踪、onHover 和 onContinuousHover 动作、自定义沉浸式环境纹理、视频格式转换、RealityKit 照明和材料自定义等方面。介绍了 Apple Vision Pro 的 App Store,Algoriddim 公司为 visionOS 设计的适应无限画布的 App djay,以及 Apple Vision Pro 工程师的常见问题解答。文章还提及了重塑企业应用、提供开发实验室和 App Review 咨询服务,以及 visionOS 的示例应用、SwiftUI 教程和音频性能更新资源。 + +### 🐎 [AnyView ’ s impact on SwiftUI performance](https://martinmitrevski.com/2024/01/02/anyviews-impact-on-swiftui-performance/) + +[@东坡肘子](https://github.com/fatbobman):本文探讨了在 SwiftUI 中使用 AnyView 对性能可能造成的影响。AnyView 作为一种类型擦除视图,使得开发者无需明确指定视图层次结构中各个视图的具体类型,从而简化了代码的复杂度,避免了泛型的频繁使用。然而,这种方便性可能以牺牲性能为代价。 + +作者 Martin Mitrevski 通过精心设计的测试代码,直观地展示了 AnyView 在 SwiftUI 中所造成的性能影响。文章特别指出,在包含大量子视图的滚动列表等场景中,应谨慎使用 AnyView,以避免不必要的性能下降。 + +> 介绍摘自 [Fatbobman's Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-014),推荐订阅! + +### 🐎 [闲话 APPLE 的 APP REVIEW 趣事](https://sketchk.xyz/posts/secret-of-app-review-team) +[@Smallfly](https://github.com/iostalks):这篇文章探讨了一些 iOS App Review Team 内部的运作机制,展示了 App 常见的拒审原因,并为审核申述提供了一些思路,推荐给提交 App Store 审核遇到问题的开发者阅读。 + +### 🐎 [std:: versus ::std::](https://mp.weixin.qq.com/s/QwhBdUZbmGFiUP_ssomXUQ) + +[@老驴](https://weibo.com/u/6090610445):最近一段时间原生鸿蒙开发的热度在升温,而开发原生鸿蒙主要用 C++,而 C++ 这么多年下来也一直热度不减。C++ 开发中,作用域这个概念一直对新手不是很友好,尤其是怎么理解在什么情况下用哪种作用域。这篇文章就可以很好的帮你理解作用域这个概念。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#277-2024.01.29.md b/Reports/2024/#277-2024.01.29.md new file mode 100644 index 000000000..ecd07970d --- /dev/null +++ b/Reports/2024/#277-2024.01.29.md @@ -0,0 +1,59 @@ +# 老司机 iOS 周报 #277 | 2024-01-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/277.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Update on apps distributed in the European Union](https://developer.apple.com/support/dma-and-apps-in-the-eu/) + +[@老驴](https://weibo.com/u/6090610445):iOS 17.4 beta 上周上线了,其中最大的变化是因为欧盟 DMA 政策,苹果在欧盟再次做出重大让步,做出了 “违背祖宗” 的决定。 具体来说,有几个重大变化: + +1. 第三方应用商店:在欧盟,苹果将允许 App 通过第三方商店进行分发. +2. Webkit 外的浏览器内核:长期以来,苹果限制 iOS 上的第三方浏览器必须使用 Webkit 内核,从 17.4 开始,这会在欧盟成为过去式。 +3. NFC API 和支付的开放:欧盟开发者有更多的 NFC 相关的 API,包括很多人期待的模拟 NFC 卡。 +4. App Store 多种支付方式:App Store 将不再限制支付方式. + +这里面其实有很多改变是很多人一直期盼但是却一直不得的。这些改变将让 iOS 在欧盟成为更开放的移动操作系统。当然,仅限欧盟,目前还不知道其他地区的用户是不是可以模拟成欧盟用户,但是按照传统,应该不容易。 + +PS:工信部是不是该出手了?! + +### [Apple introduces new options worldwide for streaming game services and apps that provide access to mini apps and games](https://developer.apple.com/news/?id=f1v8pyay) + +苹果放开了对于串流 APP 的限制,利好 Xbox Cloud Gaming / Nvidia GeForce NOW 上架单独的串流 APP ;同时苹果对于 mini-games / mini-apps / chatbots 类型的应用开放 iAP 内购渠道,相较之前的态度还是略有放宽,也可能是顺应 GPT Shore 的潮流。 + +同时苹果为开发者准备了 50 多个新的的可视化图表以及分析报告,可以查看 用户的参与度,下载销售相关的收益,安装卸载程序时的附加信息等。同时这些信息预计在 3 月上线,届时还可以通过 API 向第三方授权这些分析报告。 + +## 文章 + +### 🐎 [A new access modifier in Swift: package](https://blog.eidinger.info/a-new-access-modifier-in-swift-package) + +[@AidenRao](https://weibo.com/AidenRao):在 Swift 5.9 中,苹果引入了一个新的访问级别:package,在软件包内的模块之间共享代码,同时不将该代码分享给软件包外部。目前 package 只支持源代码构建的软件包,对于二进制框架有望在未来支持。 + +### 🐢 [Exploring object file formats](https://maskray.me/blog/2024-01-14-exploring-object-file-formats) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章的主要内容是关于目标文件格式的探讨。作者从自己在 LLVM 项目中的经历出发,深入研究了 lld 和二进制实用程序,并在此过程中对目标文件格式产生了浓厚的兴趣。文章介绍了目标文件格式的核心组件,如符号、节和重定位,并回顾了几种主要目标文件格式的历史和演变。通过了解不同格式的特点和限制,可以更好地理解它们在软件开发和部署中的作用。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#278-2024.02.26.md b/Reports/2024/#278-2024.02.26.md new file mode 100644 index 000000000..a28a8822e --- /dev/null +++ b/Reports/2024/#278-2024.02.26.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #278 | 2024-02-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/278.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect upload requirement starts April 29](https://developer.apple.com/news/?id=fxu2qp7b) + +预计在 4 月 29 日,App Store Connect 就将限制必须使用 >= Xcode 15.0 进行提交,并支持最新的系统。还未升级的同学们需要尽快切换并进行适配啦。 + +### 🐢 [Flutter 3.19.0 系列更新](https://mp.weixin.qq.com/s/JRdT4vJutvNZ66uqqjYEPg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 国内新年假期期间 Flutter 团队发布了 2024 一季度的更新:Flutter 3.19.0 ;按照惯例随着一起发布的还有 Dart 3.3 ;此次更新除了功能迭代、性能调优、工具优化之外,有几个点值得开发同学们着重关注: + +- Gemini Dart SDK: 可以更方便地让 Dart 开发人员在 App 里集成 LLM 的 AI 能力 +- Impeller Android Preview: 意味着 Flutter 彻底抛弃 Skia 的进程迈出了很大一步 +- 弃用 Window 7 & 8,弃用 iOS 11 以前的版本 +- Dart 对于 JS interoperably 支持增强 +- Dart Macros 支持 + +其他相关博文: +- [Flutter 3.19.0 ReleaseNote](https://medium.com/flutter/whats-new-in-flutter-3-19-58b1aae242d2) +- [Dart 3.3](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491174&idx=2&sn=b6c236e48e2f5d0032387293f7e90bb6&chksm=cec64803f9b1c1159f6d720883df2ff202ab52cb8820682a65bc4ce6aba1a9488f33f18fae61&cur_album_id=1968809591672979459&scene=189#wechat_redirect) +- [2024 Impeller:快速了解 Flutter 的渲染引擎的优势](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491190&idx=1&sn=dcb726e2ace120fb2285e82a5befb007&chksm=cfbf4d3126192986e2bb5255ee55f4b5fff1a3e2949b15321b3ea264929aedec30dc76fda824&scene=132&exptype=timeline_recommend_article_extendread_samebiz&show_related_article=1&subscene=189&scene=132#wechat_redirect) +- [Flutter 2024 路线规划](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491174&idx=1&sn=5ceb5e8fce90f11dc051a9305d4ed109&chksm=cec64803f9b1c1154cd1a684a34d03e0189e9e85bbdf8f67983ea3940c4ecf8dd062de1347ac&cur_album_id=1968809591672979459&scene=189#wechat_redirect) +- [Dart 宏(Macros)编程开始支持](https://mp.weixin.qq.com/s/WoamljZJeNN9huMdIb_Ycw) + +## 文章 + +### 🐕 [通过 Headphone Motion 访问 AirPods 的头部跟踪数据](https://github.com/LLLLLayer/Headphone-Motion) + +[@EyreFree](https://github.com/EyreFree):本文介绍了如何利用 Core Motion 框架访问 AirPods 的头部跟踪数据。介绍了在 iOS 应用中如何设置和获取用户授权,以及如何通过 CMHeadphoneMotionManager 类开始和停止设备运动数据更新,接收头部跟踪数据,并通过 CMDeviceMotion 类解析这些数据,最后说明了如何处理连接和断开耳机的事件。并且提供了完整 Demo 工程,推荐感兴趣的同学阅读。 + +### 🐕 [On-device ML research with MLX and Swift](https://www.swift.org/blog/mlx-swift/) + +[@JonyFang](https://github.com/JonyFang): Swift 编程语言因其易用性和高性能,配合 MLX 库,为 Apple 芯片上的机器学习研究提供了强大支持。MLX Swift 将 MLX 扩展到了 Swift 语言,简化了机器学习在 Apple 芯片上进行实验的复杂度,并提供了相应的 Swift API、高级的神经网络和优化器包,以及文本生成和 MNIST 训练的示例。所有这些都在 MIT 许可下发布,旨在利用 Swift 的高性能和易用性,为机器学习研究者提供一个友好的实验框架。文中提供了文档和示例,API 覆盖的能力可以具体看下文档,感兴趣可以研究下 Examples ~ + +### 🐕 [Code Injection with Dyld Interposing](https://www.emergetools.com/blog/posts/DyldInterposing) + +[@Cooper Chen](https://github.com/cjlcooper):众所周知 Objective-C 运行时的动态性可用于多种用途,例如我们熟知的 Method swizzling,然而 Method Swizzling 不能用于 C/C++ 函数的交换,这对于需要在 C/C++ 下进行逆向的时候并不能如人所愿,本篇文章介绍如何使用 dyld 动态绑定的特性进行插入方法,从而达到对 C/C++ 语言进行替换绑定的目的,同时也建议与 Fishhook 进行异同点比较来达到最佳的阅读体验。 + +### 🐎 [The SwiftUI Field Guide](https://www.swiftuifieldguide.com) + +[@zoeGuo](https://github.com/zoeGuo):这个网站直观地解释了 SwiftUI 布局系统的工作原理。可以通过改变属性或参数数值动态看到布局上的变化,更有利于理解 SwiftUI 参数、属性的含义。 网站目前更新了 [Alignment](https://www.swiftuifieldguide.com/layout/alignment)、[HStack](https://www.swiftuifieldguide.com/layout/hstack)、[Aspect Ratio](https://www.swiftuifieldguide.com/layout/aspect-ratio) 和 [Padding](https://www.swiftuifieldguide.com/layout/padding) 四个模块,推荐给正在学习 SwiftUI 的读者。 + +### 🐕 [云音乐 RN 新架构升级之 iOS 灰度方案](https://mp.weixin.qq.com/s/jZ3wfbFf2xey8aTK16MU4A) + +[@Smallfly](https://github.com/iostalks):文章主要介绍了网易云音乐在升级 React Native(RN)架构时,iOS 侧采用的灰度方案。阐述了实现渐进式升级的思路和挑战,包括静态链接和动态链接两种方案的优缺点,以及他们最终采用的双动态库方案。这个方案通过引入一个中间层(NEReactNative)来解决静态链接过程中的符号引用问题,并在运行时动态加载新旧版本的 RN 代码。 + +文章适合对 React Native 架构升级、iOS 灰度发布策略、以及 Objective-C 运行时特性感兴趣的资深 iOS 开发者阅读。 + +## 代码 + +### [armhf-swift-toolchain](https://github.com/CmST0us/armhf-swift-toolchain) + +[@kemchenj](https://kemchenj.github.ion/): +1. 可以学习如何使用源码编译 Swift +2. 学习如何使用 SPM 进行交叉编译 +3. 对嵌入式 32 位 Linux 平台,可以使用 Swift 编码。例如作者已在 fpga 上运行 Swift [Run Swift On Zynq petalinux](https://forums.swift.org/t/introducing-my-armhf-swift-5-9-toolchiain/69524/2) + +由:[CmST0us](https://github.com/CmST0us) 自荐 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#279-2024.03.04.md b/Reports/2024/#279-2024.03.04.md new file mode 100644 index 000000000..abfd325f2 --- /dev/null +++ b/Reports/2024/#279-2024.03.04.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #279 | 2024-03-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/279.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### [How to make a completionHandler much safer ](https://www.swiftwithvincent.com/blog/how-to-make-a-completionhandler-much-safer) + +[@zoeGuo](https://github.com/zoeGuo):我们经常会用 completionHandler 来处理异步事件,但是很难保证所有逻辑下都能执行到 completionHandler 的逻辑。那么在 Swift 语法中可以使用 defer 关键字,defer 可以确保 completionHandler 在方法返回之前一定被调用,编译器会检查在每个可能的代码路径中都能顺利执行到 completionHandler。原文有更详细的代码示例说明,还有视频讲解。 + +## 文章 + +### 🐕 [从入门到精通:如何解决 C++ 模板代码膨胀问题](https://mp.weixin.qq.com/s/aRqKGoVNcf8yzRhIHbmoBA) + +[@老峰](https://github.com/gesantung):C++ 模板是一种强大的编程工具,它允许我们编写通用的、可重用的代码,本文介绍了通过模板函数提取通用部分;模板类抽象出通用部分到基类,合理使用模版等优化策略提高编译速度,减少二进制文件大小解决代码膨胀问题。 + +### 🐎 [Swift 6.0 Release Process](https://forums.swift.org/t/swift-6-0-release-process/70220) + +[@AidenRao](https://weibo.com/AidenRao):Swift 社区公布了 Swift 6 的发布流程及预期时间表。2024 年 3 月 15 日,将从 Swift 主分支中切出 release/6.0 分支开启发布流程,正式版本预计将于今年下半年与新版 Xcode 同步发布。 + +### 🐎 [ImGui 在长桥跨端图表组件中的探索与应用](https://mp.weixin.qq.com/s/-_NLEbonjEl1F2kyA0yx_A) + +[@Smallfly](https://github.com/iostalks):长桥技术团队在 iOS App 中升级 K 线图表组件,面临业务复杂度高、两端重复开发等问题。在对比各种成熟跨端方案之后,他们选择了 ImGui 作为跨平台解决方案,利用其 GPU 渲染和简单 API 实现高性能图表。它使用各平台支持最好的渲染框架,有着完善的图表绘制能力,即使加载大量数据,在多个平台上依然有流畅体验。 + +### 🐢 [天美引擎工程师:如何使用移动端硬件特性提升游戏上限?](https://zhuanlan.zhihu.com/p/587988966) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 Unreal Open Day 2022 上,腾讯天美工作室的引擎工程师王烁分享了如何使用移动端硬件特性提升游戏渲染效果。他提出,利用硬件特性如 VRS(可变着色率渲染)等可以有效解决移动端渲染中的常见问题。将渲染分为应用图形学算法、渲染管线、图形 API 层和 GPU 驱动层四层,并强调了了解这些层级对于手游开发的重要性。了解硬件特性如 Vulkan 中的 VRS 和 Hidden-surface removal 等可以帮助开发者针对目标机型选择适当的特性,从而提升游戏渲染效果。通过利用这些硬件特性,游戏开发者可以在保证游戏性能的同时,提高游戏画面质量,从而提升游戏体验。王烁的分享为游戏开发者提供了一种新的思路和方法,对于提升游戏上限具有重要的指导意义。 + +### 🐕 [try catch 失效排查 - 探索异常处理机制的迷雾](https://mp.weixin.qq.com/s/MK26EcuVS2GFOjocgvvetA) + +[@xuyafei86](https://github.com/xiaofei86):C++ 异常处理机制 try catch 在快手 App 内突然失效,引发大量未捕获异常导致的崩溃。本文介绍稳定性团队排查此次问题的过程,问题的根本原因以及修复规避方案,最后梳理异常处理流程,知其然,知其所以然,方能在问题出现时冷静应对。感兴趣同学可以阅读原文了解。 + +### 🐕 [How the Swift compiler knows that DispatchQueue.main implies @MainActor](https://oleb.net/2024/dispatchqueue-mainactor) + +[@Barney](https://github.com/BarneyZhaoooo):文章讨论了 Swift 编译器如何识别 DispatchQueue.main 为 `@MainActor`,这是通过检查源代码实现的。当使用 DispatchQueue.main.async 时,系统会自动将其视为 `@MainActor`,这使得在主线程上执行并发任务变得方便。然而,这种行为并未在 Xcode 等 IDE 中明确显示出来,作者希望能直观显示 `@MainActor` 和相关并发信息,以便更好地理解和学习 Swift。 + +### 🐎 [ARM 汇编系列](https://www.lyldalek.top/6cd918093215420e8e980db08e9a8ba0) + +[@Crazy](https://github.com/jiyan135960):汇编是客户端开发人员很少接触的一个方面,一般在 Android 开发人员也只有 ndk 开发者会接触到,汇编看似无用,但却是性能优化最底层的核心,了解汇编是程序员非必备,但是很需要的技能。本次推荐的博客是一个系列,在这个汇编中文博客很少的当下,这个系列可以说是很好的解决了大家入门困难的问题。本系列从环境搭建开始,到各种指令的介绍,把汇编基础用图片加代码整合起来,简单明了的讲解给大家,有需要汇编入门的同学可以仔细学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#280-2024.03.11.md b/Reports/2024/#280-2024.03.11.md new file mode 100644 index 000000000..87c66c82c --- /dev/null +++ b/Reports/2024/#280-2024.03.11.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #280 | 2024-03-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/280.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Privacy updates for App Store submissions](https://developer.apple.com/news/?id=3d8a9yyh) + +[Privacy manifests and signatures](https://developer.apple.com/support/third-party-SDK-requirements/) 的 deadline 来了,5 月 1 日。目前大部分知名第三方库都已经完成了适配,例如:[SDWebImage](https://github.com/SDWebImage/SDWebImage/blob/master/SDWebImage/Resources/PrivacyInfo.xcprivacy)、[FMDB](https://github.com/ccgus/fmdb/blob/master/privacy/PrivacyInfo.xcprivacy)、[Protobuf](https://github.com/protocolbuffers/protobuf/blob/main/PrivacyInfo.xcprivacy)、[SnapKit](https://github.com/SnapKit/SnapKit/blob/develop/Sources/PrivacyInfo.xcprivacy) 等,但也有部分如:MBProgressHU、Starscream 等年久失修可能得自己处理下。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 开发者实验室 与 探索《人机界面指南》](https://developer.apple.com/events/view/upcoming-events?q=Shanghai) + +上海的 Vision Pro 的开发实验室即将迎来多场活动,[3 月 27 日](https://developer.apple.com/events/view/U56UR4S32Y/dashboard) 与 [4 月 24 日](https://developer.apple.com/events/view/H44MV68G45/dashboard) 的线下实验室,以及 4 月 10 日的 [1 on 1 线上咨询](https://developer.apple.com/events/view/NLYY4Q2N6Y/dashboard)。 + +4 月 2 日还有[探索《人机界面指南》](https://developer.apple.com/events/view/5758Q34VL9/dashboard) 的活动。 + +还没有亲自体验过 Vision Pro 的开发者千万不要错过本次活动。 + +## 新手推荐 + +### [The power of inout parameters](https://danielsaidi.com/blog/2024/02/18/the-power-of-inout-parameters) + +[@zoeGuo](https://github.com/zoeGuo):Swift 函数参数是常量,这意味着不能在函数内部修改入参的值。将参数标记为 inout 实际是将入参值引用,从而实现在函数内更改其值。文中举例了富文本 context 跟随 textView 的各属性值变化的例子说明使用 inout 参数可以减少重复表意的代码、使代码更简洁。 + +## 文章 + +### 🐕 [Why Ollie is moving away from SwiftUI to UIKit](https://medium.com/goodones/why-ollie-is-moving-away-from-swiftui-to-uikit-cfdefe918d1c) + +[@JonyFang](https://github.com/JonyFang): 本文描述了该团队在 SwiftUI 应用过程中经历了一系列关于 SwiftUI 和 Swift 并发的问题,最终决定从 SwiftUI 迁移到 UIKit。他们指出 SwiftUI 的抽象和不确定性给开发带来了更多的开发成本,在处理复杂的业务逻辑和多线程时问题更为明显。SwiftUI 的"魔法"和 AttributeGraph 的不确定表现让 debug 变得困难。开发过程中 Swift 并发的死锁问题也让开发者头疼,而其异步执行的顺序问题使得调试变得复杂。 + +作者强调了 SwiftUI 可能正在经历第二系统效应(second-system effect),第二系统效应可能造成软件专案计划过度设计,产生太多变数,过度复杂,无法达成期待,并因而失败。他们解释了在使用 SwiftUI 和 Swift 并发时的一些错误实践,包括对 MVVM 和对 SwiftUI 内部属性的误用。他们还提到了对 Combine 的迁移以及将重型操作移到显式调度队列的决策。 + +为了解决问题,团队决定迁移到 UIKit,并举例说明了一个使用 UIKitCollectionView 的案例在性能上远远超过 SwiftUI 版本。 + +### 🐕 [How to determine where tasks and async functions run in Swift?](https://www.donnywals.com/how-to-determine-where-tasks-and-async-functions-run-in-swift/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文解释了 Swift `Task` 和异步函数的运行规则,以及它们和 GCD 心智规则的不同之处。作者首先介绍了不同的 `Task` 类型 - 分离 Task 和非结构化 Task,其次重点解释了 Swift 对于不同 Task 的调度规则。 + +如果上下文被 `@MainActor` 或其他全局 `Actor` 关联或隔离,则创建的非结构化 `Task` 会在对应 `Actor` 的 `executor` 中执行,否则会被调度到默认的全局 `executor` 中执行。 + +注意某些协议也可能携带 `@MainActor` 约束以及我们可以在测试代码中使用 `MainActor.assertIsolated(_:)` 来进行运行时的 `@MainActor` 隔离检查。 + + +### [C++ 常见避坑指南](https://mp.weixin.qq.com/s/ivmOl-qGALnHEVbwKANiug) + +[@莲叔](https://github.com/aaaron7):腾讯是大厂中 C++ 使用度最高的公司,很长一段时间几乎所有的后端服务都是用 C++ 开发完成的。本篇文章介绍与总结了 C++ 在大规模工程开发中最常见的问题,非常有价值。新手使用 C++ 往往很容易被淹没在无数的语言细节里,同样的逻辑也会有多种写法,这个时候如果有一个身经百战的前辈出来给你划重点,那练级效率必然会事半功倍。这篇文章就给我这样的感觉,推荐给需要在工作中使用 C++ 的技术同学阅读。 + + +### 🐎 [Everything you need to know about Swift 5.10](https://www.donnywals.com/everything-you-need-to-know-about-swift-5-10/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):伴随着 iOS 17.4 和 iPadOS 17.4 的发布,Apple 推出了 Swift 5.10,这一版本在并发性方面取得了显著的进步。Swift 5.10 主要针对 Swift Concurrency 的数据安全功能进行了改进,特别是在严格并发检查方面。通过增强并发检查,Swift 5.10 现在能够更准确地识别并标记出不安全的代码,从而帮助开发者在编写并发代码时避免数据竞争和其他线程安全问题。Swift 5.10 还引入了 SE-0412 提案,该提案限制了全局变量的并发访问,进一步提高了 Swift 在编译时防范数据争用的能力。这意味着开发者在编写涉及共享状态的代码时,需要更加明确地考虑其并发安全性。 + + +### 🐢 [The power of self-sufficient features](https://www.swiftindepth.com/articles/self-sufficient-features/) + +[@享耳先森](https://github.com/iblacksun):一个功能最好是相对独立,尽量减少对外部的依赖,本文介绍了 `self-sufficient features` 的几个原则: +1. 自身加载必须的数据,而不靠外部传入 +2. 内部处理各种错误,而不向外传递 +3. 不要依赖或修改堆栈 + +### 🐕 [How to use VariadicView, SwiftUI's Private View API ](https://www.emergetools.com/blog/posts/how-to-use-variadic-view) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了 SwiftUI 中私有视图 API 称为 VariadicView,,通过枚举 _VariadicView 是这个类的入口,它包括其他类型,例如_VariadicView_MultiViewRoot 和_VariadicView. tree 等等,文章介绍了如何使用 VariadicView 以及其安全性,对于 SwiftUI 相关开发有不错的实用性。 + +### 🐕 [High Performance Swift Apps](https://jacobbartlett.substack.com/p/high-performance-swift-apps) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者从自己的 App 入手,详细讲述了如何着手优化 App 的性能,其中包含了问题分析、Instruments 的简单使用说明以及最终的代码实践,非常适合新人入门。其中作者的一个观点也是非常令人赞同:应该先找到问题,聚焦在真正的瓶颈上,避免在琐碎的点上投入太多精力。 + +## 代码 + +### 🐢 [ConcurrencyRecipes](https://github.com/mattmassicotte/ConcurrencyRecipes) + +[@AidenRao](https://weibo.com/AidenRao):作者表示 Swift Concurrency 很难用,所以整理和记录了一些使用 Swift Concurrency 遇到的问题和解决方案,并欢迎大家一起共建。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#281-2024.03.18.md b/Reports/2024/#281-2024.03.18.md new file mode 100644 index 000000000..320d782d1 --- /dev/null +++ b/Reports/2024/#281-2024.03.18.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #281 | 2024-03-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/281.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Swift Predicate: 用法、构成及注意事项](https://fatbobman.com/zh/posts/swift-predicate-usage-composition-and-considerations/) + +[@JonyFang](https://github.com/JonyFang): 文章详细介绍了如何有效利用 Swift Predicate,包括谓词的构建技巧、全局函数和实例方法的限制、支持创建多种泛型参数的谓词、线程安全和序列化等。通过具体代码示例,展示了 Swift Predicate 在不同场景下的应用,如如何处理可选值、实现线程安全的数据处理等,同时对比了 NSPredicate 与 Swift Predicate 的不同之处,强调了 Swift Predicate 在 Swift 开发中的好处和优势。 + +### 🐎 [Third-party libraries acknowledgments using a Settings bundle](https://www.avanderlee.com/workflow/third-party-libraries-acknowledgments-swift-packages/) + +[@Damien](https://github.com/ZengyiMa): 三方库可以帮助开发者更快地构建应用,但通常会包含开源协议 License,如 MIT License 等,本篇文章介绍了如何在你的应用中添加三方库致谢和开源协议的展示信息,而不需要花费太多的工作,作者介绍了一个开源项目:swift-package-list,并且提供了一键集成脚本,推荐各位 iOS 开发者也集成致谢模块,这将会让您的 App 更加合规。 + +### 🐕 [What you should know about visionOS volumes before using them in an app](https://www.lunarskydiving.com/blog/volume-limitations/) + +[@EyreFree](https://github.com/EyreFree):这篇文章讨论了 visionOS 中使用 volumes 时的一些限制。作者列出了 15 个问题,包括 volumes 创建后无法改变大小,最大尺寸限制为 2 立方米,以及受用户 Window Zoom 设置的影响而改变大小。还提到了 volumes 的初始位置无法设置,手势追踪和射线投射功能不支持,且 volumes 可能无法与系统控件或评分提示交互。文章建议,如果这些限制影响到应用设计,开发者可以考虑使用 immersive space。感兴趣的朋友可以看一下。 + +### 🐕 [Debug for visionOS using Xcode simulator visualizations](https://www.createwithswift.com/debug-visionos-using-xcode-simulator-visualizations/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讲解了如何通过使用 Xcode 的 visionOS 模拟器中的六种主要调试模式(锚定、轴向、边界、碰撞形状、遮挡网格和表面模式)进行应用开发。这些模式有助于完成空间定位、理解定向、增强空间认知、事件检测、实现虚实交互以及精确实体定位。文章还指出了额外资源,以便于更好地运行和交互应用。掌握这些调试模式对于开发出富有交互性的空间计算应用并充分利用诸如 Apple Vision Pro 等设备至关重要。 + +### 🐢 [Modding Plugins back into Xcode](https://bryce.co/xcode-plugin-loader/) + +[@享耳先森](https://github.com/iblacksun):因 macOS 安全机制升级导致 Xcode 老的插件体系被废弃,本文写了与此相关的一些 Xcode 插件背景知识,以及提供了一些 ` 黑魔法 ` 让新版 Xcode 也可以加载老的插件,如果对 Xcode 插件开发敢兴趣,建议阅读。 + +### 🐎 [If you ’ ve created a visionOS app with a volume, you probably did it wrong](https://www.lunarskydiving.com/blog/volume-window-zoom/) + +[@Smallfly](https://github.com/iostalks):文章讨论了 visionOS 应用开发中的 volume 内容剪裁问题,指出 Apple 官方示例代码在用户更改 Window Zoom 设置时可能导致异常。Apple 工程师说是符合预期的,并提出使用 GeometryReader3D 来动态调整内容以适应 volume 大小的解决方案,文档中未充分说明这一点请开发者关注。 + +### 🐎 [Vision Pro Connectivity](https://buttondown.email/varrall/archive/vision-pro-connectivity/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章探讨了如何通过连接多个设备,特别是 iPhone 和 Apple Watch,来增强使用苹果 Vision Pro 的体验,以及如何利用 Multipeer Connectivity 和 Watch Connectivity 框架实现这一目标。作者同时还讨论了一些可能的应用场景,例如使用苹果铅笔进行更精确的输入、利用 Apple Watch 上的触觉反馈来反映 Vision Pro 上的操作,以及设计需要多个设备协同合作的游戏等。 + +### 🐎 [Shattered Glass: Customizing Windows in visionOS](https://blog.overdesigned.net/posts/2024-02-29-visionos-window-basics/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了如何在 visionOS 的开发中自定义视图的样式,详细讲述了几种视图常用的 modifier,每种样式都有给出相关的图片示例,简单易懂。 + +### 🐎 [`__inline__` 是否会改变 local static variable 的行为?](https://juejin.cn/post/7345692979075039247) + +[@kemchenj](https://kemchenj.github.io):本文介绍了为什么不能将 `__inline__` 的作用理解为宏展开: + +- `__inline__` 并不会改变局部 `static` 变量原本的行为,因为编译器将最终决定是否进行 inline ,编译器自然应该抹平区别。当然你如果还添加了 `__attribute__((always_inline))` 就一定会内联。 +- 尽量不要在 .h 中声明 `static` 函数(包括 `NS_INLINE` 函数),除非你很清楚你在做什么。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#282-2024.03.25.md b/Reports/2024/#282-2024.03.25.md new file mode 100644 index 000000000..c1c73f5b7 --- /dev/null +++ b/Reports/2024/#282-2024.03.25.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #282 | 2024-03-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/282.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +[Cocoapods 之版本号问题](https://mp.weixin.qq.com/s/ghSD_wbfRuYse64m9TmBKw) + +[@zoeGuo](https://github.com/zoeGuo):文章是一篇关于 Cocoapods 版本号使用的一个建议:要注意使用标准化的版本号,不要在主干分支使用 prerelease 版本号。原因是 Podfile 中强指定一个库的版本号,如果是一个 prerelease 版本号,最终依赖的不一定是这个版本,这其中的不确定性便来于 Cocoapods 底层对 prerelease 版本的处理策略。文中解释了 Cocoapods 如何判断 Source 里面的版本是否满足依赖要求的,可以配合[语义化版本号规范](https://semver.org/)一起阅读。 + +## 文章 + +### 🌟🐕 [Apple 也在用的 Benchmark 框架](https://www.swift.org/blog/benchmarks/) + +[@kemchenj](https://kemchenj.github.io/):这篇文章介绍了一个专为 Swift 编写的 Benchmark 包,除了支持追踪常用的 CPU 时间和内存占用情况,还支持了 ARC 相关的数据,swift-foundation 之类的 Apple 官方开源项目也都在使用。 + +另外 [Benchmark 的文档](https://swiftpackageindex.com/ordo-one/package-benchmark/1.22.4/documentation/benchmark/gettingstarted)也写得非常好,手把手教你生成 baseline,生成可视化图表,甚至连 GitHub CI 的 workflow 都教你怎么写,直接评论到 PR 上看对比结果。 + +### 🐢 [A Gentle Introduction to LLVM IR](https://mcyoung.xyz/2023/08/01/llvm-ir/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文由浅入深地介绍了 LLVM IR 的一些基本常识和概念,并给出了相关例子。 + +- % 和 @ 的在 LLVM IR 中的含义 +- LLVM IR 的类型表示 +- CFG 和不可达优化等 + +了解 LLVM IR 的主要用途是,在进行性能优化时,介于源代码和汇编代码之间的 LLVM IR 可能会是更方便的选择。 + +### 🐎 [Swift Tooling: Windows Edition](https://speakinginswift.substack.com/p/swift-tooling-windows-edition) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 Arc 公司所推动 Swift on Windows 的最新进展和一些他们的开发体验分享 + +- 🔨 开发环境 : VSCode 是 Swift on Windows 上的首选开发环境。 +- ✍️ 代码编辑 : VSCode IDE 目前已提供了代码补全、导航和错误显示功能等功能。 +- 🧪 构建和测试 : 支持通过 Swift Package Manager 和 CMake 进行构建和测试。 +- 🐛 调试能力 : LLDB 调试和命令行调试目前都已支持。 + +### 🐢 [Nerdy internals of an Apple text editor ](https://papereditor.app/internals) & [ 9 years of Apple text editor solo dev](https://papereditor.app/dev) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):作者作为一位全栈 Web 开发者,出于对 Mac 上独特应用程序生态系统的热爱,踏上了制作 Mac 原生文本编辑器的旅程。经过两年的努力,成功推出了名为 Paper 的 Mac 应用程序,随后又将其扩展到了 iOS 平台。作者尤其注重用户体验和应用程序的稳定性,因此选择了开发本土应用,充分利用了 Xcode、AppKit 和 Objective-C 等技术的优势。 + +正是作者的坚持和追求,使得 Paper 文本编辑器得以诞生并逐渐完善。而当我们深入了解 Paper 背后的工程细节时,不禁为作者的专业素养和技术实力所折服。Paper 的核心组件 TextView,通过 NSTextStorage、NSTextContainer 和 NSLayoutManager 等旗舰类的协同工作,实现了流畅而高效的文本编辑体验。这些技术细节不仅展示了作者的精湛技艺,更是他对用户体验极致追求的体现。 + +### 🐕 [lsregister: How Files Are Handled in Mac OS X](https://krypted.com/mac-security/lsregister-associating-file-types-in-mac-os-x/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要讲述了如何使用 lsregister 命令管理 Mac OS X 中的 Launch Services 数据库,这个数据库决定了文件的默认打开方式。文章详细介绍了如何查询、导出、强制重新注册文件类型、取消应用程序的注册等操作,以及如何关闭文件类型默认被隔离的功能。同时,文章也指出了清理和重建大规模数据库的方法,以及如何指定某应用打开特定文件类型或网络协议。 + +### 🐕 [Sending trial notifications with provisional authorization on iOSX](https://nilcoalescing.com/blog/TrialNotificationsWithProvisionalAuthorizationOnIOS/) + +[@享耳先森](https://github.com/iblacksun):Push 是很好的吸引用户注意的方式,但难点是如何获取用户的授权,本文介绍了 `provisional notifications` 这一通知机制。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - Meta 技术团队 - iOS 工程师 / Vision Pro 工程师 (校招) + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#283-2024.04.01.md b/Reports/2024/#283-2024.04.01.md new file mode 100644 index 000000000..5d8b61604 --- /dev/null +++ b/Reports/2024/#283-2024.04.01.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #283 | 2024-04-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/283.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [DylanYang](https://github.com/Dylan19Yang) 加入老司机技术,目前就职于字节跳动,参与音乐相关客户端开发,业余喜欢看看番、打打游戏。 + +欢迎 [Kyle-Ye](https://github.com/Kyle-Ye) 加入老司机技术,他是 Swift Documentation Workgroup 成员,独立开发者,专注于 OpenSwiftUI / Swift 相关研究。 + +**希望 DylanYang 与 Kyle-Ye 的加入也能为大家带来更多元化的内容输出!** + +## 文章 + +### 🐎 [A better pull request](https://blog.developer.atlassian.com/a-better-pull-request/) + +[@Smallfly](https://github.com/iostalks):在使用 Git 时,执行 `git diff master...alice/master`,「三个点」查看当前分支与远端分支的差异,清楚的了解将要拉取的内容,然而当远端分支有提交时,新的提交无法在 diff 中显示,这么设计有其合理性。本文作者认为不太方便,在 Bitbucket 中使用「两个点」展示与最新分支的 diff 会更清晰。对实现感兴趣的同学可阅读原文了解。 + +### 🐎 [SwiftUI Previews-based architecture](https://blog.thomasdurand.fr/story/2024-03-15-preview-based-architecture/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过一个简单的 demo 阐述了如何实现基于 SwiftUI Previews 框架的开发流程。同时作者也借此引入了他认为实现代码灵活性和解耦的两个工具:接口(Interface)和依赖注入(Dependency Injection),并在 demo 中进行了实践。接口在 Swift 中以原生的 Protocol 呈现而依赖注入则可以凭借 SwiftUI 中的环境变量(Environment Values)来实现。此外借助 `@Observable`、`ObservableObject` 和环境变量等能力,整个框架在渲染性能、内存和数据同步方面都非常优秀。 + +### 🐕 [Using a Swift macro to generate an EnvironmentKey](https://www.swiftwithvincent.com/blog/using-a-swift-macro-to-generate-an-environmentkey) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了如何使用名为 `@EnvironmentStorage` 的 Swift 宏来简化 SwiftUI 中 Environment 的使用,自动生成 EnvironmentKey 和相关的 EnvironmentValues 代码,减少样板代码,提高开发效率。通过引入 SwiftUIMacros 包并应用该宏,开发者只需定义属性名、类型和默认值即可快速创建环境存储,从而节省时间并减少错误。 + +### 🐕 [Be Careful When You Initialize a State Object](https://jaredsinclair.com/2024/03/14/state-object-autoclosure.html) + +[@AidenRao](https://weibo.com/AidenRao):在这篇文章中,Jared Sinclair 谈到了在使用 @StateObject 时需要注意的一些最佳实践:如果你必须显式地初始化 @StateObject,请密切注意属性包装器的初始化参数是一个名为 thunk 的转义闭包,而不是一个名为 wrappedValue 的对象。请在闭包内部完成所有封装对象的初始化和预处理,否则就会损害性能优势,而性能优势很可能正是你使用 @StateObject 的初衷。 + +### 🐕 [Unrestricted View Replication](https://bryce.co/replicating-views/) + +[@JonyFang](https://github.com/JonyFang): 本文讨论了在 iOS 应用中单 UIView 实例多副本场景的处理。首先介绍了使用私有 API `_UIPortalView` 来实现复制视图的方法,但指出这不符合苹果的规定,因此需要寻找其他解决方案。 + +接下来,引出 `CAReplicatorLayer` 来实现复制视图的方法。`CAReplicatorLayer` 可以创建多个视图的副本,并对每个副本应用递归变换。文中也讨论了使用嵌套的 `CAReplicatorLayer` 来创建复杂布局的方法,但指出这种方法会导致视图复制的复杂性和性能问题。 +最后,提到了 `CAReplicatorLayer` 的 `instanceDelay` 属性,该属性可以在复制的视图实例之间创建动画延迟。 + +### 🐎 [How to run asynchronous code in Swift Playground correctly?](https://antran.app/2024/swift_playground_async_execution/) + +[@zoeGuo](https://github.com/zoeGuo):Swift Playground 是快速试验 Swift 代码的绝佳工具。默认情况下,Swift Playground 从程序的顶部到底部同步执行代码。当运行异步代码时,会遇到代码执行不会结束的问题。引入 `PlaygroundSupport` 库,配合使用 `needsIndefiniteExecution`、`finishExecution()` 两个 API,即可在 Swift Playground 中编写异步代码并顺利执行,文中例举了在 Swift Playground 中使用 dispatchGroup 完成异步逻辑的操作。 + +### 🐎 [Make Your iOS App Smaller with Dynamic Frameworks](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) + +[@Leo](https://github.com/LeoMobileDeveloper):iOS 的 Widget 和 ShareExtension 是独立的 target,sandbox 和主 App 是独立的,如果多个独立的 Target 采用静态链接的方式来构建,那么某些基础库的的代码和资源会被在多个 Target 之间拷贝多份。本文提出了一种解决多 Target 之间共享代码和资源的方式,即用 Dynamic Framework,可以显著优化包大小。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#284-2024.04.08.md b/Reports/2024/#284-2024.04.08.md new file mode 100644 index 000000000..5693b1a4f --- /dev/null +++ b/Reports/2024/#284-2024.04.08.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #284 | 2024-04-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/284.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Generate and read analytics reports from the App Store Connect API](https://www.polpiella.dev/analytics-reports-api-app-store-connect) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了苹果公司最近推出的 50 多种新的分析报告,这些报告包括应用商店参与度、应用商店商务、应用使用情况、框架使用情况和性能等方面的数据。虽然这些新数据提供了很多洞察力,非常有价值,但它们仅通过 App Store Connect API 独家提供,而且获取数据的方式并不直观。文章中介绍了如何使用 App Store Connect Swift SDK 来访问这些新的指标。如果对该方式感兴趣,值得一读。 + +### 🐕 [Swift Isolation Intuition](https://www.massicotte.org/isolation-intuition) + +[@DylanYang](https://github.com/Dylan19Yang):本文详细介绍了 Swift 并发框架中的隔离(Isolation)概念,作者通过一系列的例子阐述了如何判断当前代码上下文的隔离状态。关于隔离,作者总结了三条规律: +1. 隔离状态是在方法、数据结构、变量等声明时就确定的 +2. 隔离状态只会被 async 改变 +3. protocal 也可以声明隔离状态 + +同时应当牢记隔离状态是一个编译时的声明,运行时的状态并不重要,即使一段代码在运行时只会跑在主线程上也不代表它是一段主线程隔离(MainActor-isolated)的代码。 + +本文在书写过程中假设读者已经对 swift 并发的基础概念(Actor、Task 等)有了一些了解,建议未接触过 Swift 并发的读者可以简单了解下这几个概念后再阅读此文。 + +### 🐢 [Near real-time UI code generation on iPad](https://otaku.codes/uni/dissertation/dissertation.pdf) + +[@BluesJiang](https://github.com/BluesJiang): 本论文展示了如何利用 YOLO 模型实现从草图到 SwiftUI 代码的流程。详细说明了从数据收集处理、模型训练以及利用 CoreML 实现单机完成部署投放。这里利用 iPad 强大的绘画、机器学习、SwiftPlayground 的能力,可以充分的展示这种可能性。具体展示的效果可以查看 [Demo 视频](https://www.youtube.com/watch?v=SKGdZ3H9eyY)。这篇论文很好的展示了机器学习实践的完整流程,值得学习。 + +### [理解 C++ 的六种 Memory Order](https://lancern.xyz/2021/07/07/cpp-memory-order/) + +[@老驴](https://weibo.com/u/6090610445):本文详细介绍了 C++11 中引入的六种内存顺序(memory order)的概念,目的是解决多线程环境下的数据一致性和可见性问题。内存顺序包括: + +Relaxed:不保证顺序性的最宽松内存顺序。 +Consume:保证读操作能看到数据依赖的写操作。 +Acquire:确保读操作可以看到在相应 release 操作之前的所有写操作。 +Release:确保写操作之前的所有操作对其他线程可见。 +Acquire-Release:同时包含 acquire 和 release 语义。 +Sequential Consistent:所有线程看到一致顺序操作的最严格内存顺序。 + +想要了解 C++ 内存的话,值得一读。 + +### 🐕 [Using @_silgen_name to forward declare functions in Swift and improve build times](https://swiftrocks.com/using-silgenname-to-call-private-swift-code) + +[@Cooper Chen](https://github.com/cjlcooper):文章介绍了使用 `@_silgen_name` 属性在 Swift 中前向声明函数以及改善构建时间的方法。作者强调了谨慎使用这一技巧的重要性,并解释了其工作原理和潜在风险。通过示例和技术细节,文章展示了如何使用该属性来提高 Swift 应用程序的构建效率,尽管牺牲了一些类型安全性。最后,作者呼吁 Swift 支持更多类似的功能,以满足开发者对更多控制和灵活性的需求。这对于需要提升 Swfift 编译速度相关内容的开发者有一定的参考价值。 + +### 🐕 [lldb remove randomness](https://bryce.co/lldb-remove-randomness/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何使用 LLDB 调试器去除调试第三方应用时的随机性。通过一个示例程序,演示了生成随机数据并打印出来的过程。文章重点在于展示如何通过设置 LLDB 断点和特定命令,强制 randomData 函数返回固定长度和内容的数据,从而消除随机性。作者分步骤说明了如何先返回固定大小的数据,然后是动态大小但固定数据,最终是动态大小且看似随机但实际一致的数据。这一技巧在需要调试包含随机元素的程序时非常有用,能够提高调试的效率和准确性。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#285-2024.04.15.md b/Reports/2024/#285-2024.04.15.md new file mode 100644 index 000000000..4770d0098 --- /dev/null +++ b/Reports/2024/#285-2024.04.15.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #285 | 2024-04-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/285.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS 17.4/17.4.1 新安装的用户首次启动 IDFA 权限获取失败,以及 workaround](https://forums.developer.apple.com/forums/thread/746432?answerId=784610022#784610022) + +首次新安装 APP 的用户会在通过 ``ATTrackingManager.requestTrackingAuthorization()`` 申请 IDFA 的时候自动失败(即使用户还没有手动点击拒绝),这会对依赖 IDFA 归因或者正在投放的 APP 造成一定影响,论坛也已经有同学给出 workaround(通过 IDFA 弹窗在关闭时会触发 ``UIApplication.didBecomeActiveNotification`` 进行再次判断)。 + +## 文章 + +### 🌟 🐕 [五年沉淀,微信全平台终端数据库 WCDB 迎来重大升级!](https://mp.weixin.qq.com/s/RWCqLD0M_WGCrCcz0oQIcQ) + +[@JonyFang](https://github.com/JonyFang):在接口层面,新版 WCDB 全面支持了 C++、Java、Kotlin、Swift 和 ObjC 这五种主要的终端开发语言,覆盖了 Android、iOS、Windows 、macOS 和 Linux 这五大终端平台。同时,还对 Winq 进行了重写和强化,使开发者能够在各种语言中使用原生语法编写任意 SQL。 + +在功能层面,新版 WCDB 推出了全新的数据备份和修复方案,大幅提升了数据修复率,同时将数据备份的性能消耗降至可忽略不计。此外,还重点推出了数据迁移和数据压缩这两个新功能,让开发者仅通过简单的配置,就能高效处理复杂业务中的数据过度聚集和数据过度膨胀这两大难题。新版 WCDB 还推出了 FTS5 优化和可中断事务等新特性,使开发者在特定场景下可以实现更极致的性能优化。 + +### 🐕 [How to avoid using AnyView in SwiftUI](https://tanaschita.com/swiftui-how-to-avoid-using-anyview/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章讨论了在 SwiftUI 中避免使用 AnyView 的方法。AnyView 是一种类型擦除视图,用于包装其他 SwiftUI 视图,但它会降低 SwiftUI 的性能。文章提出了三种替代方案: +1. 使用 @ViewBuilder 属性:通过在属性或函数上添加 @ViewBuilder 属性,可以将多个视图组合成单个返回类型,而无需使用 AnyView。 +2. 使用 Group 类型:Group 类型允许将多个视图组合成一个视图,而不会影响布局。使用 Group 可以避免使用 AnyView,并可以根据需要组合不同类型的视图。 +3. 使用泛型:当需要存储不确定类型的视图时,可以使用泛型来代替 AnyView。通过使用泛型参数,可以灵活地存储和使用视图,而无需使用 AnyView。 + +### 🐕 [In Search of a Smooth Scroll](https://byla.lt/posts/in-search-of-smooth-scroll/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文记录了作者由于对更平滑滚动的追求而将 LazyVGrid 替换为 NSTableView 的过程,可以见到结果是 NSTableView 确实会有更丝滑的效果,不过作者并不是希望大家认为 SwiftUI 很慢而 AppKit 很快,或者 macOS 上的 SwiftUI 还没有为重要的应用程序做好准备,事实上作者重写过程中 SwiftUI 已经解决了部分问题。最后作者聊了对 AppKit 的非官方见解和反思,也希望大家对两种技术都有着同样的热爱。 + +### 🐎 [Exploring ABI stability, @frozen, and library evolution mode](https://digitalbunker.dev/understanding-frozen-in-swift/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过 `@frozen` 关键字,引申出 Swift 的 ABI 稳定和 library evolution mode。其中 `@frozen` 关键字确保了 `enums` 和 `structs` 的接口不再改变,因此也保证了内存布局的固定,带来了更好的性能。ABI 稳定则使得面得不同的语言版本,swift 库不再需要每次重新编译就可以兼容高版本。而 library evolution mode 是一个编译器能力,开启它后使得编译器会产出额外的用于描述关于库的数据结构、方法等的元数据,确保在不同的语言版本下,这些数据依然保持一致。这三者共同确保了 Swift 库在不同语言版本、不同操作系统版本下的兼容性,并最终带来了更好的的开发体验。 + +## 工具 + +### 🐕 [Mac OS X Debugging Magic](https://web.archive.org/web/20101206131250/http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html) + +[@Cooper Chen](https://github.com/cjlcooper):在 MacOS 开发中,Apple 提供了许多调试工具,以协助开发者针对特定场景进行开发和调试。这些工具中的许多被保留在发布的系统中,供开发者使用以调试其代码。下面列举了一些在 Mac OS X 中的“秘密”调试工具,包括环境变量、首选项、可从 GDB 调用的例程以及特殊文件等。若你正致力于 Mac OS X 软件开发,这个调试工具集合列表将极具帮助。 + + +## 代码 + +### 🐕 COW Macro Package + +[@Kyle-Ye](https://github.com/Kyle-Ye):Swift 的大量标准库内的 struct 出于性能等因素考虑都进行了 Copy On Write(后简称 COW)优化(如 String、Array、Set、Dictionary),但是对于业务自定义的 struct 默认没有此类优化。 + +因此如果业务定义了一个巨大的 struct,在此 struct 作为参数传递过程中,容易产生较大的包大小并且有一定性能影响。 + +对于每个希望开启 COW 的 struct 进行手写优化较为繁琐,下面是本期推荐的两个相关 COW Macro 的开源库,可以帮助我们快速 opt-in 此项优化。 + +- https://github.com/wezzard/COWMacro +- https://github.com/Swift-CowBox/Swift-CowBox + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#286-2024.04.22.md b/Reports/2024/#286-2024.04.22.md new file mode 100644 index 000000000..546bbfdad --- /dev/null +++ b/Reports/2024/#286-2024.04.22.md @@ -0,0 +1,72 @@ +# 老司机 iOS 周报 #286 | 2024-04-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/286.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Xcode Bookmarks](https://useyourloaf.com/blog/xcode-bookmarks/) + +[@Barney](https://github.com/BarneyZhaoooo):Xcode 15 引入了一种新的代码注释和搜索查询书签功能,用户可以通过选择代码行并使用上下文菜单来创建书签,还可以对书签添加描述、分组和标记完成状态,以及保存搜索查询。这项新功能提高了代码注释和搜索结果的管理效率。 + +## 文章 + +### 🐎 [How to define a custom file header for a Swift Package](https://danielsaidi.com/blog/2024/03/21/how-to-define-a-custom-file-header-for-a-swift-package) + +[@zoeGuo](https://github.com/zoeGuo):开发过程中代码的文件头可以包含一些必要信息,Xcode 一般会为我们生成默认的文件头,想要自定义文件头,应该怎么做呢?文章描述了如何为 Swift 包定义一个自定义的文件头,在本地 ` /.swiftpm/xcode/package.xcworkspace/xcshareddata` 目录下添加一个 `IDETemplateMacros.plist` 文件即可,文中例举了 IDETemplateMacros 文件写法。 + + ### 🐕 [Actor reentrancy in Swift explained](https://www.donnywals.com/actor-reentrancy-in-swift-explained/) + +[@Cooper Chen](https://github.com/cjlcooper):本文深入解析了 Swift 中的 actor 重入性,这是管理 actor 内并发任务的关键概念。虽然 actor 确保单线程执行,但异步函数带来的挑战在于它们不总是 atomic 地执行。作者通过示例,说明了同时从本地和远程源读取数据可能导致意外结果的原因,而解决方案涉及管理任务以防止冗余网络调用。作者重点提及了在 actor 的异步方法中考虑重入性以避免错误的重要性,因此理解和解决重入性相关问题对于有效地管理并发至关重要,同时作者强调需要谨慎考虑并采用个性化的解决方案来处理重入性问题。 + +### 🐎 [Splitting Up a Monolith: From 1 to 25 Swift Packages](https://ryanashcraft.com/splitting-up-a-monolithic-swift-package/) + +[@Smallfly](https://github.com/iostalks):这篇文章分享了作者如何将一个大型 Swift 包重构为 25 个较小的包。这个过程中,他解决了对 iCloud 的依赖、代码共享的复杂性、SwiftUI 预览和编译时间问题。通过创建抽象层和依赖注入,成功解耦了核心模型和 CloudKit。 + +重构后,他将包分为纯可重用和特定于 Foodnoms 的两类,提高了代码的模块化和可测试性。虽然面临日志记录的挑战和应用包大小增加,但整体性能提升,SwiftUI 预览也变得更实用。重构思路具有一定的借鉴意义。 + + ### 🐕 [Fetching OSLog Messages in Swift](https://useyourloaf.com/blog/fetching-oslog-messages-in-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何在 iOS 应用程序中使用 OSLog 框架实时检索日志。文章通过导入 OSLog 框架和创建 Logger 对象来开始,并说明了如何在应用的不同区域生成日志。关键部分涉及使用 OSLogStore 以及如何设置起始位置和使用 NSPredicate 进行日志过滤,以提高性能。文章还讨论了使用 OSLogStore 时遇到的一些限制,如检索速度慢,并推荐了 Apple 的 SwiftLog 作为替代方案。最后,提供了一个展示日志的 SwiftUI 视图示例,说明了如何异步获取并显示日志。 + + +### 🐎 [Bar Chart creation using Swift Charts](https://www.avanderlee.com/swift-charts/bar-chart-creation-using-swift-charts/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了 Swift Charts 的一些基础用法, Swift Charts 能够帮助开发者更便捷的呈现图表数据。作者以 Xcode 的编译数据作为示例,展现了如何通过 Swift Charts 构建一个柱状图,并能够调整柱状图的展示范围。同时通过 `foregroundStyle`、`chartForegroundStyleScale` 等 modifier, 我们也能轻松的对柱状图进行分组、改变柱状图颜色等操作。 + + +### 🐕 [QQ 9 “傻快傻快”背后的技术秘密](https://mp.weixin.qq.com/s/nVXE0iSllZ3rFei4t7bR7g) + + [@JonyFang](https://github.com/JonyFang):本篇介绍了 QQ 9 丝滑背后的技术实现,从启动速度,页面刷新,差异算法,预加载和回收,异步布局和渲染等方面介绍了手 Q 在性能方面做的全流程优化,并介绍了几个用户体验提升的场景表现。每一项优化点深入后内容相对复杂,都可以单独拎出来展开说明,文中也提到后续会慢慢分享出来。 + + +## 工具 + +### 🐎 [Mac App 原生内置 Debug 菜单](https://mjtsai.com/blog/2024/03/22/_eventfirstresponderchaindescription/#comment-4059578) + +[@BluesJiang](https://github.com/BluesJiang):这个是开发 Mac App 的隐藏 Debug 菜单。使用 `UserDefaults.standard.setValue(true, forKey: "_NS_4445425547")` 开启。 +开启后会在菜单栏里出现一个 🐞 菜单。这个菜单不依赖 Xcode,跟随 App 启动而启动。它提供了很多方便的辅助,比如 Responder 打印、View Bounds 展示、改变 Appearance 等。推荐尝试。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#287-2024.04.29.md b/Reports/2024/#287-2024.04.29.md new file mode 100644 index 000000000..383844fa8 --- /dev/null +++ b/Reports/2024/#287-2024.04.29.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #287 | 2024-04-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/287.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [RxSwift 6 更新了什么](https://juejin.cn/post/7345687862530113546) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇 [What's new in RxSwift 6 ? +](https://dev.to/freak4pc/what-s-new-in-rxswift-6-2nog) 的译文,文章介绍了 RxSwift 6 的新特性和重要更新,如将 `Binder` 从 RxCocoa 迁移到 RxSwift、使用 `@dynamicMemberLookup` 自动建立 Binders、新的 `withUnretained` 运算符,以及一些运算符重命名 +等。无论你是 RxSwift 的新手还是老手,这篇文章都能提供给你大量有价值的信息,帮助你更好地利用 RxSwift 提升开发效率。 + + +### 🐕 [SwiftUI: Custom View Transition(Navigation) With Matched Geometry](https://blog.stackademic.com/swiftui-custom-view-transition-nav-with-matched-geometry-032552356fc5) + +[@Damien](https://github.com/ZengyiMa):文章主要讨论了如何在 SwiftUI 中使用 matchedGeometryEffect 来自定义视图转换。例如,如何动画化文本的位置,如何以不同的方式动画化多个视图,如何创建一个放大效果等等动画。文章还详细介绍了如何在视图上使用 matchedGeometryEffect 来替换当前的 NavigationStack,这篇文章为那些希望在 SwiftUI 中自定义视图转换的开发者提供了一种新的可能性。 + +### 🐕 [Swift 6 upgrade Preparation](https://medium.com/jamf-engineering/swift-6-upgrade-preparation-0941fbea2db6) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何在 Xcode Project 项目和 Swift Package Manager 项目中如何逐步采用 Swift 6 模式的部分功能,以便为即将到来的 Swift 6 做好准备。除此之外,本文也介绍并讨论了如何处理一些常见的迁移问题,如 Actor 相关的各种报错。 + +完整的 Swift Features 清单可以通过以下 Gist 中提供的脚本获取: + +- https://gist.github.com/ole/478874632fca61869928a0cc0a956972#file-swift-list-features-sh + +## 工具 + +### 🐎 [Periphery](https://github.com/peripheryapp/periphery) +[@Smallfly](https://github.com/iostalks):Periphery 一款专门用于识别 Swift 项目中未使用代码的工具。通过分析项目的源代码,帮助开发者发现并删除那些在项目中没有被引用的代码部分,从而精简代码库,提高代码的可维护性。 + +### 🐕 [Copilot For Xcode](https://github.com/intitni/CopilotForXcode) + +[@Cooper Chen](https://github.com/cjlcooper):Copilot for Xcode 是一个 Xcode 源代码编辑器扩展,为 Xcode 提供 GitHub Copilot、Codeium 和 ChatGPT 支持,包括以下功能: +- 代码建议(由 GitHub Copilot 和 Codeium 提供支持)。 +- 聊天(由 OpenAI ChatGPT 提供支持)。 +- 提示代码(由 OpenAI ChatGPT 提供支持)。 +- 自定义命令将聊天和提示扩展为代码。 +建议开发者都可以尝试使用这个拓展工具,能够大大提高工作效率。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#288-2024.05.13.md b/Reports/2024/#288-2024.05.13.md new file mode 100644 index 000000000..bde234474 --- /dev/null +++ b/Reports/2024/#288-2024.05.13.md @@ -0,0 +1,89 @@ +# 老司机 iOS 周报 #288 | 2024-05-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/288.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [AppStore Connect 提交失败 Workaround](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4537) + +上周陆续有读者在老司机的 App Review 群中反馈提交审核时遇到了奇怪的问题,也有群友提供了解决方案,我们再次汇总如下: + +1. 当遇到 **2.0.0 二进制文件无效** 的问题,可以等待一会,换一个小版本号重新上传,可以解决。 +2. 当遇到 **无法添加以供审核** 的问题,需要在 ICP 备案的输入框中在正常输入备案号后,再额外增加一个空格。即可进行后续流程。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/7585173a-d8ed-431b-b4e5-2b195b0d3350) +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/2a8fb6a0-8706-42b3-982a-d7615cb79f44) + + +## 新手推荐 + +### 🌟 [戴铭的 Swift 小册子](https://github.com/ming1016/SwiftPamphletApp) + +[@AidenRao](https://weibo.com/AidenRao): 小册子是一个使用 Swift、按照声明式 UI 和响应式编程范式开发的开源 macOS 程序,上面的内容主要面向 Swift 零基础的同学,包括 Swift 的知识点、直接可用的小例子和知识点相关的其它资料,推荐 Swift 新手及感兴趣的同学学习使用。 + +### [Safely unwrap optional values in SwiftUI bindings](https://www.polpiella.dev/safely-unwrap-optional-value-in-swiftui-binding/) + +[@zoeGuo](https://github.com/zoeGuo):在 SwiftUI 中 , `$` 符号用于创建一个绑定到可观察对象的引用。但一个可选对象用 `$` 后得到的是一个不可选的对象。那么在这种场景下可以使用 `Binding` 将对象包装,`Binding` 的初始化方法 `init?(_ base: Binding)` 会解包绑定的可选值,并提供一个非可选值,这样就又可以对原来的可选值进行安全解包了。文章中有简洁明了的代码示例,感兴趣的读者可以阅读原文。 + +## 文章 + +### 🐎 [iOS 依赖库版本一致性检测:确保应用兼容性](https://juejin.cn/post/7358011504967925812) + +[@BluesJiang](https://github.com/BluesJiang):本篇主要介绍了一种检测系统库最低版本依赖的方法。核心的思路使用 `otool` 获取依赖的系统库,然后调用苹果的接口来查询系统库支持的最低系统版本。用来解决 App 意外错误引入高于 App 最低支持系统版本的系统库,导致 App 启动崩溃的问题。 + +### 🐎 [淘系两年半 A/B 实验经历,聊聊我理解的“科学实验”](https://mp.weixin.qq.com/s/-durED9M0UMqhT0i2S67lQ) + +[@Smallfly](https://github.com/iostalks):这篇文章主要讲述了作者在淘系两年半的 A/B 实验经历,包括在货架电商和内容电商两个领域的 A/B 实验能力建设。文章中,作者分享了对科学实验的理解和实践,文章中提到了几个关键点: +1. **业务目标科学**:增长目标应该是长期健康、可量化验证的。 +2. **实验设计科学**:在常规实验中,样本组的同质性和样本间的独立性是重要的考虑因素。 +3. **实验数据可用**:强调了 AA 检验的重要性,以确保实验数据的可用性。 +4. **实验分析科学**:在获得可用的数据基础上,关注实验分析的问题,包括确定需要观察的指标和维度,以及如何处理低响应实验。 + +### 🐎 [彻底弄懂 Linux 下的文件描述符(fd)](https://yushuaige.github.io/2020/08/14/%E5%BD%BB%E5%BA%95%E5%BC%84%E6%87%82%20Linux%20%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%EF%BC%88fd%EF%BC%89/#1%E3%80%81%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E4%BE%8B%E5%AD%90%E8%AF%B4%E8%B5%B7/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了 Linux 下的文件描述符(file descriptor)。文件描述符是内核对已经被打开文件所创建的索引。内核维护了一张进程级别的文件描述符表,记录了每个文件描述符对应的文件指针,使得对这些文件进行 I/O 操作的系统调用都可以通过文件描述符来实现。同时系统还维护着系统级别的打开文件表和 i-node 表,这两张表内有关于打开文件更多的信息,包括偏移量、访问模式、权限等。文件描述符表指向打开文件表,打开文件表则又指向了 i-node 表。此外,本文也举例了通过 shell、C 语言、python 等方式打开文件后,文件描述符的实际表现。 + +### 🐎 [OS Style settings view](https://paulpeelen.com/SettingsView) + +[@水水](https://xuyanlan.com/categories/iOS/):如果您正苦恼于不知道怎么给 MacOS 应用添加一个符合 MacOS 风格的设置页面,那么本文给出了简单的代码示例教您如何去实现,敢兴趣的读者可以参考 ~ + +### 🐎 [Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?](https://mp.weixin.qq.com/s/InAzeSa-2YeV2oo6gnykhg) + +[@极速男孩](https://github.com/ztlyyznf001/):本文介绍了 HTTP/3 和 QUIC 协议及其在 Flutter 中的应用,特别是通过 Cronet 库。HTTP/3 基于 QUIC 实现,优化了网络连接的稳定性和效率,支持连接迁移和加密。Cronet 作为 Chromium 的网络堆栈,支持 QUIC 和 TCP,可通过 Flutter 使用,增强移动应用的网络性能。文章还讨论了如何在 Flutter 项目中通过 cronet_http 包和 Dio 库集成 Cronet,利用其在 Android 上的优势,以及 iOS 上用 NativeAdapter 的来支持 HTTP/3。 + +## 播客 + +### 🐢 [SWIFT PACKAGE INDEXING EPISODE 43: Now I ’ m worried our metrics aren ’ t correct! with special guest Holly Borla](https://share.transistor.fm/s/2d4b1ba7) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本期 SwiftPackageIndex 播客和特邀嘉宾苹果的 Swift 语言团队的负责人 Holly Borla 讨论了 Swift 6 的并发特性和语言模式迁移,Swift Package Index 中的 Swift 6 兼容性跟踪项目。同时介绍了一些与并发相关的提案(SE414 和 SE431)和 Swift 软件包。 + +## 工具 + +### [difftastic](https://difftastic.wilfred.me.uk/) + +[@Crazy](https://github.com/jiyan135960):difftastic 是一款专门针对文件对比的工具,这个工具不是简单的逐行对比,会根据语言以及运行环境进行分析,提供更便于阅读对比界面。该工具现在支持多种语言,移动端开发所用的 Swift、Java、Kotlin、Dart 都已经支持。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#289-2024.05.20.md b/Reports/2024/#289-2024.05.20.md new file mode 100644 index 000000000..c92dab321 --- /dev/null +++ b/Reports/2024/#289-2024.05.20.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #289 | 2024-05-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/289.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +有很多朋友最近在后台留言询问 WWDC 24 内参的相关事宜,今年的内参老司机技术会继续主办,还请大家放心,我们会在合适的时间邀请大家共同参与今年的内参创作! + +## 文章 + +### 🐕 [SE-0436: Objective-C implementations in Swift](https://forums.swift.org/t/se-0436-objective-c-implementations-in-swift/71712) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队最近提出了提案 SE-0436,可以用 Swift 来实现 Objective-C 的 Category/Extension,并且让调用者对此毫无感知,就像是 Objective-C 实现的那样,但这个功能的必要性在哪? + +1. **对于大型混编项目来说,Swift 生成的 Header 会严重拖慢增量编译的速度**,这一点在 [#242 期的 抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%](https://github.com/SwiftOldDriver/iOS-Weekly/blob/61670ff7475638f2476c9d302cf39d3c9bd86be1/Reports/2023/%23242-2023.04.24.md?plain=1#L28C4-L28C4) 里有详细的说明,如果是通过这个功能去实现的话,就可以绕开这个问题 +2. **Swift 自动生成的 Header 文件可读性很差**,对于习惯了将 Header 文件作为文档阅读的 Objective-C 工程师来说是灾难般的存在 +3. **可以给 Swift 提供更 Swifty 的接口**,WebKit 早在这个提案之前就[用上了这个功能](https://github.com/WebKit/WebKit/blob/4de0f4880b7b12b8f995bfbe480b41503219ab67/Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaPlayer.swift#L134),给 `WKSLinearMediaPlayer` 加上了 `var isLoadingPublisher: AnyPublisher` 等接口,试想一下如果底层使用的是 Objective-C 实现的话,那这样 Swifty 的接口可能就很难实现了 + +### 🐕 [【 Just For Fun 】 C - 宏开发 - 选取第 n 项参数、按照参数数目展开不同的宏、缺陷](https://zhuanlan.zhihu.com/p/61152480) + +[@Barney](https://github.com/BarneyZhaoooo~):这个系列文章深入探讨了 C 语言宏的高级应用,从可变参数函数的基础用法,到宏定义中参数的选择和计数,再到延迟展开技术,逐步展示了宏在 C 语言中的灵活性和强大能力。文章通过具体示例,详细解释了如何构建能够根据参数数量动态展开的宏,以及如何利用延迟展开来优化宏的行为。这些技巧不仅增强了对 C 语言宏机制的理解,也为宏编程提供了新的视角和解决方案。 + +### 🐢 [每个程序员都应该了解的硬件知识](https://mp.weixin.qq.com/s/Ol9J1ZWevHSjP2ZIyidK-g) + +[@xuyafei86](https://github.com/xiaofei86):在追求高效代码的路上,我们不可避免地会遇到代码的性能瓶颈。为了了解、解释一段代码为什么低效,并尝试改进低效的代码,我们总是要了解硬件的工作原理。于是,我们可能会尝试搜索有关某个架构的介绍、一些优化指南或者阅读一些计算机科学的教科书(如:计算机组成原理)。但以上的内容可能都太过繁琐、细节太多,在阅读的过程中,我们可能会迷失在纷繁的细节中,没法很好地将知识运用到实践中。本文旨在通过多个可运行的 benchmark 介绍常见的优化细节以及与之相关的硬件知识,为读者建立一个简单、有效的硬件心智模型。 + +### 🐎 [存储空间终于算“对”了](https://mp.weixin.qq.com/s/_2dzH99T1r70tYSH8z_0Ow) + +[@Smallfly](https://github.com/iostalks):这篇文章分析了 iOS 系统中 App 显示存储空间与系统显示不一致的问题,并探讨了造成差异的四个主要原因:App 自身大小、进制差异、口径差异和统计路径差异。文章通过实验验证了 iOS 存储空间的显示口径,并介绍了快手 App 如何通过技术改进实现与系统显示对齐,增强了用户体验和信任。 + +### 🐎 [Flutter 3.22 发布,快来看看有什么更新吧?](https://mp.weixin.qq.com/s/wvas9YoP6WQgubmVp9hPUQ) + +[@Crazy](https://github.com/jiyan135960):本篇文章主要介绍了 Flutter 3.22 中更新的一些主要功能与性能优化。JsonCodable 因该是所有 Flutter 开发者比较期待的一个功能了,Json 的序列化问题一直都是 Flutter 的大麻烦,需要借助 build_runner 生成 Dart 代码来解决。有了 JsonCodable 以后会大大加速 Flutter 开发者的开发效率。本次 Flutter 更新还将 Vulkan backend 和 Wasm Native 两个功能实现了落地,让 Web 的渲染速度得到了巨大的提升。剩下更多的更新可以在文章中浏览。 + +## 代码 + +### 🌟 🐎 [时隔五年,IGListKit 迎来 5.0.0 版本更新](https://github.com/Instagram/IGListKit/releases/tag/5.0.0) + +[@zvving](https://github.com/zvving/):时隔五年,Instagram 团队隆重推出了 IGListKit 的 5.0.0 版本(4.0.0 版本的发布时间还是 2019 年 11 月)。这个新版本整合了近年来 Instagram 对 IGListKit 进行的所有增强,引入了后台 diffing 功能,对 scrollToObject: 方法进行了改进,增加了对 Mac Catalyst 的支持,并提供了 IGListAdapter 等更丰富的属性观察与状态回调方式。此外,还对性能进行了优化,并修复了安全性和细节问题,同时带来了一些 Breaking Changes。 + +考虑到这个版本在多年后带来的众多改进和优化,我们强烈推荐已经使用 IGListKit 的团队关注并尝试更新,以期获得更出色的性能、稳定性和新功能。 + +### 🐎 [SwiftSecurity: Modern Swift framework for Keychain API](https://github.com/dm-zharov/swift-security) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftSecurity 是 Apple 安全框架的现代 Swift API (Keychain API、SharedWebCredentials API 等)。通过编译时检查,以更简单的方式保护您的应用程序管理的数据。SwiftSecurity 与其他包装器有些不同,它支持每个钥匙串项目类别,与 CryptoKit 和 SwiftUI 兼容等。 + +## 音视频 + +### 🐢 [The Sound of Software](https://www.notboring.software/words/the-sound-of-software) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 顾名思义,本系列文章讲述如何在软件中使用声音,从声音的本质开始阐述,到工具推荐,到整体设计,一连串文章一步步带你创造酷炫的声响;该系列由 [notboring](https://www.notboring.software/) 产出;[notboring](https://www.notboring.software/) 崇尚酷炫的交互和极致的影音体验 , 他们在 App Store 上有诸多酷炫的应用 , 有声音软件开发的同学 , 强烈推荐学习 ! + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#290-2024.05.27.md b/Reports/2024/#290-2024.05.27.md new file mode 100644 index 000000000..664b56c5e --- /dev/null +++ b/Reports/2024/#290-2024.05.27.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #290 | 2024-05-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/290.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Incorrect bundle purchase payments: Fixed!](https://lapcatsoftware.com/articles/2024/5/2.html) + +作者 5 月初发现苹果从 24 年 2 月起,对于应用内包含了 [App 套装销售(Offering app bundles)](https://developer.apple.com/cn/app-store/app-bundles/) 的 App ,会少给予开发者一份原本 App 的购买费用,即:错误地从 App 套装销售 的购买收益中两次减去了之前购买的应用程序的价格。 + +在作者提交了反馈后,苹果回电问题已被发现,所有受影响的开发者将得到对应损失的补偿。 + +## 文章 + +### 🐢 [探讨跨平台技术与跨平台 UI 框架及 Kotlin Multiplatform 在 bilibili 的实践](https://mp.weixin.qq.com/s/b8_s1iboJMEdEvyMd59u-g) + +[@JonyFang](https://github.com/JonyFang): 本文以相对客观的事实数据比对了目前移动领域的多个跨平台语言的横评,也相对主观的针对当前的大环境下的一些跨平台技术的思考及 B 站的选型做了一些解读。希望可以为读者开阔思路,也希望如果能拉拢到同样观点的大佬们共同一起反哺基于 Kotlin 跨平台的生态的建设。从而做到社区全局收益。后续 B 站会持续继续输出关于 KMP 技术的技术及实践的深度文章,也会持续关注跨平台技术的发展,希望能够在这个领域有更多的交流。 + +### 🐎 [Is Dynamic Isolation Bad?](https://www.massicotte.org/dynamic-isolation) + +[@zoeGuo](https://github.com/zoeGuo):文章讨论了 Swift 并发中的动态隔离与静态隔离的区别和应用。静态隔离通过使用像 `nonisolated`,`isolated`,`actor`, 和 `global actor` 这样的关键字来标记类或代码块,确保它们在编译时就定义好运行环境,是由编译器来处理的隔离。动态隔离使用运行时结构如锁来实现,需要在运行时正确地协调。文中举例用两种方式实现原子性,静态隔离固然安全,但动态隔离灵活便捷,要选择合适的方式解决并发问题。 + +### 🐕 [Faster Git checkouts on NFS and SSD with parallelism](https://matheustavares.gitlab.io/posts/parallel-checkout) + +[@AidenRao](https://weibo.com/AidenRao): 本篇文章主要介绍在大型存储库上使用并行 checkout 功能,此功能可将某些 checkout 操作在 SSD 上的速度提高 3.6 倍,在 NFS 挂载上的速度提高 4.5 倍。且所有使用到 checkout 机制的 git 命令都能收益,包括:clone, reset, switch, restore, merge 等。 + + +### 🐕 [计算机系统篇之链接(15):共享库拦截技术之运行时库打桩](https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8815%EF%BC%89%EF%BC%9A%E5%85%B1%E4%BA%AB%E5%BA%93%E6%8B%A6%E6%88%AA%E6%8A%80%E6%9C%AF%E4%B9%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E5%BA%93%E6%89%93%E6%A1%A9%EF%BC%88%E4%B8%8A%EF%BC%89) + +[@Damien](https://github.com/ZengyiMa): 本文主要讨论了 Linux 系统中的运行时库打桩技术,这是一种允许截获对共享库函数的调用,取而代之执行自己代码的技术。文章详细解释了运行时库打桩的实现原理,以及如何在加载程序时拦截标准库的 API(以 malloc/free 为例)的实现过程。 + +### [Scaling ChatGPT: Five Real-World Engineering Challenges](https://newsletter.pragmaticengineer.com/p/scaling-chatgpt) + +[@老驴](https://weibo.com/u/6090610445):这篇文章是采访了来自 OpenAI 的 Evan Morikawa,讲述了他们在爆炸增长的用户量下,是怎么解决一些难以解决的问题工程问题的。 + +他主要提到了下面的几点: + +1. KV 缓存和 GPU RAM 的管理。 +2. 批处理大小的优化。 +3. 正确的度量指标。 +4. 寻找 GPU 资源。 +5. 缺乏自动扩展的能力。 + +这些问题在比较早期的公司都比较容易遇到,但是像 OpenAI 这次这么快速爆炸的用户量增长,应该也算是比较少见的了。如果对 OpenAI 感兴趣的同学,建议读一读原文。 + +## 代码 + +### [HandVector](https://github.com/XanderXu/HandVector) + +[@BluesJiang](https://github.com/BluesJiang):这个是一个在 VisionOS 平台上实现手势识别的开源库。主要是通过 ARKit 拿到手部骨骼节点后,通过余弦相似的算法,来评估手部骨骼节点与目标手势的相似度,以此来支持手势识别。还可以预先录制自己期望的手势作为匹配目标,实现任意手势的识别和匹配。 +本开源库还介绍了一种如何在模拟器中调试手势识别算法的方法,因为官方模拟器并没有提供访问摄像识别手势的能力。方案主要是使用 Google 的 MediaPipes 来代替 Vision Pro 真机上的手势识别能力,然后将数据投入 Swift 代码中进行测试。 +这个也是少有的在 Swift Native 侧开源的基础算法仓库之一,可以提供参考和借鉴。 + +## 书 + +### 【 iOS 】 Apple 增强现实(Apple Augmented Reality)「[上卷](https://bytedance.larkoffice.com/docx/doxcnYJ8ZNlDkdguWyuxrT9Vrje)」「[下卷](https://bytedance.larkoffice.com/docx/doxcncDbOnTfHuJDEXpTx3Cwwpb)」 +[@Smallfly](https://github.com/iostalks):这是一本 raywenderlich 出品的 AR 教程,国内的同学翻译。这本书是为初中级 iOS 开发者设计的,旨在帮助读者使用 Swift 构建苹果平台上的沉浸式增强现实(AR)体验。 + +书中涵盖了以下主题: +- **Reality Composer & Reality Files**: 学习如何使用 Reality Composer 创建 AR 体验,以及如何使用 Reality Converter 和 USDZ 文件。 +- **RealityKit**: 一个用于构建丰富 AR 体验的框架。 +- **Facial Blend Shapes**: 学习如何使用面部融合形状来创建反应用户面部表情的 AR 面具。 +- **ARKit**: 苹果的 AR 开发框架,用于创建交互式 AR 体验。 +- **Raycasting & Physics**: 学习如何在 AR 应用中使用射线投射和物理引擎。 +- **ECS & Collaborative Experiences**: 探索如何创建多人共享的 AR 体验。 + +书籍分为多个部分,每个部分都通过项目来教授特定的技能和概念。例如,使用 Reality Composer 创建交互式虚拟鼓套件,使用图像锚点和跟踪创建交互式 AR 商务名片,以及使用 RealityKit 和面部跟踪创建类似 Snapchat 的面部滤镜应用等。 + +如果你对 AR 开发感兴趣,可以直接访问提供的链接。 + +### [【 iOS 】并发(Concurrency)](https://bytedance.larkoffice.com/docx/doxcnMYZcL7DvPKuE9IN0iJ4eKh) + +[@DylanYang](https://github.com/Dylan19Yang):这是一本 raywenderlich 出品的 iOS 并发(Concurrency)教程,国内的同学翻译。这本书能够帮助 iOS 初学者理解并发的概念,并且快速上手实践。需要注意的是,这本书中讲述的并发是以 GCD(Grand Central Dispatch)实现的,而非最新的 Swift 并发框架(Swift Concurrency),考虑到 GCD 依然是当前的主流,这本书非常值得一读。 + +书籍分为多个章节,详细解释了并发的概念,以及 GCD 和 Operations 的原理和实际使用的方式。本书使用了诸多的代码示例使读者便于理解,尤其是最后通过 CoreData 的案例展现了并发如何在实际中应用。除此之外,本外也讲述了如何通过 Thread Sanitizer 来分析并发中常见的数据竞争问题。 + +整体而言,这是一本内容翔实的并发教程,感兴趣的读者可以收藏后反复品读。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#291-2024.06.03.md b/Reports/2024/#291-2024.06.03.md new file mode 100644 index 000000000..b95b8a4a0 --- /dev/null +++ b/Reports/2024/#291-2024.06.03.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #291 | 2024-06-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/291.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +明天我们就将推送 《WWDC24 内参》的报名信息,希望参与创作的同学不要错过哦~ + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [深入理解内存分配](http://djs66256.github.io/2018/04/04/2018-04-04-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D/) + +[@莲叔](https://github.com/aaaron7):内存问题一直是 iOS 平台上最常见的稳定性问题,尤其在以 OC 为主的应用中。我们在排查野指针崩溃的问题时遇到的难点往往是崩溃点和问题点往往不在一起。这篇文章通过分析 iOS 平台内存分配的原理来非常严谨的解释了这个现象的原因,非常值得大家学习。之后作者还提出了一种定制内存分配策略的实现方式,对于精细化的性能分析或者特定应用场景分配优化都是不错的方向。 + +### 🐕 🌟 [Tricking iOS Into Animating App Icons](https://bryce.co/animated-app-icons/#the-problems) + +[@水水](https://www.xuyanlan.com/categories/iOS/):如何让你的 APP 图标动起来?这是一个很有意思的事情,文本作者从系统提供的切换 APP 图标 的 API 实现中,一步步通过反编译,解决了弹框提醒、进入后台等问题,实现了 APP 的动态图标。并附带有 Github Demo 实现 [AnimatedAppIcons](https://github.com/bryce-co/AnimatedAppIcons),效果如下: + +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/d89aceaf-cfd9-4a3b-ace6-c766682d664c) + +### 🐕 [Copy on Write Performance Measurements](https://github.com/Swift-CowBox/Swift-CowBox-Sample) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 24 年 04 月 15 日期推荐的 COW 库后续,作者使用 Benchmarks 和 Instruments 对他的 COW 库进行了详细的性能评估。对性能评估和 COW 细节感兴趣的读者欢迎阅读。 + +### 🐢 [Build your next website in Swift](https://www.hackingwithswift.com/articles/266/build-your-next-website-in-swift) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者借由 WWDC 2019 上苹果用来介绍 result builders 的 HTML 风格的代码作为引子,一步一步地展示了如何通过 Swift 的各种语法构建出一个类 HTML 风格的开发框架,并最终输出 HTML 代码,使得 Swift 开发者可以不必精通 HTML 就可以通过 Swift 写出 HTML 代码。同时写 Swift 代码相比直接写 HTML 又有更好的编译校验,提高了可靠性。在这个过程中,作者也介绍了 result builders 的用法和它的一些特性。最后作者揭示了这个框架的整体构思过程,当你回看时会发现这其实和 SwiftUI 如出一辙。 + + +### 🐕 [Always correct gradient text in UIKit](https://nemecek.be/blog/143/always-correct-gradient-text-in-uikit) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章提供了在 UIKit 中为 UILabel 创建渐变文本的解决方案。初始方法是通过 UIImage 生成 UIColor,但存在问题:当 UILabel 的 frame 大于文本内容时,渐变显示不完整。解决方案包括使用 AutoLayout 居中渐变或设置合适的约束,或者使用 UIStackView 子类来自动布局,确保渐变正确渲染。文章强调,渐变渲染应作为最后步骤进行,以适应当前文本的边界。此方法也适用于 UITextView。 + +### 🐢 [一文搞懂七种基本的 GC 垃圾回收算法](https://mp.weixin.qq.com/s/RSWYSAzpvPJD056vZDQPig) + +[@Crazy](https://github.com/jiyan135960):本篇文章是一篇非常详细的关于 GC 算法的讲解文章,仔细的阅读本文不仅可以让你理解现有的七种基本的 GC 算法,更可以应用在面试中,让你在面试中给面试官留下深刻印象。本文先介绍了 GC 算法的起源与基本概念,其中主要讲解了 GC 算法的性能评价标准。基础讲解完之后本文开始详细讲述了 GC 的七种基本算法的原理与改进方法,其中包括:标记-清除法、引用计数法、GC 复制算法、标记-压缩算法、保守式 GC 、分代垃圾回收、增量式垃圾回收。在文章的最后作者更是用一张图来简明扼要的对七种算法进行了对比,将各个算法的优缺点都写在了表格之中。本文是一篇值得大家反复仔细阅读的文章,无论是工作中还是面试中对大家都会有很深的帮助。 + +## 音视频 + +### [WWDC Index](https://nonstrict.eu/wwdcindex/) + +[@EyreFree](https://github.com/EyreFree): WWDC 会议的非官方索引,包含 2000 年至 2023 年 3430 次会议的资源,以及各种技术讲座,比较完整。此网站不隶属于苹果公司,所有内容仅供参考。感兴趣的同学可以收藏学习。 + +### [Developing An Inclusive Mindset](https://david-smith.org/blog/2024/04/22/new-post/) + +[享耳先森](https://github.com/iblacksun): 如果你的产品在考虑或已经做了无障碍适配,建议看看这个视频。作者 David Smith 是独立开发者,开发了 `Pedometer Plus+` 等应用,视频里重点介绍了他对 ` 包容性设计 ` 的认知发展过程:无障碍适配不仅仅是 `Accessibility API` 适配这么简单,而应该从更全局的角度来审视整个设计。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 心光团队 - 心光 App - iOS/Android/UI/UX/资深运营增长专家 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#292-2024.06.10.md b/Reports/2024/#292-2024.06.10.md new file mode 100644 index 000000000..6a0e35062 --- /dev/null +++ b/Reports/2024/#292-2024.06.10.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #292 | 2024-06-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/292.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [【老司机技术出品】 WWDC24 内参目录(更新中)](https://wwdc-reference.feishu.cn/wiki/QsFQwuOgcirBZck2xorcGtwUnKb?table=tblETPZEPEmxZ8gy&view=vewysxfUqf) + +今年我们如期带来 Session 的汇总,并会在每天推送当天新放出的 Session ,欢迎大家关注更新。 + +## 文章 + +### 🌟 🐕 [What Does spacing = nil Mean in SwiftUI? ](https://fatbobman.com/en/posts/spacing-of-swiftui/) + +[@zoeGuo](https://github.com/zoeGuo):作者通过探讨子视图间不一致的间距问题,深入分析了 spacing 参数的默认值 nil 所代表的含义。作者从“是什么”、“为什么”、“怎么用”的角度,分析了 SwiftUI 中 spacing 的构成和原理。对开发者在处理复杂布局、追求 UI 细节时有很大帮助,掌握一些 spacing 技巧也能帮助实现一些用传统方法难以达到的布局效果。 + +### 🐎 [How Do You Know Whether or Not SwiftUI Previews and Preview Content Are Excluded From App Store Builds?](https://jaredsinclair.com/2024/05/20/preview-content.html) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 部分同学写 Preview 代码可能没有加 `#if DEBUG` 的习惯,理想情况下也确实不用加。Preview 代码不会被实际上游代码引用,因此直觉是不用 `#if DEBUG` 也不会出现在最终代码中。本文介绍了目前 SwiftUI Preview + Xcode 的一些 bad case,并建议大家目前对于 Preview 代码还是保持写 `#if DEBUG`。 + +### 🐎 [Do NOT init State externally in SwiftUI](https://samwize.com/2024/05/08/do-not-init-state-externally-in-swiftui-view/) + +[@JonyFang](https://github.com/JonyFang): 这篇文章详细解析了为何不应在 SwiftUI 中外部初始化 `State`,并提供内联初始化的正确姿势及其他解决方案,避免视图更新问题。 + +### 🐎 [Swift 集成 KSCrash IOS 崩溃跟踪](https://bin.zmide.com/?p=1220) + +[@kemchenj](https://kemchenj.github.io/):本篇文章讲解了在 Swift 项目中集成 KSCrash 进行 iOS 应用崩溃日志跟踪的方法,并提供了将日志输出到指定文件的解决方案。作者详细介绍了 KSCrash 的配置和自定义输出文件的实现步骤,包含代码示例,帮助开发者更好地管理和分析应用崩溃信息。 + +> 推荐人:[PBK-B](https://github.com/PBK-B) + + +### 🐕 [Boost Performance by Over 100x Using the Accelerate Framework](https://getstream.io/blog/accelerate-framework/) + +[@BluesJiang](https://github.com/BluesJiang):这篇文章简单介绍了苹果自带的框架 Accelerate 的应用范围和作用。因为 Accelerate 框架是比较集中在数据特定领域的加速框架,比如视频、图片、音频、科学计算等,所以了解的人不多。本文给出了他们使用 Accelerate 框架的两个应用,并且已经开源,发现这个框架相比于市面上泛用的 C++ 框架有这个更好的计算性能和能效优势,解决了他们在使用常规并行计算时依旧会产生的延迟,并且也显著降低了内存消耗。这个得益于 Accelerate 针对苹果设备的高度优化,并且是苹果自己也在使用的高性能计算框架。 +如果你也有类似的实时计算需求,不妨研究一下这个框架,说不定有意外之喜。 + +### 🐎 [Designing a Declarative API](https://www.mobilesystemdesign.com/blog/declarative-api-design/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过开发一个对用户输入进行验证的 Validator 的例子,一步步为大家揭示了如何去设计一个声明式风格的 API。对于不太了解声明式编程的同学来说 SwiftUI 就是一个非常典型的声明式的开发框架。作者对于设计声明式 API 的一个重要思想就是,我们应该优先聚焦在最终的代码应该如何被展现的逻辑和结构上,然后才轮到讨论具体的控制流。同时作者也通过例子证明了声明式编程可以和 UI 无关,也并不一定意味着包含链式调用。 + +### 🐕 [几个在 SwiftUI 中使用惰性容器的技巧和注意事项](https://fatbobman.com/zh/posts/tips-and-considerations-for-using-lazy-containers-in-swiftui/) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了在 SwiftUI 中使用惰性容器的几个技巧和注意事项。惰性容器如 List 和 LazyVStack 在展示大型数据集时非常高效,它们只在需要时动态构建和加载视图,从而提升应用性能和内存利用效率。文章提到了自定义遵循 RandomAccessCollection 协议的数据类型,以优化数据源的性能和内存使用。此外,还介绍了实现无限数据加载的方法,以及 id 修饰器对 List 懒加载机制的影响等。这些技巧和注意事项能够使开发者在 SwiftUI 中保持流畅的用户体验和高效的资源使用。 + +## 代码 + +### 🌟 🐕 [ZippyFormat](https://github.com/michaeleisel/ZippyFormat) + +[@EyreFree](https://github.com/EyreFree): ZippyFormat 是一个更快版本的 NSString stringWithFormat 方法,在 iOS 端可以显著提升字符串格式化的性能。它通过直接将格式化参数追加到 char* 缓冲区,并仅在最后创建 NSString 来优化性能。ZippyFormat 还利用堆栈来避免 NSMutableString 产生的中间堆分配。此外,它在追加格式化参数时无需执行验证,因为已经知道数据是有效的 UTF-8。对于常见的 %@ 参数如 NSNumber、NSDictionary、NSArray 等,ZippyFormat 通过直接复制已知的输出到缓冲区,避免了调用 [object description] 的开销。总的来说 ZippyFormat 通过在较低层次上操作,避免了 Apple 原生实现中不必要的抽象和验证,从而显著提升了字符串格式化的速度。它是一个非常值得尝试的性能优化工具。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#293-2024.06.17.md b/Reports/2024/#293-2024.06.17.md new file mode 100644 index 000000000..384c3b3b6 --- /dev/null +++ b/Reports/2024/#293-2024.06.17.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #293 | 2024-06-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/293.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Bad practice: not using a ButtonStyle](https://www.swiftwithvincent.com/blog/bad-practice-not-using-a-buttonstyle) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了一些不使用 ButtonStyle 的 bad case,一篇关于 SwiftUI ButtonStyle 的入门科普。 + +## 文章 + +### 🌟 🐕 [QQ 客户端性能稳定性防劣化系统 Hodor 技术方案](https://mp.weixin.qq.com/s/ng_R0s9tAsFCdc2O1JE_Pw) + +[@JonyFang](https://github.com/JonyFang): 手 Q 的防劣化系统命名为 Hodor 系统,从 2021 年 10 月开始研发,历时近三年迭代至今。系统涉及验证闭环、群控机架搭建等复杂过程,包含不少行业内独创方案。与厂商合作进行底层问题沟通,并在 2024 年拓展至 QQ 桌面客户端。系统目前已在 QQ 各平台落地,方案可做借鉴。 + +### 🐎 [Comparing Swift Compiler Performance on Type Inference Part I Strings, Numbers, Arrays, Dictionaries and Constructables](https://lucasvandongen.dev/compiler_performance.php) + +[@kemchenj](https://kemchenj.github.io/): 这篇文章比较了 Swift 编译器在进行类型推断时的性能,特别是在字符串、数字、数组、字典和可构建类型的初始化方面。作者通过基准测试发现,使用未类型化的字面量初始化通常最快,而使用 `.init()` 的方式最慢。特别是在复杂上下文中,例如计算属性,`.init()` 的性能下降明显。文章还指出,不同版本的 Xcode 在编译性能上的差异,并提出了优化编译时间的具体建议。 + +### 🐎 [iOS 18: Notable UIKit Additions](https://www.swiftjectivec.com/ios-18-notable-uikit-additions) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 iOS 18 中 UIKit 一些值得注意的新增功能 : +- 自动 Trait 跟踪 : UIKit 会自动检测某些生命周期函数中涉及的 Trait 变化 , 并调用相应的更新函数,减少了开发者需要手动注册特征变化监听的代码。 +- UIUpdateLink: UIUpdateLink 提供了比 CADisplayLink 更好的性能和电池效率 , 可用于复杂动画和绘制应用程序。 +- 更多符号动画 : 新增了摇摆、呼吸和旋转等三种新的符号动画效果。 +- 自定义文本格式化 : 开发者可以自定义文本编辑器中显示的格式化工具,默认关闭需要手动 opt-in。 + +### 🐎 [Rust - 性能超越 Kotlin 的跨平台方案](https://mp.weixin.qq.com/s/b8lHRfk5G2yN7pkoURU7CA) + +[@Smallfly](https://github.com/iostalks):这篇文章讨论了跨平台开发技术,指出 Rust 由于内存安全、并发安全和 WebAssembly 支持,成为 C/C++ 的替代品,特别适合处理跨平台业务逻辑。文章分析了桥接、IPC 和 Canvas 绘制等跨平台方案,并提出使用 Rust 作为「前端中的后端」,通过 protobuf 等高效序列化方式与原生平台通信。Rust 在性能上超越 Kotlin Native,适合开发底层库。作者建议 Rust 可替代 C++ 用于跨平台开发,提供更现代的语法和更安全的代码。 + +## 代码 + +### 🌟 🐕 [o3d](https://mp.weixin.qq.com/s/_EaqpWF-CgCgX0sTkXoHsw) + +[@Damien](https://github.com/ZengyiMa): o3d 是一款 Flutter 3D 渲染插件,它是一个能够在 Flutter 上渲染 glTF 和 GLB 格式 3D 模型的 widget 插件,支持 Android,IOS,Web 三个平台,不仅支持加载本地文件,而且支持加载在线文件。 + +### 🐎 [swift-testing-revolutionary](https://github.com/giginet/swift-testing-revolutionary/) + +[@DylanYang](https://github.com/Dylan19Yang): swift-testing-revolutionary 是一个 Xcode 插件,可以帮助开发者快速将自己现有项目中的的 XCTest 框架的测试代码自动迁移到苹果最新推出的 swift-testing 测试框架中,插件支持了大部分的代码转化,但仍有小部分需要人工处理。你也可以通过 Command Plugin 或者命令行工具来使用它。 + +### [Cocoapods-sled 让 iOS 组件二进制化变得简单](https://juejin.cn/post/7375419781132042267) +[@莲叔](https://aaaron7.github.io):二进制化是加快编译速度的常见手段,很多大厂在这个方向都做过不小的研究。但目前行业上还缺乏比较泛用的方案。cocoapods —— sled 这个插件就是为了解决这个问题,能针对 pod 进行二进制化并且能灵活的切换二进制和源码构建。有类似需求的小伙伴可以试试。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#294-2024.06.24.md b/Reports/2024/#294-2024.06.24.md new file mode 100644 index 000000000..4185f872a --- /dev/null +++ b/Reports/2024/#294-2024.06.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #294 | 2024-06-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/294.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [使用 Swift 6 语言模式构建 Swift 包](https://juejin.cn/post/7376444924425011210) + +[@AidenRao](https://weibo.com/AidenRao): Swift 6 带来了许多重要的新特性,如数据隔离和数据竞争安全检查,这些特性有助于编写更安全、更高效的代码。然而,这些新特性并不会自动启用,需要通过 Swift 6 语言模式显式开启。通过下载和安装 Swift 6 工具链,并在命令行或包清单文件中启用 Swift 6 语言模式,我们可以提前体验和适应这些变化。尽管新特性带来了一些学习和调整成本,但它们最终会使我们的代码更加健壮。 + +### 🐎 [Here are 3 advanced tips in Swift](https://www.swiftwithvincent.com/blog/here-are-3-advanced-tips-in-swift/) + +[@DylanYang](https://github.com/Dylan19Yang): 作者在本文中介绍了三个知识点 +1. enumareted 返回的 index 永远是一个从 0 开始的计数器,它与实际数组的 index 是不保证相等的,像 ArraySlice 这种 index 不从 0 开始的情况就会出现问题。更稳妥的情况是使用 zip 组合 indices 或者使用 Algorithms 库的 indexed 方法来进行遍历。 +2. 多层嵌套的循环前可以加上标签,方便在内层循环中需要时直接 break 外层循环。 +3. 非枚举类型也可以通过方法重载来使用模式匹配。 + +### 🐕 [A preview of our upcoming UIKitNavigation library](https://www.pointfree.co/blog/posts/145-a-preview-of-our-upcoming-uikitnavigation-library) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍了即将发布的 UIKitNavigation 库,这是一个为 UIKit 设计的状态管理和导航工具库,灵感来源于 SwiftUI。它包括状态观察、双向绑定和状态驱动导航等功能,旨在简化 UIKit 应用开发。此外,库的工具基于纯 Swift 构建,具有跨平台潜力。 + +### 🐕 [node-swift: Write NodeJS native modules in Swift](https://github.com/kabiroberai/node-swift) + +[@EyreFree](https://github.com/EyreFree):NodeSwift 是一个让 Swift 与 Node.js 无缝对接的库。它具有以下优点 : + +- 安全:充分利用了 Swift 的内存安全和自动引用计数,无需手动管理内存,避免了内存相关的问题; +- 简单:提供了不同层次的 API,适应不同的需求,并且使用渐进式的方式让开发者循序渐进地使用; +- 原生:NodeSwift 的 API 设计遵循 Swift 的惯用法,例如使用 Swift 的 Dynamic Member Lookup 特性让互操作更加自然; +- 全面:在 Swift 中可以访问几乎所有的 Node.js API,包括操作 JavaScript 对象和调度事件循环等; +- 跨平台:支持 macOS、Linux、Windows 甚至 iOS 等多个平台; +- 高效:直接在宿主平台上运行 Swift 代码,相比 WebAssembly 拥有更好的性能,且可以直接访问系统底层 API。 + +NodeSwift 是 Swift 与 Node.js 互操作的优秀方案,帮助开发者用 Swift 构建 Node.js 模块,或在 Swift 应用中引入 Node.js 的生态,为相关应用开发带来更多可能性。 + +### 🐎 [Getting started with Swift Testing](https://www.polpiella.dev/swift-testing) + +[@Smallfly](https://github.com/iostalks):Swift Testing 是由 Apple 在 2024 年的 WWDC 上介绍的现代、表达性强、基于宏的测试库,旨在替代 XCTest 用于编写单元测试。文章详细介绍了如何开始使用 Swift Testing,如何使用它编写测试,以及如何将现有的 XCTest 测试迁移到新库中。 + +### 🐕 [Environment & Preference Updates](https://talk.objc.io/episodes/S01E409-environment-preference-updates?t=63) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文讨论了 SwiftUI 的视图更新在环境和首选项更改方面的一些微妙之处,并通过简单的例子来一步步解释,感兴趣的读者可以通过本文示例代码进行验证 SwiftiUI 上的环境值、首选项和视图更新上的一些独特点(附视频)。 + +## 代码 + +### 🐕 [Enable XcodeLLM for ChinaSKU Mac on macOS 15 Beta 1](https://gist.github.com/Kyle-Ye/4ad1aa92df3a31bd812487af65e16947) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Gist 中介绍了如何使用 lldb / DYLD_LIBRARY_INSERT 方式在 macOS 15 Beta 1 上给国行 Mac 设备启用 XcodeLLM 的方案。 + +> 警告:上述方式均需要关闭 SIP,请提前了解关闭系统完整性保护的风险再操作。 + + +### 🐎 [分析 XPC 通信的图形界面](https://github.com/chichou/XpcScope) + +[@Damien](https://github.com/ZengyiMa): XPC 是 macOS / iOS 安全研究无法忽视的一个点,本项目是模仿 Wireshark 的界面,提供图形界面分析用户态进程之间的通信。 + +## 音视频 + +### 🐢 [So You Think You Know Git Part 2 - DevWorld 2024](https://www.youtube.com/watch?v=Md44rcw13k4) + +[@BluesJiang](https://github.com/BluesJiang): 这个视频介绍了很多 Git 的高级用法,比如 git switch、 Git rebase, git LFS,git scalar,git worktree,gitbutler 等高级用法。里面对每一个功能都做了简要的说明,可以根据自己的兴趣酌情观看。 + +比较有特点的是 git scalar 一个为大 git 仓库做了优化的 git 命令,git worktree、gitbutler 能让你在同一个仓库里快速切换功能分支,加速你多 feature、bugfix 的开发。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#295-2024.07.01.md b/Reports/2024/#295-2024.07.01.md new file mode 100644 index 000000000..fee22748a --- /dev/null +++ b/Reports/2024/#295-2024.07.01.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #295 | 2024-07-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/295.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +今年的内参创作正在紧锣密鼓的展开,首篇文章已经发布。目前 空间计算 等主题还有重要 Session 期待大家的创作,可以[填写问卷](https://docs.qq.com/form/page/DZWZPZk1seFJWWURG)继续报名:) + +### 🌟 [WWDC24 10195 - Go further with Swift Testing](https://xiaozhuanlan.com/topic/5946873021) + +[@Zac](https://github.com/jihongboo):Swift Testing 是 Swift 团队推出的一个全新的测试框架,集合了原生、开源、跨平台、高效、易用、IDE 无缝集成等新特性。文章从 0 开始介绍如何使用 Swift Testing ,对比了与 XCTest 的差异,最后对 Swift Testing 以及单元测试的相关问题进行了探讨。 + +## 新手推荐 + +### 🐢 [Flutter 面试八股之深入理解 Dart 异步实现机制](https://mp.weixin.qq.com/s/OTYt2efBQOYuc5ko_PU1iw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 日常开发中用到的各种异步机制你都了解其运行原理么 : Future, Timer, isolate, Runner; 他们跟 Thread 又有什么关系?本文由 GYSTech 提供,详细阐述了几个异步机制的深层原理,同时清晰的展示各种关联,带你详细了解 Flutter 异步机制;最后小编推荐有英文阅读能力的同学同时[阅读 Dart VM 机制讲解](https://mrale.ph/dartvm/),可以加深对于 Flutter 底层运行的了解. + +## 文章 + +### 🐎 [All new frameworks presented at WWDC24](https://marcoeidinger.github.io/appleframeworks/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个关于 Apple 公共框架的在线资源页面,为开发者提供了一个全面、准确、易用的 Apple 公共框架查看和搜索平台,极大地便利了开发者在 Apple 生态系统中进行框架选择和开发工作。 + + +### 🐎 [Reverse Engineering Photos' New Search UI](https://sebvidal.com/blog/reverse-engineering-photos-search-ui/) + +[@Damien](https://github.com/ZengyiMa/):文章介绍了 iOS 18 中 Photos 应用搜索界面的逆向工程分析。作者探索了创建与键盘背景融合的自定义搜索栏的技术,并通过调试和使用 Objective-C 运行时方法,成功复现了这一效果。最后,作者提供了一个 GitHub 示例项目,展示了如何将自定义搜索栏集成到应用中。 + +### 🐕 [Preparing your App Icon for dark and tinted appearance](https://www.createwithswift.com/preparing-your-app-icon-for-dark-and-tinted-appearance/) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了在 iOS 18 中引入的关于应用图标的新要求,提供三种不同版本的应用图标:亮模式、暗模式和有色(tinted)模式。文章提供了关于设计这些图标的建议和注意事项,包括暗模式下的颜色选择和有色模式下的灰度图像要求。此外,还介绍了如何使用苹果提供的设计资源和模板来支持开发者和设计师创建可自定义的应用图标。 + +### 🐕 [SwiftData vs Realm: Performance Comparison](https://www.emergetools.com/blog/posts/swiftdata-vs-realm-performance-comparison/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过自己写的测试 Demo 深度对比了成熟的社区开源产品 Realm 以及 Apple 新推出的 SwiftData 的性能差距。总的来说得益于 Realm 使用的轻量化的对象和 mmap 的内存管理方案,Realm 在大多数场景下尤其是处理大量数据的时候都有远超 SwiftData 的性能表现,部分差距可达 3-10 倍。但是 SwiftData 在复杂数据查询和少量数据(<=10000)时的更新场景下也有优势。除开性能表现外,SwiftData 相较于 Realm 而言还是一个不够成熟的框架,比如最低支持 iOS 17+ 以及依然存在若干 bug 等,不过 SwiftData 支持索引,这对大数据集有一定帮助。以上这些都是开发者在做数据库的方案选择时可以考虑的因素。 + +## 工具 + +### 🐎 [riffo.ai:AI 文件自动整理工具](https://riffo.ai) + +[@EyreFree](https://github.com/EyreFree):Riffo 是一款革命性的 AI 文件命名工具,旨在帮助用户告别杂乱无章的文件名,节省大量文件整理时间。它内置于菜单栏中,只需单击即可使用。Riffo 支持各种常见文件格式,如图片、Word 文档、PDF 等,让文件管理变得简单高效。用户可以自定义命名规则,Riffo 就会自动为文件批量重命名,实现无人工干预的文件管理。凭借并行处理技术,Riffo 可以在几秒钟内完成大批量文件的重命名,目前支持 macOS 系统。推荐每一位被文件管理所苦的用户尝试使用。 + +### 🐎 [Installing macOS Sequoia Beta in a Separate APFS Volume](https://adrian.schoenig.me/blog/2024/06/13/installing-macos-sequoia-in-a-separate-volume/) + +[@Crazy](https://github.com/jiyan135960):对于既想要使用最新版本的 macOS Sequoia,但却只有一台主力机的开发人员来说。利用一个单独的 APFS 卷来安装 macOS Sequoia 测试版,是一个很好的方法,本文将这种安装最新 macOS 的过程简化为 10 个步骤。 + +- 使用 Time Machine 进行备份 +- 创建一个新的 APFS 卷 +- 关闭 Mac +- 启动并一直按住电源按钮 +- 选择“ Options ” +- 然后选择将 Sonoma 重新安装到步骤 2 中的卷 +- 等待一段时间 +- 安装完成后,最好不要登录 iCloud,并跳过迁移之前的用户账户 +- 打开系统设置,启用测试版更新,并将该安装更新到 Sequoia +- 向 Apple 提交反馈! + + +## 代码 + +### 🐕 [apple/app-store-server-library-swift](https://github.com/apple/app-store-server-library-swift) + +[@Barney](https://github.com/BarneyZhaoooo):Apple App Store Server Swift Library 是一个为 App Store 服务器 API 和通知设计的 Swift 库,支持 iOS 应用开发。它提供了安装指南、详细的 API 文档、使用示例和安全更新支持。开发者可以通过 Swift Package Manager 轻松集成,并参照示例代码快速上手。 + + +### 🐢 [below/HelloSilicon](https://github.com/below/HelloSilicon) + +[@xuyafei86](https://github.com/xiaofei86):在 iOS 开发中,定位疑难 BUG、优化性能和逆向工程等经常需要对汇编、操作系统、处理器有一定的了解。但在 Apple Silicon Mac 上学习汇编十分困难,大部分中文材料仍然停留在 32 位处理器,基于 Linux 系统。而《Programming with 64-Bit ARM Assembly Language》是入门 ARM64 汇编语言的优秀材料。本仓库将此书的所有示例代码适配到 Apple Silicon Mac。感兴趣的同学可以结合原书一起学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#296-2024.07.08.md b/Reports/2024/#296-2024.07.08.md new file mode 100644 index 000000000..25dd99a9d --- /dev/null +++ b/Reports/2024/#296-2024.07.08.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #296 | 2024-07-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/296.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10144 - What's New in SwiftUI](https://xiaozhuanlan.com/topic/5931472806) + +[@WBear](https://github.com/WBearJ):SwiftUI 作为苹果在 2019 年发布的跨平台框架至今,经过多年的版本更新、优化迭代,已经相对成熟。国外已经有部分公司已经开始使用 SwiftUI 进行商业化开发了,对已有 app 进行重构和更新和新 app 的从 0 开发。国内目前因大量用户的 iOS 版本还停留在较早版本,所以导致 SwiftUI 在国内不温不火。但是 SwiftUI 作为苹果未来主推的方式,作为 iOS 开发者,提前了解与学习 SwiftUI 并不是无用功,以备不时之需 (毕竟小组件只能用 SwiftUI 来开发,而且想要写出更酷炫的 Vision Pro app ,学习 SwiftUI 也是必不可少的环节)。 + +### 🌟 [WWDC24 10136 - Swift 的新功能](https://xiaozhuanlan.com/topic/2470951386) + +[@bq](https://github.com/bqlin):文章简要回顾 Swift 过去十年的历史,介绍社区通过工作组、扩展包生态和增加平台支持来促进 Swift 发展。还介绍一种默认实现数据竞争安全的新语言模式,以及一个允许在高度受限系统上运行的 Swift 语言子集。最后将探索一些语言更新,包括不可复制类型、类型化抛出和改进的 C++ 互操作性。 + +## 文章 + +### 🐕 [Async await in Swift explained with code examples](https://www.avanderlee.com/swift/async-await/) + +[@zoeGuo](https://github.com/zoeGuo):这篇文章很全面的讲解了 Swift 中 `async` 和 `await` 在处理异步任务中的作用和用法。并探讨了结构化并发的概念,通过线性执行方法,使异步代码执行顺序需更加清晰,与传统基于闭包的的异步编程相比,结构化并发更简洁、易理解。同时代码示例了如何将基于闭包的异步代码转换成使用 `async` 和 `await` 处理的新结构。文末还讨论了 Swift 6 的新特性和相关迁移策略。 + +### 🐎 [Flutter 架构设计:MVVM + Repository](https://mp.weixin.qq.com/s/pEQmf9LjhpsHQ7SOe33IPg ) +[@极速男孩](https://github.com/ztlyyznf001):文章介绍了 Flutter 中的 MVVM+Repository 架构设计,强调高内聚、低耦合的核心原则。通过分离关注点, MVVM 使代码更易于维护和测试,结合 Repository 模式进一步解耦业务逻辑和数据访问。文中详细解释了 MVC, MVP 和 MVVM 的演变原因,并提供了 MVVM+Repository 在 Flutter 中的实现示例,展示了如何通过 StreamController, FutureBuilder 和 StreamBuilder 进行数据绑定和异步操作管理。 + +### 🐎 [Plotting a Path to a Package Ecosystem without Data Race Errors ](https://www.swift.org/blog/ready-for-swift-6/) + +[@Damien](https://github.com/ZengyiMa):本文主要讨论了 Swift 6 语言模式对于数据竞争安全性的改进。Swift 6 可以帮助消除潜在的并发错误,提高代码的全性和可维护性。目前,已有超过 43% 的包没有数据竞争错误,这对于 Swift 6 beta 过程的第一周来说是一个很好的开始。 + +### 🐎 [普通 iOS 开发者的第一款 Harmony Next 应用](https://mp.weixin.qq.com/s/KjydTcbUQAafB6zFIi7yDw) + +[@Crazy](https://github.com/jiyan135960):本篇文章中不包含代码,读起来会很快,但是里面包含了很多产品开发中的关键点。抛开 Harmony 不谈,这篇文章也可以为其他的移动端产品开发提供很多的借鉴,如果想成为独立开发者的话,更要仔细阅读此文。本文从立项开始讲起,其中有竞品分析,技术选型,之后更有隐私协议等合规流程的介绍,可以说是对一个移动端应用从开发到上架的大致的重要任务都已提及。俗话说实践出真知,看完了文章,大家可以尝试自己按照这套流程自己写一个小应用看看反响。 + +## 工具 + +### 🐕 [Generative AI for beginners](https://github.com/microsoft/generative-ai-for-beginners) + +[@JonyFang](https://github.com/JonyFang): Generative AI for Beginners 是微软 Cloud Advocates 团队推出的生成式 AI 入门的系列课程,分十二章介绍了构建生成式 AI 应用程序的基础知识,课程仓库在 GitHub 上已有超过 5.5w Stars。教程中逐章介绍了生成式人工智能原理和应用程序开发的知识点,提供了导学视频、相关扩展材料、代码示例及相关进阶的学习资源。 + +### 🐎 [AutoCorrect](https://github.com/huacnlee/autocorrect) + +[@Smallfly](https://github.com/iostalks):AutoCorrect 是一个基于 Rust 编写的工具,用于「自动纠正」或「检查并建议」文案,给 CJK(中文、日语、韩语)与英文混写的场景,补充正确的空格,纠正单词,同时尝试以安全的方式自动纠正标点符号等等。 + +类似 ESlint、Rubocop、Gofmt 等工具,AutoCorrect 可以用于 CI 环境,它提供 Lint 功能,能便捷的检测出项目中有问题的文案,起到统一规范的作用。 + +支持各种类型源代码文件,能自动识别文件名,并准确找到字符串、注释做自动纠正。 + +## 代码 + +### [WhisperKit](https://github.com/argmaxinc/WhisperKit/) + +[@DylanYang](https://github.com/Dylan19Yang):一个集成了 OpenAI 的 Whisper 语音识别模型的 Swift 库,作者利用 CoreML 库和 iPhone 设备上的神经网络引擎对音频编码、文字解码等做了额外的性能优化。主页上有提供通过 TestFlight 下载的 Demo App,有兴趣的同学可以体验一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#297-2024.07.15.md b/Reports/2024/#297-2024.07.15.md new file mode 100644 index 000000000..e51adb0b5 --- /dev/null +++ b/Reports/2024/#297-2024.07.15.md @@ -0,0 +1,76 @@ +# 老司机 iOS 周报 #297 | 2024-07-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/297.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10135 - What's new in Xcode 16](https://xiaozhuanlan.com/topic/3658412079) + +[@Yuanxu Han](https://github.com/hanyx1992):和往年一样,今年 Xcode 也迎来了全新版本,Session 10135 从 `Edit`,`Build`,`Debug`,`Test`,`Profile` 几个方面非常简短地讲述了更新的内容,文章针对这些重点特性分别进行了 Session 内容的翻译和部分必要的补充,尽力保证读者都可以对其有清楚的认识和理解;然后从 Xcode Release Note 中整理了部分需要关注的更新点;最终进行总结和探讨。 + +### 🌟 [WWDC24 10188 - SF Symbols 6 使用指南](https://xiaozhuanlan.com/topic/3691085724) + +[@Mim0sa](https://github.com/Mim0sa):为了更方便没有 SF Symbols 经验的读者理解,也将往年的 SF Symbols 相关内容归纳整理。本文从 SF Symbols 的特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些特点以及该如何使用。在这次 WWDC 2024 更新中,除了符号的数量增加到了 6000+ 之外,还新增了一些能让符号们更加活泼的动画效果,同时提升整体使用体验,给界面带来了更多活力和想象力,让 SF Symbols 这把利器变得又又又更加趁手和锋利了。 + +## 文章 + +### 🐎[The State Of Meridian](https://khanlou.com/2024/06/the-state-of-meridian/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了于几年前 Meridian Swift 服务端框架的最新状态(async&await / Websockets 支持 / 中间件等)和未来计划(Swift Macro 和 Swift OpenAPI framework 迁移),对 Swift on Server 感兴趣的同学可以详细阅读了解。 + +### 🐎 [Swift Testing support for SnapshotTesting](https://www.pointfree.co/blog/posts/146-swift-testing-support-for-snapshottesting) + +[@Smallfly](https://github.com/iostalks):WWDC24 推出的 Swift Testing 框架为 Swift 语言带来了新的原生测试支持。作者介绍 SnapshotTesting 库已同步支持此框架,同时提供了 Beta 预览和新特性。它简化了 XCTest 与 Swift Testing 的不兼容问题,允许开发者在不同测试环境中使用统一的 assertSnapshot 方法。对测试框架感兴趣的同学可阅读原文了解更多。 + +### 🐕 [Using TextRenderer to create highlighted text](https://alexanderweiss.dev/blog/2024-06-24-using-textrenderer-to-create-highlighted-text) + +[@AidenRao](https://weibo.com/AidenRao): 这篇博文介绍了如何使用 TextRenderer 在 SwiftUI 中创建带有文本高亮效果的视图。TextRenderer 是在 WWDC 2024 上引入的新协议,可以增强文本的渲染。使用TextRenderer,我们可以更纯粹地在 SwiftUI 中实现文本高亮,而不再需要使用 NSAttributedString。 + +## 工具 + +### 🐎 [ImHex](https://github.com/WerWolv/ImHex) + +[@EyreFree](https://github.com/EyreFree):ImHex 是一个功能丰富的十六进制编辑器,专为逆向工程师、程序员和夜间工作者设计。它提供了许多实用功能,如: + +- 强大的十六进制视图,支持字节修补、无限撤销 / 重做、多种数据解释和高亮显示等; +- 自定义 C++ 风格的模式语言,用于解析和高亮文件内容; +- 数据检查器,可将数据解释为多种类型; +- 基于节点的数据预处理器,可在显示前修改和解码数据; +- 支持多种数据源,如本地文件、原始磁盘、进程内存等; +- 内置反汇编器,支持多种处理器架构; +- 集成 Yara 规则扫描; +- 差异比较、数据分析、可视化等辅助工具; +- 现代化用户界面,支持多工作区、自定义布局、深色模式等。 + +总之,ImHex 是一款功能全面、设计专业的十六进制编辑器,可以极大提升逆向工程和低级编程的工作效率,感兴趣的朋友可以试试。 + +## 代码 + +### 🐎 [StreamUI](https://github.com/StreamUI/StreamUI) + +[@Damien](https://github.com/ZengyiMa): StreamUI 项目是一个用于创建和流媒体视频的强大库,它允许开发者使用 SwiftUI 编程生成动态视频,并实时渲染和直播。这个库的主要功能包括实时视频渲染,直播流媒体,动态视频生成等。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#298-2024.07.22.md b/Reports/2024/#298-2024.07.22.md new file mode 100644 index 000000000..066a5039c --- /dev/null +++ b/Reports/2024/#298-2024.07.22.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #298 | 2024-07-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/298.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10104 - 使用 RealityKit 构建空间绘画 App](https://xiaozhuanlan.com/topic/9421058376) + +[@Layer](https://github.com/LLLLLayer): RealityKit 是 visionOS 应用空间功能的基础。我们将以空间绘画 App 为例,探索资源在 RealityKit 中的运作方式,通过构建自定义网格、纹理和着色器、使用低级别网格和纹理 API 等,实现精致的视觉设计。 + +### 🌟 [WWDC24 10074 - 动态字体体验入门](https://xiaozhuanlan.com/topic/6789542301) + +[@nuomi1](https://github.com/nuomi1): 使用动态字体功能实现一个演示 App,对比 SwiftUI 与 UIKit 在实现上的异同点。 + +### 🌟 [WWDC24 10118 - UIKit 新功能](https://xiaozhuanlan.com/topic/0679358421) + +[@Sharker](https://github.com/AkaShark): 在 iOS 18 中,UIKit 经历了显著的改进,专注于提升用户界面的直观性和互动性。最引人注目的是全新的文档启动体验,它为应用提供了更多个性化展示的空间,同时优化了用户的首次文档创建流程。标签栏和侧边栏也经过了重新设计,不仅外观更加紧凑,还增加了新的定制功能,使得内容展示更为突出。强化了 SwiftUI 和 UIKit 之间的互操作性,特别是通过统一手势系统和允许 SwiftUI 动画类型直接应用于 UIKit 视图,极大地丰富了开发者在动画和交互设计上的选项。此外,UIKit 的 Trait 系统现在支持自动特性跟踪,简化了视图更新,提高了应用性能。为了进一步增强用户体验,iOS 18 引入了 UIUpdateLink ,它使得周期性的 UI 更新更为高效,并且通过感官反馈的改进,如对 Apple Pencil Pro 的支持,为 iPad 用户提供了更加丰富的交互反馈。文本编辑也得到了提升,新的文本格式化面板和写作工具为用户提供了更直观的编辑体验。总的来说,iOS 18 的 UIKit 更新为开发者提供了更多创新的工具和 API,以构建更加引人入胜和用户友好的应用界面。 + +## 新手推荐 + +### 🐎 [Blend Modes in SwiftUI](https://digitalbunker.dev/blend-modes-in-swiftui/) + +[@Smallfly](https://github.com/iostalks):这篇文章详细介绍了 SwiftUI 中的图层混合模式(Blend Modes),展示了如何通过这些模式增强图像的视觉效果。从基础的「正常」模式到复杂的「强光」和「颜色减淡」,每个模式都有详细的计算公式和效果展示。如果你想设计更有吸引力的视觉效果,推荐一读。 + +## 文章 + +### 🐕 [Mastering Animatable and AnimatablePair in SwiftUI](https://digitalbunker.dev/mastering-animatable-and-animatablepair-swiftui/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):在本文中,探索了 SwiftUI 的 Animatable 和 AnimatablePair,并通过 Demo 代码和实际效果举例让大家了解如何使用这些 API 在应用程序中制作更高级的动画。 + +### 🐎 [Introducing Entry macro in SwiftUI](https://swiftwithmajid.com/2024/07/09/introducing-entry-macro-in-swiftui/) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了 SwiftUI 中新推出的 `@Entry` 宏,它极大地简化了自定义环境键和聚焦值的创建过程。传统方法需要为每个自定义环境键创建符合 EnvironmentKey 协议的类型,而使用 `@Entry` 宏只需在 EnvironmentValues 的扩展中定义变量即可,大大减少了样板代码。文章通过示例展示了 `@Entry` 宏在环境值和聚焦值中的应用,强调了其简洁性和易用性。`@Entry` 宏不仅适用于环境值,还可用于事务、容器和聚焦值。它是向后兼容的,可以在之前的 Apple 平台版本中使用,为开发者提供了更高效的 SwiftUI 编程体验。 + +### 🐎 [Create Custom SF Symbols in Sketch ](https://www.danijelavrzan.com/posts/2024/06/create-custom-sf-symbols/) + +[@zoeGuo](https://github.com/zoeGuo):SF Symbols 是由苹果公司推出的一套系统图标,这篇文章作者介绍了如何用已有的 SF Symbols 简单修改获得自己想要的自定义 SF Symbols。通过简单的示例说明了怎么导入符号、调试、调整和优化等,操作简单易学,适合想自己做一些简单图标的初学者。 + +## 代码 + +### 🐎 [Charts](https://github.com/ChartsOrg/Charts) + +[@极速男孩](https://github.com/ztlyyznf001):DGCharts 是为 iOS、tvOS 和 macOS 平台设计的图表库,灵感来源于 Android 的 MPAndroidChart。除了基本的图表类型,如折线图、条形图、散点图和饼图,还支持自定义图表样式、高亮显示、图表交互、动态数据更新等高级功能。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#299-2024.07.29.md b/Reports/2024/#299-2024.07.29.md new file mode 100644 index 000000000..d6684bc2f --- /dev/null +++ b/Reports/2024/#299-2024.07.29.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #299 | 2024-07-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/299.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10146 - 为自定义容器视图添加更多的能力](https://xiaozhuanlan.com/topic/9032587461) + +[@whf881211](https://github.com/whf881211):该文章介绍了 SwiftUI 新添加的一些用于操控 Subview 的 API。这些 API 令 SwfitUI 的操控 UI 的能力大大增强,让我们可以给自定义容器添加更多灵活性和更强大的能力。 + +### 🌟 [WWDC24 10198 运行、暂停、检查:探索如何使用 LLDB 进行有效调试](https://xiaozhuanlan.com/topic/0854921673) + +[@haochen08](https://github.com/haochen08):本文以 WWDC24-10198 为主线,综合了 WWDC19-24 期间多个和调试主题相关的 Session,向大家介绍如何使用 Xcode IDE 和 LLDB 的最新能力,进行有效和高效的调试。同时还介绍了如何处理使用相关工具碰到的常见问题和一些高级技巧。 + +## 文章 + +### 🐎 [SwiftUI Hero Animations with NavigationTransition](https://peterfriese.dev/blog/2024/hero-animation/) + +[@xiaofei86](https://github.com/xiaofei86):借助 iOS 18 中 SwiftUI 新引入的 NavigationTransition 协议实现和 App Store 首页卡片展开类似的 Hero 动画只需三行代码。阅读本文,跟着作者一步步复现一模一样的效果,并了解相关的 SwiftUI 新特性。 + +### 🐕 [Memory consumption when loading UIImage from disk](https://www.avanderlee.com/swiftui/memory-consumption-loading-uiimage-from-disk/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章主要讨论了在使用 SwiftUI 从磁盘加载 UIImage 时遇到的内存消耗问题,并提供了多种解决方案来优化内存使用。通过下面这些要点,读者可以全面了解文章讨论的内存消耗问题、原因、解决方案以及优化建议: +- 1.内存消耗问题 + - 问题描述:当使用 UIImage 从磁盘加载大量图片时,内存消耗会迅速增加,特别是当图片频繁切换或数量较多时 + - 示例场景:文章通过一个包含 200 张壁纸的示例项目,展示了使用 SwiftUI Slider 滑动查看图片时内存消耗增加的问题 +- 2.内存增长原因 + - 系统缓存机制:使用 UIImage(named:)方法加载图片时,图片会被系统缓存,导致内存占用增加 + - 代码实现:展示了使用 UIImage(named:)方法的代码示例,并解释了为什么这种方法会导致内存问题 +- 3.解决方案 + - 避免系统缓存:推荐使用 UIImage(contentsOfFile:)方法加载图片,该方法不会将图片添加到系统缓存中,从而减少内存消耗 + - 代码优化:通过重写图片加载逻辑,使用 UIImage(contentsOfFile:)替代 UIImage(named:),解决了内存快速增长的问题 +- 4.图像缓存策略 + - NSCache 使用:对于需要处理或频繁访问的图片,可以使用 NSCache 进行缓存,以提高性能和减少内存浪费 + - 缓存逻辑:展示了如何使用 NSCache 创建一个简单的图像缓存,并在需要时从缓存中检索或存储处理后的图像 +- 5.性能优化建议 + - 预处理图像:建议在后台线程预先处理图像(如缩放),以避免在主线程上进行耗时操作,提高应用性能 + - 预加载策略:可以提前加载即将显示的图片,以减少滑动时的加载延迟 + +### 🐎 [Exploring SwiftUI: Make SF Symbols Wiggle Wiggle](https://www.rudrank.com/exploring-swiftui-make-sf-symbols-wiggle/) + +[@Smallfly](https://github.com/iostalks):这篇文章主要介绍了如何在 SwiftUI 中使用 SF Symbols 的新型摆动(wiggle)动画效果。 + +### 🐎 [Using SwiftUI in Command Line Tools](https://swifttoolkit.dev/posts/swiftui-meets-command-line) + +[@Damien](https://github.com/ZengyiMa):文章介绍了一种创新的方法,使用 SwiftUI 框架在命令行工具中为 iOS 应用图标添加徽章。通过 ImageRenderer 类,SwiftUI 视图可以被导出成图像。文章提供了一个名为 badgeify 的示例工具,它接受命令行参数来指定图标的输入输出路径和徽章文本。badgeify 工具利用 SwiftUI 构建视图,并利用 ImageRenderer 生成最终的带徽章图标图像。尽管在命令行环境中使用 SwiftUI 存在一些限制,比如 Xcode 无法为 SPM 可执行文件生成预览,但文章也提供了一些技巧来优化开发和测试流程。 + +## 工具 + +### 🐎 [Enable XcodeLLM on ChinaSKU Mac without disabling SIP](https://github.com/Kyle-Ye/XcodeLLMEligible) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 借助开源 eligibility_util 实现,实现在国行设备不关闭 SIP 的情况下使用 Xcode 16 Beta 的 LLM 功能 + +## 代码 + +### 🐎 🌟 [Charts](https://github.com/ChartsOrg/Charts) +[@水水](https://www.xuyanlan.com/categories/iOS/):Charts 是一个用 Swift 编写的为 iOS 创建图表方面提供各类样式的库,其对标的是在 Android 开发人员中非常受欢迎的 MPAndroidChart 图表库。对于读者来说非常值得参考和收藏。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#300-2024.08.05.md b/Reports/2024/#300-2024.08.05.md new file mode 100644 index 000000000..0fb25f375 --- /dev/null +++ b/Reports/2024/#300-2024.08.05.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #300 | 2024-08-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/300.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10162 - 多次拍摄保持色彩一致](https://xiaozhuanlan.com/topic/5093124687) + +[@bqlin](https://github.com/bqlin):色彩一致性是人类视觉感知的一个特性,看苹果如何软硬件结合,在拍摄上重现该“生理”特性。 + +### 🌟 [WWDC24 10149 - 在 SwiftUI 中设计窗口](https://xiaozhuanlan.com/topic/9328564107) + +[@Rickey](https://github.com/RickeyBoy):Window(窗口) 是承载 App 内容的最重要的容器,尤其是在 macOS 和 VisionOS 平台上更是需要优雅地设计和使用窗口。本文将介绍 Windows 组件,并且基于一个 Demo(BOT-anist)从实战角度进行教学。 + +## 文章 + +### 🐎 [Xcode-Kotlin 2.0 Release](https://touchlab.co/xcode-kotlin-2-0) + +[@Crazy](https://github.com/jiyan135960):本文是一篇公告,介绍了 Kotlin 的跨平台技术在 Xcode 上取得的巨大进展。Kotlin 的跨平台开发能力已经提供了很长一段时间了,这次,他们带着 xcode-kotlin 2.0 来再次挑战广大开发者的神经。下面是他在 2.0 版本中主要的优化项: + +- 极大的提升了 Debugging 的性能(最快可达到之前的五倍) +- 扩展了每一帧变量的信息 +- 在 Swift, Kotlin, Objective-C 下都可工作 +- 默认支持 List 和 Map 并且后续还会持续更新(例如:StateFlow, Set) + +Kotlin 还是延续了它一贯的特点,开源,免费,文章很短,大家可以快速浏览,对新技术有个简单的认知。 + +### 🐢 [Async await in Swift: The Full Toolkit](https://www.emergetools.com/blog/posts/swift-async-await-the-full-toolkit) + +[@AidenRao](https://weibo.com/AidenRao):这篇博客介绍了 Swift 中异步 / 等待(async/await)的完整工具包,包括 async/await 基础语法、Task、Task group、Actors 等多种技术。通过实际示例和理论讲解,展示了这些工具在 Swift 并发编程中的用法和场景。 + +### 🐎 [Building Swift Executables](https://swifttoolkit.dev/posts/building-swift-executables) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何在不同操作系统和架构上构建和分发 Swift 可执行文件。对于使用 Swift 构建 CLI 程序感兴趣的同学建议阅读学习。 + +### 🐕 [Swift 6 适配的一些体会以及对现状的小吐槽](https://onevcat.com/2024/07/swift-6/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章主要围绕 Swift 6 的迁移体验、并发编程的引入、以及作者对 Swift 语言发展的个人感想进行了详细阐述。 +- 1.Swift 6 迁移体验 + - 迁移挑战:作者提到 Swift 6 的迁移过程并不顺利,与 Swift 3 的迁移有相似之感,主要是因为并发编程和严格线程安全的引入 + - 并发编程工具:Swift 6 通过 actor 隔离和 Sendable 标注等工具,试图在编译阶段就解决数据竞争和线程问题 + - 迁移建议:尽管 Apple 提供了对旧版本的兼容选项,但迁移仍需要大量工作,作者建议新代码可以按 Swift 6 标准编写,老代码则观察后再决定 + +- 2.并发编程和严格线程安全 + - 主要任务:迁移过程中的主要任务包括添加 @MainActor、标记 Sendable、以及将回调函数改写成 async 并考虑 Task 的使用 + - @MainActor 的使用:UI 相关类型默认添加 @MainActor,非主线程调用时需使用 Task 或添加 @MainActor + - Sendable 和 @unchecked Sendable:对于非 Sendable 的 class,需要实现线程安全机制,如使用锁或 dispatch queue,但可能导致性能问题 + +- 3.迁移过程中的具体挑战 + - 回调和闭包:async 普及前,遗留的 completion handler 代码需要转换为 @Sendable 闭包,但易导致“传染”问题 + - deinit 问题:deinit 无法被 actor 隔离,导致在 Swift 6 中一些原本可行的代码变得无法书写,需要使用 Task 或 withoutActuallyEscaping 来绕过限制 + +- 4.Swift 语言的发展和个人感想 + - 复杂度增加:Swift 从最初的简单到如今包含 Result Builder、Property Wrapper、宏、并发编程等多个复杂特性的编程语言,学习负担加重 + - 开发者体验:编译速度退化、Xcode 的代码补全和 SwiftUI 预览等开发者体验问题尚未得到显著改善 + - 未来展望:作者对 Swift 的未来发展持观望态度,认为其重点似乎并未完全放在帮助开发者更快完成 App 上,而是扩展到了 Server Side 和其他操作系统平台 + +- 5.作者的个人经历和对新人的建议 + - 十年 Swift 开发者经历:作者回顾了自己从 Swift 发布第一天开始的十年历程,见证了 Swift 的多个重要节点 + - 对新人的建议:初学者面临的学习负担较重,作者认为新人需要掌握基础语法、值类型和引用类型等基础知识,以及更复杂的宏和 Property Wrapper 等特性 + +### 🐢 [结合实例深入理解 C++ 对象的内存布局](https://mp.weixin.qq.com/s/pzvI1AEUoz6uWdjlBI2xSQ) + +[@老驴](https://weibo.com/u/6090610445):这篇来自腾讯技术工程的文章通过实际案例深入探讨了 C++ 对象的内存布局,包括简单对象、带方法的对象、私有和静态成员、类继承以及虚函数的实现。 + +通过使用 GDB 调试工具,文章分析了 C++ 对象在内存中的分布情况,揭示了成员变量和方法在内存中的存储方式。其中,作者强调了编译器如何通过对象地址和偏移量来定位成员变量,并讨论了多态实现的底层机制。这篇文章算是一篇 C++ 进阶的文章,有兴趣的同学可以细读。 + +## 代码 + +### 🐎 [swift-issue-reporting](https://github.com/pointfreeco/swift-issue-reporting/tree/main) + +[@Damien](https://github.com/ZengyiMa): Point-Free 推出了一个名为 Issue Reporting 的新库,它允许开发者以 Xcode 运行时警告、断点、断言等方式报告应用程序和库代码中的问题,并支持测试。这个库提供了 reportIssue 函数来在代码中标记不应发生的问题,并可自定义问题报告方式,包括自定义报告器以发送问题到 OSLog 或外部服务器。此外,在测试环境中,所有报告的问题都会变成测试失败,有助于确保问题代码路径不被执行。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#301-2024.08.12.md b/Reports/2024/#301-2024.08.12.md new file mode 100644 index 000000000..7cfaeb7b2 --- /dev/null +++ b/Reports/2024/#301-2024.08.12.md @@ -0,0 +1,84 @@ +# 老司机 iOS 周报 #301 | 2024-08-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/301.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## WWDC24 内参 + +### 🌟 [WWDC24 10177 - 用 HDR 图片点亮你的 App](https://xiaozhuanlan.com/topic/3465798021) + +[@陈震昊](https://github.com/szzxczh1996):本文首先简要阐述了 HDR 相关的基本概念,例如 reference white、headroom 以及 tone mapping,然后回顾了苹果以往建立的 HDR 标准以及 HDR 渲染技术,最后重点介绍了今年新推出的 Adaptive HDR 标准以及在该标准下,如何对 HDR 图片进行读写、编辑和展示。 + +### 🌟 [WWDC24 10073 - 提升 SwiftUI 的可访问性体验](https://xiaozhuanlan.com/topic/7683249501) + +[@Jason](https://github.com/pujiaxin33):深入了解 SwiftUI 如何提供开箱即用的内置 Accessibility,以及如何使用工具来完善和打造你的应用程序的 Accessibility。 + +## 新闻 + +### [‘ You are a helpful mail assistant, ’ and other Apple Intelligence instructions](https://www.theverge.com/2024/8/5/24213861/apple-intelligence-instructions-macos-15-1-sequoia-beta) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 macOS Sequoia 15.1 开发者测试版中,有用户发现了一些包含人工智能后台提示的 JSON 文件,并分享了如何找到这些文件的方法。这些文件揭示了苹果 AI 工具在接收到用户提示之前所接收到的隐藏指令。这些指令为 AI 工具提供了如何响应用户输入的指南,例如邮件助手如何基于邮件内容提问,以及如何生成“回忆”视频等。此外,还提到了一些具体的指令要求,如限制字数、不捏造事实信息等。同时,本文也提醒用户在探索这些系统文件时要谨慎行事,因为它们涉及系统敏感信息。 + +## 文章 + +### 🐕 [SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors](https://www.jessesquires.com/blog/2024/06/29/swiftui-scene-phase/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章入剖析了 SwiftUI 的 `ScenePhase` API,并指出了它在跨平台应用生命周期管理上的局限性。文章建议,为了更细致地控制应用生命周期,应该扩展 `ScenePhase` 或引入新的 `AppPhase` API。同时,作者发现在 macOS 上,依赖 `ScenePhase` 不如直接使用 `NSApplicationDelegate` 来得可靠。为开发者在构建跨平台应用时提供了宝贵的见解。 + +### 🐎 [Swift Protocol 背后的故事(理论)](https://zxfcumtcs.github.io/2022/02/04/SwiftProtocol2/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者从原理上解析了在 Swift 中 Protocol 是如何实现的。Swift runtime 为每个类型都生成了类型元信息(Type Metadata),不同类型的元信息的共同特点是都包含了 VWT、Kind。Class、Struct 的实例上通过 Existential Container 模型来指导 Protocol 变量布局内存,非类约束的 Protocol,会在此模型中通过 type 指向真实类型的元信息,类约束的 Protocol 因为类的实例中已包含了类的元信息,故此模型中不再包含。而泛型在无约束、类约束或者 Protocol 约束的情况下表现均有不同,并在特定条件下特化,改为静态派送来提升性能。感兴趣的读者可以阅读本文,了解更细节的知识。 + +### 🐕 [轻踩一下就崩溃吗——踩内存案例分析](https://mp.weixin.qq.com/s/9OCFb2cH-H5zbaIT5VAS9w) + +[@Cooper Chen](https://github.com/cjlcooper):本文探讨了内存踩踏问题的现象、成因及解决方案,结合具体案例和代码示例,详细解析了全局符号介入和编译参数不一致引发的内存错误。主要通过四个章节进行了分析,分别是: +- 踩内存问题分析成本高,需要借助专业的调试工具和方法 +- 即使代码逻辑本身没有问题,全局符号介入机制也可能导致内存越界 +- 编译参数不一致会引发内存踩踏崩溃 +- 工程标准化,能够有效减少踩内存等问题的发生 + +### 🐎 [Zoom transitions](https://douglashill.co/zoom-transitions/) + +[@极速男孩](https://github.com/ztlyyznf001/):这篇文章主要介绍了如何在 iOS 18 SDK 中分别用 SwiftUI 和 UIKit 使用缩放过渡。作者通过具体的代码示例展示了如何在不同的场景中实现缩放动画,比如从一个列表项缩放到一个全屏的详细视图。此外,文章还讨论了如何优化源视图和目标视图的选择,以确保过渡动画的自然和流畅。 + +## 工具 + +### 🌟🌟🌟 [Cursor: The AI Code Editor](https://www.cursor.com/) + +[@kemchenj](https://kemchenj.github.io/):Cursor 是基于 VSCode 的一个 AI 编辑器,实际使用比起 VSCode+Copilot 体验好上不少。使用 Cursor 只需要会用两个快捷键: + +- CMD+k,单文件编辑,选中你要修改的代码,告诉他需要修改的内容,还能贴 UI 图 +- CMD+i,多文件编辑,直接按快捷键,然后按 + 号指定改动的文件,告诉他需要修改的内容 + +然后站起来走两步,拿起杯子喝口水,看着他把代码写好,健康编程从此刻开始!!! + +## 音视频 + +### 🐢 [Embedded Swift Tutorial - Getting Started (Everything you need to know)](https://blog.supereasyapps.com/embedded-swift-tutorial-getting-started-everything-you-need-to-know/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 一篇关于 Embedded Swift 的详细教程,对嵌入式 + Swift 方向感兴趣的可以观看。目前 Embedded Swift 还处于较早期的玩具阶段,期待后续搭配 HomeKit/Matter 生态的进一步发展。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#302-2024.08.19.md b/Reports/2024/#302-2024.08.19.md new file mode 100644 index 000000000..d6157fdaa --- /dev/null +++ b/Reports/2024/#302-2024.08.19.md @@ -0,0 +1,70 @@ +# 老司机 iOS 周报 #302 | 2024-08-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [NFC & SE Platform for Secure Contactless Transactions - Support - Apple Developer](https://developer.apple.com/support/nfc-se-platform/) + +[@Barney](https://github.com/BarneyZhaoooo):苹果即将在 iOS 18.1 中引入 NFC & SE 平台,让开发者能在 iOS 应用中实现安全便捷的无接触支付等功能。开发者得先跟苹果签个协议,确保他们遵守行业规则和保护用户隐私。新系统要求 iPhone XS 或更新机型,运行 iOS 18.1 或更高版本。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10125 - 自动化创建 Passkey 和全新密码 App 帮助简化登录流程,并提升安全性](https://xiaozhuanlan.com/topic/6145027938) + +[@米广](https://github.com/yz06276):即刻起开始部署更加简单易用,更加安全的 Passkey。 + +### 🌟 [WWDC24 10100 - ARKit 新功能介绍](https://xiaozhuanlan.com/topic/1830462795) + +[@lijingpei](https://github.com/lijingpei2016):本文介绍了 2024 年 ARKit 的新增内容。 + +## 文章 + +### 🐎 [Swift Navigation: Powerful navigation tools for all Swift platforms](https://www.pointfree.co/blog/posts/149-swift-navigation-powerful-navigation-tools-for-all-swift-platforms) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了一个新的导航用开源库 Swift Navigation。这个库适用于 SwiftUI、UIKit、AppKit 以及其他一系列非苹果的平台上。它整体沿用了 SwiftUI 的导航思想,通过一些宏的封装和枚举的使用,使开发者能够更简洁的进行导航的管理。同时在 UIKit 等非 SwiftUI 的框架下,它也提供了视图和数据的绑定能力,让开发者能够在数据更新时及时更新视图。 + +### 🐕 [Non-Sendable types are cool too you know ](https://www.massicotte.org/non-sendable) + +[@zoeGuo](https://github.com/zoeGuo):本文深入探讨了 Swift 语言中的并发特性:`Sendable` 和 `non-Sendable` 类型的使用,提出二者在多线程编程安全中的重要作用,以及它们在处理线程安全和协议一致性方面具有各自的优势。文章通过实例分析了 `non-Sendable` 类型在异步函数中的应用,并提出了使用隔离参数的解决方案,使得这些类型在并发环境中更加灵活。最终,作者鼓励开发者充分利用 `non-Sendable` 类型,以提高代码的线程安全和并发性能。 + +### 🐕 [Diffuse reflection UV computation tool](https://www.elkraneo.com/diffuse-reflection-uv-computation-tool/) + +[@BluesJiang](https://github.com/BluesJiang):本文介绍了苹果在 Vision Pro 中的观影模式下环境对屏幕内容的反射效果的实现方式。今年苹果在 WWDC24 上开放了这个效果给开发者们使用,本文就是介绍了相关的工具和使用。想要实现这种反射效果,苹果给了一个 python 脚本来我们计算 Emitter UV 以及 Attenuation UV,并且简单的介绍了原理。这个工具可以实现任何物体类型投射的光线都可以在预定的位置快速计算其反射的效果。在 Reality Composer Pro 上使用这两种 UV 就可以把反射 UV 应用到场景上。这种实现方式也给我们自研引擎的开发者们提供了一种新的思路。 + +### 🐎 [Exploring OpenAI: Creating a Proxy with AIProxy for iOS and macOS Apps](https://www.rudrank.com/exploring-openai-creating-a-proxy-with-aiproxy/) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了作者使用 AIProxy 服务来保护 OpenAI API 密钥的经验。AIProxy 通过加密和分割 API 密钥提高安全性,并使用 DeviceCheck 框架防止未授权访问。文章详细讲解了 AIProxy 的工作原理、安全措施及在 iOS 和 macOS 应用中的实施步骤。作者展示了如何在 Swift 项目中集成 AIProxy,包括设置依赖、创建服务实例和发送 API 请求。文章还讨论了优化系统提示以控制 API 调用成本,以及使用 AIProxy 仪表板监控请求情况。有需要的同学不要错过。 + +### 🐎 [Concurrency Step-by-Step: A Network Request](https://www.massicotte.org/step-by-step-network-request) + +[@Smallfly](https://github.com/iostalks):本文是一篇 SwiftUI 并发编程教程,通过一个网络请求示例,讲解了如何使用 GCD 和 `async/await` 进行线程安全的操作。文章强调了区分 I/O 和 CPU 密集型任务的重要性,并介绍了 `nonisolated` 关键字的使用,以避免在非主线程上操作 UI 状态。建议读者从基础学起,逐步深入 Swift 并发编程。 + +### 🐕 [Migrating KeyboardKit to Swift 6 language mode](https://douglashill.co/keyboardkit-swift-6/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了将 KeyboardKit 更新到 Swift 6 的一些迁移经验,将 KeyboardKit 实现了完全的数据竞争安全性。KeyboardKit 是一个键盘控制的开源框架,作者在迁移过程中遇到了一些有趣的问题,包括 UIViewController 子类无法使用无参数的初始化方法、全局常量被错误地隔离等。这些变化对使用 KeyboardKit 的开发者没有影响,但如果感兴趣,可以查看最新版本的 KeyboardKit。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#303-2024.08.26.md b/Reports/2024/#303-2024.08.26.md new file mode 100644 index 000000000..9be9f7595 --- /dev/null +++ b/Reports/2024/#303-2024.08.26.md @@ -0,0 +1,61 @@ +# 老司机 iOS 周报 #303 | 2024-08-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/303.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [CocoaPods 官宣进入维护模式](https://blog.cocoapods.org/CocoaPods-Support-Plans/) + +CocoaPods 的生命走入倒计时,后续将在某个时间节点将 Specs repo 设置为 read-only,一个时代结束了。感谢开源社区的作者们提供了这么好用的依赖工具。对于国内的开发者来说,在 SPM 能满足大家需求前,可以考虑在内网建立私有 Specs repo 以及定制 Cocoapods 功能以持续迭代。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10173 - Analyze Heap Memory](https://xiaozhuanlan.com/topic/9307481265) + +[@iPhreetom](https://github.com/iPhreetom):新手级的 iOS 内存分析入门文章,通过学习 MemoryGraph 和 Allocations 的使用,帮助你在开发中更好的解决内存问题。 + +## 文章 + +### 🐕 [Reminder: Conditional Breakpoints are Slow](https://twocentstudios.com/2024/08/08/conditional-breakpoints/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章作者分享了一个有趣的调试故事,为了排查调试项目时发现的不合理的延迟,尝试了禁用调试器、深入了解 GRDB、代码验证等手段,花了数个小时跨越几周的时间,最终发现其实是 LLDB 中的条件断点会增加明显的执行延迟问题。能发现并解决问题总是一个令人愉快的体验,相信读者也有一样的体会,感兴趣的可以看看这个故事。 + +### 🐕 [Issue with AVAsset access in iOS 18 beta | Apple Developer Forums](https://forums.developer.apple.com/forums/thread/758691) + +[@Barney](https://github.com/BarneyZhaoooo):在 iOS 18 中,直接通过硬编码路径访问 AVAsset 会引发权限错误。Apple 技术支持 Quinn 指出,应用应使用 PhotoKit API 来安全地访问和处理用户的照片库,以符合 iOS 的沙盒机制。 + +### 🐕 [How to automatically detect memory leaks on CI/CD using UI tests](https://www.polpiella.dev/automatically-detect-memory-leaks-using-ui-tests/) + +[@莲叔](https://aaaron7.github.io/):内存泄露一直都是 iOS 开发者头疼的问题,并且绝大多数情况都会比较隐蔽,无法简单的被发现。这篇文章介绍了一种结合 UI test 来挖掘内存泄露的方式,通过使用 xcodebuild 新的 enablePerformanceTestsDiagnostics 特性,在 UI test 过程中能自动生成 memory graph 的报告,作者还给出了通过 Swift 来解析内存报告和判断内存泄露的案例,这样就能够自动化的去测试用户在使用 App 的过程中是否有内存泄露。整体来说提出了一种新的解决泄露的思路,并且给出了可落地的方案参考。 + + +## 代码 + +### 🐎 [swift-translate](https://github.com/hidden-spectrum/swift-translate) + +[@DylanYang](https://github.com/Dylan19Yang):一个帮助开发者快速完成字符串本地化翻译的工具,支持通过 ChatGPT 或者 Google Translate 进行翻译。目前源语言必须是英语,同时项目还在早期阶段,可能存在部分翻译不准确、漏翻等情况,使用者需要自行关注。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#304-2024.09.02.md b/Reports/2024/#304-2024.09.02.md new file mode 100644 index 000000000..b691d2400 --- /dev/null +++ b/Reports/2024/#304-2024.09.02.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #304 | 2024-09-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/304.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [JSON Parsing in Swift explained with code examples](https://www.avanderlee.com/swift/json-parsing-decoding/) + +[@zoeGuo](https://github.com/zoeGuo):解析 JSON 是我们在编码中常处理的问题,文章介绍了在 Swift 编码中不使用外部依赖解析 JSON。作者示例说明了如何使用 `Decodable` 协议来轻松解码 JSON,如何通过自定义映射将 JSON 关键字映射到 Swift 属性名,以及如何转换驼峰命名法和蛇形命名法,示例了如何使用自定义日期格式解码 JSON 中的日期。作者还提供了利用 AI 将 JSON 转换为 Swift 结构体的 prompt,一个以美观的格式打印 JSON 的扩展。这篇文章详细介绍了 Swift 中 JSON 解码的各个方面。 + +### 🐕 [SwiftUI for Mac 2024](https://troz.net/post/2024/swiftui-mac-2024/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章列举了系列示例代码来展示 WWDC 2023 和 WWDC 2024 中 SwiftUI 在 MacOS 应用程序上更新的新功能,主要包含了以下方面的内容: + +- Xcode +- Previews +- Windows +- Tabs +- Charts +- Colors and Gradients +- SF Symbols + +### 🐢 [Flutter Web 正式官宣弃用 HTML renderer , Canvas 路线成为唯一](https://mp.weixin.qq.com/s/FdRMQGcZU5BDOI2N0EksiQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter Web 一直是 Flutter 团队努力攻克的一个方向 , 最初 HTML renderer 的路线最近被团队所抛弃 , 采用 CanvasKit 结合 WASM 方式;本文讲述了 Flutter Web 在 HTML renderer 到 CanvasKit 上的取舍和对比 , 可以让我们更深度的了解为何 CanvasKit 成为了唯一路线. + +### 🐎 [Investigating a Dynamic Linking Crash with Xcode 16](https://pspdfkit.com/blog/2024/dynamic-linking-crash-xcode-16/) + +[@Smallfly](https://github.com/iostalks):这篇文章作者介绍了 Xcode 16 beta 导致 PSPDFKit 在 iOS 上启动崩溃的问题。该问题与动态链接 `sqlite3_threadsafe` 有关。调查发现,Xcode 的线程性能检查器默认启用,会导致 `libRPAC.dylib` 错误解析 SQLite 符号。解决方案是禁用该工具或更新 PSPDFKit 至 13.7 版本,后者允许 `libRPAC.dylib` 和 `libsqlite3.dylib` 共存,以防止崩溃。 + +### 🐎 [Swift Build Times and Module Verification …](https://pfandrade.me/blog/swift-build-times-and-module-verification/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章讲述了开发 Secrets 4 时遇到的构建时间变慢的问题。作者将 Secrets 4 重构为 36 个框架,结果发现构建时间逐渐增加。主要原因是启用了 Xcode 的模块验证功能(ENABLE_MODULE_VERIFIER),该功能在构建时检查各种模块问题,虽然对框架分发有帮助,但在调试时会显著拖慢速度。作者决定在调试构建中禁用该功能,结果构建时间从 3.5 分钟减少到 52 秒。此举大大提高了开发效率,也提醒开发者定期检查构建时间以优化开发流程,这对于优化 Swift 工程的编译效率有不错的参考意义。 + +### 🐕 [JavaScript to Swift and back: Bridging location services in WKWebView](https://swiftlybald.com/javascript-to-swift-and-back-bridging-location-services-in-wkwebview/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章主要解决 WKWebView 访问地理位置权限,会触发两次位置授权弹窗(APP 授权 与 特定网页授权)的问题。解决方案主要是通过拦截来自浏览器的位置服务请求,在 iOS 中本地处理它们,然后在位置相关工作完成后将控制权交还给浏览器。如果你的 APP 有类似的体验问题,可以参考文章的实现原理进行优化。 + +### 🐎 [Send data Between iOS Apps and Extensions Using Darwin Notifications](https://ohmyswift.com/blog/2024/08/27/send-data-between-ios-apps-and-extensions-using-darwin-notifications/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了一种用于进程间通信的方式。在 App 内通知是一种通信的常用的手段,而有一种特殊的通知可用于进程间的通信 ———— Darwin Notifications。通常谈到进程间通信,我们会想到 Userdefaults 或者 Keychain,但是从作者看来 Darwin Notifications 会是一种更合适的方式,不过它有一个缺点是无法携带额外的信息(类似 userInfo)。作者展示了一个简单的 demo 来说明如何使用,感兴趣的读者可以阅读本文学习一下。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#305-2024.09.09.md b/Reports/2024/#305-2024.09.09.md new file mode 100644 index 000000000..57ba318b6 --- /dev/null +++ b/Reports/2024/#305-2024.09.09.md @@ -0,0 +1,60 @@ +# 老司机 iOS 周报 #305 | 2024-09-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/305.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10151 - SwiftUI 过渡效果篇](https://xiaozhuanlan.com/topic/8321460975) + +[@zdd](https://github.com/zddhub):本文将介绍 SwiftUI 实现过渡效果的两种方式:AnyTransition 和 Transition。并逐步剖析自定义 SwiftUI 过渡效果的步骤和注意事项,最后通过多个示例展示视觉、着色器、颜色、文字、滚动和导航等不同类型过渡效果的应用,旨在启发读者创建令人印象深刻的过渡效果。 + +## 文章 + +### 🐕 [Backport SwiftUI modifiers](https://alejandromp.com/development/blog/backport-swiftui-modifiers/) + +[@AidenRao](https://weibo.com/AidenRao):SwiftUI 每年都会更新新的修饰符,但我们往往需要等待用户更新到修饰符支持的最低版本,才能享受这些新功能。本篇作者分享了一些技巧和方法,帮助开发者在较旧的 Swift UI 环境中使用新的 SwiftUI 修饰符,在确保旧版本用户体验不变的情况下,面向未来做开发,毫无问题地使用新版本 API。实现原理主要是检查操作系统版本,并在可用时调用 SwiftUI 函数,在不可用时回退到其他函数。 + +### 🐢 [抄 Apple Intelligence 作业的思路](https://juejin.cn/post/7407385581079396389) + +[@Cooper Chen](https://github.com/cjlcooper):近年来,AI 领域迅猛发展,模型规模和性能不断提升,而这是一篇对端上智能或者说 LLM 总结和思考的文章,作者从三个大的方面对当前 Apple Intelligence 的诞生、现状以及展望做了非常详尽的分析,其核心的观点大致可以总结为: +- 以技术为基石的应用更要对技术诚实,LLM 幻觉和推理能力不足可以采用移交控制 / 验证和主动治理 / 约束策略 +- 并不是所有 AI 都需要以 AGI 为目标,提升现有产品的核心体验 / 收益也可以作为投入目标 +- 借助 LLM 实现跨 domain 交互在技术上可行,但不同 domain 有不同的商业模式考量 + +对于不仅是 AI 相关行业的开发,甚至对于各平台的开发来说都有非常大的参考价值,值得反复的阅读和思考。 + +### 🐎 [Dogfooding Emerge Tools: Open-sourcing an Android Hacker News App](https://www.emergetools.com/blog/posts/open-sourcing-emerge-tools-hackernews-app) + +[@Crazy](https://github.com/jiyan135960):关于 Hacker News 的 App 有很多,这次是由 Emerge 团队开发的一款 Hacker News 阅读器。Emerge 团队开发了很多关于应用性能优化与分析的工具,他们在移动应用领域有着深厚的背景。这款新的 Hacker News App 正是使用了他们自己开发的诸多工具来完成的具体实践,这些工具可以让开发者在开发的过程中发现一些错误,并且有自动去除 dead code 等功能。开发者也可借鉴他们的开源代码来使用 Emerge 团队的开发工具,大大简化了开发者从开发到上架的实施难度。 + + +## 音视频 + +### 🐢 [Cross-Platform Swift: View Paradigms](https://www.pointfree.co/episodes/ep290-cross-platform-swift-view-paradigms) & [Cross-Platform Swift: WebAssembly](https://www.pointfree.co/episodes/ep291-cross-platform-swift-webassembly) + +[@Kyle-Ye](https://github.com/Kyle-Ye):本系列视频探讨了如何通过合理的领域建模,将同一套功能集无缝地应用于不同的视图范式和跨平台环境中(UIKit/SwiftUI/WebAssembly),对 Swift 进行跨平台开发感兴趣的读者可以阅读学习下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#306-2024.09.23.md b/Reports/2024/#306-2024.09.23.md new file mode 100644 index 000000000..ff5c95e83 --- /dev/null +++ b/Reports/2024/#306-2024.09.23.md @@ -0,0 +1,67 @@ +# 老司机 iOS 周报 #306 | 2024-09-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/306.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [Xcode Folders & Groups](https://troz.net/post/2024/xcode_folders_groups/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Xcode 15 到 Xcode 16 有不少变化,本文就 Folders & Groups 相关变化做了一些比较,比如 : 添加文件,创建 Group 等;最终作者也给出了一些总结性的建议,如果有不习惯新组织形式的小伙伴依然可以保持 15 时候的形式. + +### 🐢 [COW2LLVM: The isKnownUniquelyReferenced Deep-Dive](https://jacobbartlett.substack.com/p/cow2llvm-the-isknownuniquelyreferenced) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 编译器中的 copy-on-write(CoW)优化了 Swift 结构体,结合了值语义和引用语义。它将数据存储在堆内存中,允许通过轻量级指针高效复制,同时确保在数据更改时触发值语义。这种技术被 Swift 的标准类型(如 Array 和 String)所采用。这篇文章深入探讨了 Swift 编译器中的 CoW 优化,文章将带领读者探索 Swift 编译器的源代码,揭示 CoW 的工作原理,旨在让读者对这一复杂的机制有更深入的理解。 + +### 🐕 [SwiftUI's Observable macro is not a drop-in replacement for ObservableObject](https://www.jessesquires.com/blog/2024/09/09/swift-observable-macro/) + +[@Barney](https://github.com/BarneyZhaoooo):文章指出 SwiftUI 的 `@Observable` 宏并非 `ObservableObject` 的完美替代。主要区别在于初始化行为: `@StateObject` 仅初始化一次,而 `@State` 每次视图重建时都会重新初始化。这可能导致意外行为,建议将全局状态放在 `App` 结构中以避免问题。 + +### 🐢 [我是怎么做个人知识管理(PKM)的](https://starming.com/2024/09/12/my-pkm/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章概述了作者个人知识管理(PKM)的历程与心得,从早期使用备忘录、Evernote 等工具,到探索 Bear、Notion、Obsidian 等结构化笔记应用,作者经历了从信息囤积到注重信息消化的转变,最终采用卢曼卡片盒笔记法,通过闪念笔记、文献笔记、永久笔记等形式,建立笔记间的关联,形成知识网络。同时,结合 P.A.R.A 框架优化管理流程,并引入费曼学习法、CODE 方法论等工具促进知识内化。作者强调工具与方法的选择应基于个人需求,且写作是知识管理的重要产出形式。整篇文章为读者提供了关于如何高效管理和利用信息的实用指南。 + +## 工具 + +### [swift-export](https://swiftpackageindex.com/franklefebvre/swift-export) + +[@Smallfly](https://github.com/iostalks):swift-export 是一款命令行工具,用于在 macOS 上更容易地签名和公证可执行包。这可以帮助开发者简化在 macOS 上分发应用程序时的安全和合规性流程。具体来说,它包括以下功能: + +- **签名**:为应用程序添加数字签名,这是 macOS 应用程序分发的一个要求,以确保应用程序的来源和完整性。 +- **公证**:将应用程序提交给 Apple 进行公证,这是 macOS Catalina 及更高版本中的一项新要求,用于确保应用程序在启动时不会损害用户的安全。 + +这个工具对于需要频繁构建和分发 macOS 应用程序的开发者来说非常有用。 + +## 代码 + +### [HandVector 2.0 版本更新](https://juejin.cn/post/7408086889591390262) + +[@BluesJiang](https://github.com/BluesJiang):这个之前推荐过的开源库又迎来的大的更新,新增了 HandleShape 的 API,给不同手的不同形态给出了具象化的分类,可以更语义化的了解目前手势的情况,如手掌弯曲了多少、手指捏合了多少、手指弯曲了多少等。有利于开发快速调整以寻找合适的手势匹配参数,而不是像之前录制手势那样必须完全精准的重现手势才能达成目的。对手势交互依赖比较重的应用可以考虑升级和使用。 + +### 🐎 [Hummingbird 2](https://forums.swift.org/t/hummingbird-2/74535) + +[@DylanYang](https://github.com/Dylan19Yang):Hummingbird 是一个用 Swift 编写的轻量又灵活的后端框架,它包含了路由、请求和结果处理、编解码等诸多能力。它最近发布了新版本 Hummingbird 2,代码整体基于 Swift 的结构化并发进行了重写,使代码更易读,感兴趣的读者可以关注一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#307-2024.09.30.md b/Reports/2024/#307-2024.09.30.md new file mode 100644 index 000000000..a42859fcb --- /dev/null +++ b/Reports/2024/#307-2024.09.30.md @@ -0,0 +1,73 @@ +# 老司机 iOS 周报 #307 | 2024-09-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/307.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +提前祝大家国庆快乐,我们下一期周报会在 10 月中旬与大家见面。 + +## 文章 + +### 🌟 🐢 [在 Swift 中如何正确传递 Unsafe Pointers 参数](https://mp.weixin.qq.com/s/xDeZ6zM7-6RfPXrs5kCqWw) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章总结了作者在抖音推动规模化落地 Swift 组件中发现的一些常见 Unsafe Pointers 问题。通过具体的工程例子和编译器代码分析给出了具体原因。 + +### [为超越 JVM 而生?深入理解 Kotlin Native 的梦想与可能](https://mp.weixin.qq.com/s/oo7YTnW4oL1xq17cNPGhnw) + +[@JonyFang](https://github.com/JonyFang): Kotlin Native 是 Kotlin 多平台生态的关键一环。本文依据 Kotlin Native 的源码,结合作者在运用 Kotlin Native 开发多平台应用的实战经验,详细为大家解读 Kotlin Native 在编译时和运行时的实现细节和实践技巧。作为 Kotlin 多平台生态的重要一环,Kotlin Native 不再依赖其他运行环境,同时也能保持与其他平台一致的开发体验。 + +### 🐎 [Freeing disk space on GitHub Actions runners](https://www.dzombak.com/blog/2024/09/Freeing-disk-space-on-GitHub-Actions-runners.html) + +[@J_Knight_](https://github.com/knightsj):本文分享了可以清理 GitHub Actions 的运行器所在的服务器的内存空间的脚本代码,以用来防止在执行 GitHub Actions 工作流的时候遇到内存不足的问题。 + +### 🐕 [SwiftData: Solving Fatal Errors and EXC_BAD_ACCESS While Handling Entities on Different Threads](https://www.simplykyra.com/blog/swiftdata-solving-fatal-errors-and-exc_bad_access-while-handling-entities-on-different-threads/) + +[@AidenRao](https://weibo.com/AidenRao):这篇博客介绍了在处理不同线程上的 Entities 时如何解决 SwiftData 中的异常崩溃。通过示例代码和步骤,作者展示了如何有效解决这些错误,希望能帮助读者解决类似问题。 + + ### 🐎 [Exploring SwiftUI: Creating a Custom Slider Inspired By Camera Control](https://www.rudrank.com/exploring-swiftui-creating-a-custom-slider-inspired-by-camera-control/) + +[@zoeGuo](https://github.com/zoeGuo):文章是作者在看到 iPhone16 上相机控制的丝滑交互动效后收到启发,自己用 SwiftUI 实现了一套类似的动画流畅、并且有交互反馈的 slider 控件。作者在文中介绍了设计和实现的思路,并最终应用在自己的上线 App 中的过程。 + +### 🐎 [Point-Free is Xcode 16 ready](https://www.pointfree.co/blog/posts/152-point-free-is-xcode-16-ready) + +[@极速男孩](https://github.com/ztlyyznf001): Point-Free 更新了开源库,以支持 Swift 6.0 和 Xcode 16,同时保持对旧版 Swift 和 Apple 平台的兼容性。此次更新特别强化了并发安全性,Dependencies 库通过使用 TaskLocal 实现了无警告编译,减少了不安全并发操作。Composable Architecture 库的 Store 现已完全在主线程上执行,确保了线程安全。此外还兼容 Swift 的新测试框架,同时继续支持 XCTest,帮助开发者平稳过渡。这些改进均保持向后兼容,开发者无需担心破坏性变更。 + +## 代码 + +### [ChatMLX](https://github.com/maiqingqiang/ChatMLX) + +[@EyreFree](https://github.com/EyreFree):ChatMLX 是一款面向 macOS 的开源聊天应用,基于大型语言模型 LLM 和 Apple silicon 芯片设计。其主要特点包括: + +- 多语言支持:兼容英文、中文(简 / 繁)、日文和韩文,满足多元用户需求; +- 多模型集成:支持 Llama、OpenELM、Phi、Qwen 等多个 LLM 模型,为用户提供丰富的对话选择; +- 高性能表现:充分利用 MLX 框架和 Apple silicon 芯片的优势,实现快速响应; +- 隐私保护:通过本地运行 LLM,确保用户数据安全。 + +项目完全开源,使用 Swift 语言开发,结合 SwiftUI 构建用户界面,展示了 Swift 在 AI 应用开发领域的潜力。对 Apple 开发者而言,ChatMLX 提供了一个学习 AI 技术与原生应用融合的范例。 + +### [VisionOS 30 天学习计划](https://github.com/satoshi0212/visionOS_30Days) + +[@BluesJiang](https://github.com/bluesjiang):这个计划目前有两个版本:[visionOS 1.0](https://github.com/satoshi0212/visionOS_30Days) 以及 [visionOS 2.0](https://github.com/satoshi0212/visionOS_2_30Days) 版本。这里面可以找到大部分 visionOS 特性相关的示例代码,可以快速尝试 visionOS 上的独特的特性。十分推荐都看一遍,可以帮组你快速上手 visionOS 。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#308-2024.10.21.md b/Reports/2024/#308-2024.10.21.md new file mode 100644 index 000000000..679218248 --- /dev/null +++ b/Reports/2024/#308-2024.10.21.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #308 | 2024-10-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/308.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### Xcode 16 + withCheckedContinuation 崩溃 + +[@Kyle-Ye](https://github.com/Kyle-Ye): 如果你的 App 在近期适配了 iOS 18 SDK 并切换到了 Xcode 16 打包,在 App 崩溃监控可能会发现部分 withCheckedContinuation 崩溃。 + +这里目前上游总结了两个问题: +- @backDeploy 实现修复,只影响 iOS app on macOS,被 #76218 修复在 Swift 6.0.1 上了(还没有相关正式版 Xcode 版本) + - 如果你的 App 有大量 iOS app on macOS 用户,可以等后续新 Xcode 版本放出后再升级 Xcode 16 系列,[社区总结的临时解决方案](https://github.com/RevenueCat/purchases-ios/issues/4177)是全部切换为 withCheckedThrowingContinuation 变体 +- 因为 iOS 18 Beta 上的 ABI 变更导致的 crash。这个 Apple 员工认为符合预期,且在最终的正式版 18.0 上不会有问题。但仍会影响 iOS 18.0 Beta 和部分 iOS 18.1 Beta。 + - 如果你的 App 有大量使用 Beta 系统的用户(>1%),建议也可以暂时延缓升级 Xcode 16.0 。 + +详细解释可以参考这篇 [Apple 员工回复](https://github.com/swiftlang/swift/pull/76218#issuecomment-2377064768)。 + +## 文章 + +### 🐕 🌟 [二刷 iOS 性能与编译,简单点说](https://mp.weixin.qq.com/s/X96VdTsskmNVCoqMzZjbgg) + +[@Leo](https://github.com/leomobiledeveloper):这篇文章是性能和编译相关的优质好文,文章内容覆盖了卡顿、内存、IO、CPU、启动、Bazel、构建等多个领域,每个领域下通过实践中遇到的问题展开,并给出了充分的代码示例,对想了解性能优化和编译构建领域的同学会很有帮助,推荐阅读。 + +### 🐎 [AVAudioEffectNode: painless low level audio effects written in Swift](https://orjpap.github.io/swift/low-level/audio/avfoundation/2024/09/19/avAudioEffectNode.html) +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 AVAudioEffectNode 的概念和用法,包括应用音频效果、创建自定义音效处理节点以及与其他音频节点的连接方法。作者提供了代码示例,展示如何配置和使用 AVAudioEffectNode,以便开发者可以在实时音频处理中轻松添加各种效果,如混响和延迟。通过这些实践,开发者能够增强音频应用的表现力和互动性。 + +### 🐎 [Copy On Write and the Swift-CowBox Macro](https://swifttoolkit.dev/posts/copy-on-write-cowbox) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 一篇关于 Swift Copy on Write 和 Swift-CowBox 原理分析的文章,并给出了 Swift-CowBox 的性能评测。 + +### 🐕 [Security-scoped bookmarks for URL access](https://www.avanderlee.com/swift/security-scoped-bookmarks-for-url-access/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文介绍了 Security-scoped Bookmarks (Mac OS 上的安全区域书签)的在 URL 访问上的作用、使用范围和使用示例、以及使用时发现的一个由于 “ ScopedBookmarksAgent ” 引起的应用挂起的问题 ,虽然苹果已经在 macOS 15.1 beta 4 中修复,但是作者也提供了一个解决方案。 如果您有在 Mac 应用上存储给定 URL 资源的权限、并在后续使用中重新获得访问权限,可以使用安全区域书签功能来实现。 + +### 🐎 [Discover 3 new features of Xcode 16](https://www.swiftwithvincent.com/blog/discover-3-new-features-of-xcode-16) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了 Xcode 16 的三个新功能:新增“新建空文件”操作简化文件创建流程、支持直接粘贴代码块到项目导航器自动生成新文件;Asset Catalogs 新增查找引用功能,便于清理未使用资源;调试器推出 Backtrace 视图,优化堆栈跟踪的查看体验。 + +### 🐎 [Are Android apps THAT much smaller than iOS?](https://www.emergetools.com/blog/posts/are-android-apps-really-that-much-smaller-than-ios) + +[@Crazy](https://github.com/jiyan135960):本文是一篇对于新开发者的入门级文章,本文主要分析了为什么 iOS 应用在应用商店上展示的比 Android 应用在应用商店上展示的大出许多。文章首先言明了两个商店所使用的 Size 意义是不一样的,App Store 用的是安装大小,Goolge play 使用的是下载大小。之后又根据编译方式分析了两种 app 在编译与执行情况下的不同,并且给出了经过各种编译方式后安装到手机上的应用文件大小的对比图。最后文章也给出了关于 iOS 应用瘦身的一些建议,当然在产品的开发过程中,产物大小不能说明什么,但是良好的开发习惯与知识储备,确实可以令你的产物更小,更能节省用户的流量。 + +## 视频 + +### 🐎 [SwiftCraft 2024](https://www.youtube.com/playlist?list=PLugrLwuQvERqB4Kj8GOPwCnUMOLxJ0Ny9) + +[@Damien](https://github.com/ZengyiMa): 这是今年 SwiftCraft 2024 大会的视频地址,SwiftCraft 是英国一个新的 Swift 开发者大会,在这里你可以学到 Swift 开发中的各种技术,如用 Swift 开发 App/ 游戏,如何做 Mobile 的 DevOps 等等。 + +## 代码 + +### [apple-knowledge](https://github.com/hack-different/apple-knowledge) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):`Apple Knowledge` 是由 Hack Different 团队在 GitHub 上维护的项目,旨在提供关于苹果产品的逆向工程信息以及机器可读的苹果硬件数据库。该项目鼓励社区成员的参与,并且涵盖了多个技术领域,包括但不限于以下内容: + +- Apple Silicon 和 ARM 架构:介绍 Apple Silicon 及 ARM 架构的工具、编译器及安全缓解措施 +- 协处理器与底层硬件:包括 USB、NVMe、雷电接口等协议的分析,以及苹果神经引擎等协处理器的研究 +- 网络与无线协议:涵盖 AWDL(无线分发链路)、iCloud、蓝牙通信及远程通信协议 +- 越狱与安全研究:收录历史上的越狱工具和漏洞,例如 checkra1n 和 Fugu,以及与苹果系统保护相关的资源 +- 系统配置与诊断:包括苹果的日志系统、恢复模式(FDR)及工厂数据恢复等详细信息 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#309-2024.10.28.md b/Reports/2024/#309-2024.10.28.md new file mode 100644 index 000000000..580474b14 --- /dev/null +++ b/Reports/2024/#309-2024.10.28.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #309 | 2024-10-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/309.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [New requirement for app updates in the European Union](https://developer.apple.com/news/?id=yfacfeal) + +自 2024 年 10 月 17 日起(已经生效),在欧盟地区上架的 app 需要提供交易商身份信息,之后才能提交 app 。如果一直不提供交易商信息,则 app 会在 2025 年 2 月 17 日被下架。详见:[填写说明](https://developer.apple.com/help/app-store-connect/manage-compliance-information/manage-european-union-digital-services-act-trader-requirements/)。 + + +### [Apple Push Notification service server certificate update](https://developer.apple.com/news/?id=09za8wzy) + +这是一则前置通知:Apple 推送通知服务 (APNs) 的证书颁发机构 (CA) 即将改变。APNs 将于 2025 年 1 月 20 日更新沙盒环境的服务器证书,并于 2025 年 2 月 24 日更新生产环境的服务器证书。 + +大家可以等沙盒环境更新后再进行操作,建议在过渡期间同时保留新旧两份证书。 + +## 文章 + +### 🐢 [Elite Hoops Year One: 12 Bite-Sized Lessons](https://www.swiftjectivec.com/elite-hoops-gaining-users-as-an-indie-app-with-paid-ads-and-lessons-learned/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文是一个独立开发者关于应用增长过程的思考,从初始的少量付费用户开始到市场分析思考共 12 条,可谓字字珠玑,对于正处于独立开发中的同学来说有不小的借鉴意义。 + +### 🐕 [swiftlang/swift-java](https://github.com/swiftlang/swift-java) + +[@Barney](https://github.com/BarneyZhaoooo):这个项目提供了 Swift 和 Java 互操作性的工具和库,允许 Swift 程序直接调用 Java API。还有一个 jextract-swift 工具,用于从 Java 源码中提取用于 Swift 调用的代码。项目处于早期开发阶段,依赖于特定的 Swift 和 JDK 版本。 + +### 🐕 [直接使用 xcodebuild 比 Xcode 慢的原因分析](https://github.com/wojciech-kulik/xcodebuild.nvim/issues/201#issuecomment-2423828065) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要讨论了 xcodebuild 工具相较于 Xcode 更加耗时的问题,xcodebuild 每次构建时向 Apple 的 API 发出了多个请求,响应时间较长,导致构建变慢,并且 xcodebuild 对每个目标逐个发请求,目标越多则效率差异越明显,作者提供了解决方法包括修改 hosts 文件和使用网络嗅探工具阻止请求。这些方法能显著提高构建速度,同时作者建议用户也提交反馈,以促使 Apple 修复此问题。 + + +### 🐕 [The Memory Leak: An Xcode Detective Story](https://www.emergetools.com/blog/posts/the-memory-leak-an-xcode-detective-story) + +[@莲叔](https://github.com/aaaron7):这篇文章讲述了作者从一个自己 app 遇到的 deeplink 的 bug 一步步的排查到问题的根源的过程。问题的根源虽然并不复杂,但触发点非常隐蔽,至少属于 CR 时很难发现的问题,值得关注。另外,过程中一步步讲述了作者自己排查的过程以及思路,对于刚入门的同学应该也有非常有帮助。 + + +### 🐕 [Beware UserDefaults: a tale of hard to find bugs, and lost data](https://christianselig.com/2024/10/beware-userdefaults/) + +[@xiaofei86](https://github.com/xiaofei86):在 iOS 15 “应用预热” 和 ”敏感数据解锁前不可访问(钥匙串等)“ 2 个系统功能的互相影响下,会出现 `UserDefaults.standard` 实例取到空的偶现问题。一但问题出现,程序可能认为是首次启动,进而用默认数据覆盖 UserDefaults,导致更严重的问题。作者总结了能够大概率复现的场景,并提供解决方案。同时也封装了 [TinyStorage](https://github.com/christianselig/TinyStorage) 用来替代 UserDefaults,感兴趣同学可以阅读原文了解。 + +### 🐕 [MoveMe - SwiftUI Edition](https://whackylabs.com/swift/swiftui/ios/animation/2024/09/12/moveme-swiftui-edition/) + +[@AidenRao](https://weibo.com/AidenRao):使用 SwiftUI 来处理手势和动画实际上并不像听起来那么直观,这篇文章讲解了如何实现正方形的拖动、缩放以及过渡动画效果,并解决了一些在实现过程中出现的问题。文章还提供了代码示例和 GitHub 链接供参考。 + +### 🐎 [So how does this whole @preconcurrency thing work?](https://www.massicotte.org/preconcurrency) + +[@DylanYang](https://github.com/Dylan19Yang):@preconcurrency 是一个新增的关键字,帮助开发者屏蔽并发相关的警告。在开发者往严格的并发框架逐渐迁移的流程上,有时会出现无法快速迁移,甚至无法迁移的情况,而 @preconcurrency 能够允许开发者忽略这部分警告,使得开发者能够增量的完成并发框架的迁移。本文介绍了 @preconcurrency 可以在哪些场景下帮助开发者处理这些问题,比如在一个 @MainActor 的类型里实现一个 nonisolated 的 protocol 场景,或是处理三方库中无法迁移到 concurrency 框架的代码等。有遇到类似问题的开发者可以阅读此文了解更多。 + +## 代码 + +### [ProtobufKit](https://github.com/OpenSwiftUIProject/ProtobufKit) + +[@kemchenj](https://kemchenj.github.io/):轻量跨平台 ProtoBuf Swift 解决方案,实现了基础的序列化 API,并且提供一套类似 Codable 的方案支持,对比原版 5.7MB 的二进制大小,这个版本只需要 142KB。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#310-2024.11.04.md b/Reports/2024/#310-2024.11.04.md new file mode 100644 index 000000000..0595d0e0d --- /dev/null +++ b/Reports/2024/#310-2024.11.04.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #310 | 2024-11-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/310.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight 增强功能助你吸引测试员](https://developer.apple.com/cn/news/?id=fps422ld) + +TestFlight 分发功能迎来了加强,新增对测试员的招募标准,例如指定 OS 版本,方便在在 1w 的名额内,尽可能按 app 实际要求暴露问题,例如鼓励低 OS 的用户加入测试。同时还提供了公开链接的转化情况看板等新功能。总体是一次满足开发者们痛点的更新。 + +## 文章 + +### 🐕 [How to build a Safari extension with SwiftUI](https://www.polpiella.dev/safari-extensions-swiftui/) + +[@Barney](https://github.com/BarneyZhaoooo):Polpiella 在博客中分享了如何使用 SwiftUI 构建 Safari 扩展的步骤。首先,在 Xcode 中创建 Safari 扩展目标并修改 Info.plist 文件,设置工具栏项和网站访问权限。接着,利用 SFSafariExtensionHandler 创建 SwiftUI 视图,并通过 PopoverViewController 展示。最后,运行应用即可在 Safari 中安装并测试扩展。 + +### 🐎 [Phase Animator Behavior](https://chris.eidhof.nl/post/phase-animator/) + +[@AidenRao](https://weibo.com/AidenRao):在这篇文章中,Chris Eidhof 探讨了 PhaseAnimator 的工作原理。当视图的位置从 -100 更改为 -100 时,更新前后的节点完全相同,并不会产生任何动画,当没有具体的动画时,会立即调用动画的完成处理程序。换句话说,我们马上就进入了下一个阶段。 + +### 🐎 [Swift Macro 在业务开发中的探索与实践](https://juejin.cn/post/7428200842229055529) + +[@JonyFang](https://github.com/jonyfang): 结合模块化场景及曝光场景下的应用,通过模块宏能解决模块化通用模版定义的繁琐, 通过曝光宏能降低整个曝光体系接入的复杂度,本质上都是让 Swift Macro 帮助我们减少重复样板代码的编写,提供快速接入的能力。接入 Swift Macro 可以玩出很多花样,增加了代码的趣味性和可读性,降低了维护成本。 + +### [App development on iPad](https://mutatingfunc.github.io/blog/2024-10-12-app-development-on-ipad/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者在过去一年里,全面投入到使用 iPad 进行应用程序开发。这篇文章介绍了在 iPad 上使用 Swift Playgrounds 进行 iOS 应用程序开发的可能性和局限性(缺乏 Xcode 的某些功能,如断点调试和模拟器支持)。虽然还存在一些局限性,但通过一些创新的解决方案,这些问题都可以得到缓解。 + +### 🐎 [Vapor and Swift Testing: Running tests in parallel](https://www.avanderlee.com/swift-testing/vapor-and-swift-testing-running-tests-in-parallel/) + +[@Smallfly](https://github.com/iostalks):这篇文章探讨了在 Swift 和 Vapor 框架中如何进行并行测试。它解释了 Swift Testing 与 XCTest 的不同,并提出了使用 Repository Pattern 来避免测试中的数据库查询,以实现测试的并行执行。同时还介绍了如何配置和使用内存中的仓库进行测试,并重写代码以通过仓库访问数据,从而提高开发效率和测试稳定性。推荐对 Swift 服务端开发和测试的同学阅读。 + +### 🐎 [Reminder: Apple Watches use 32 bit pointers](https://jeffverkoeyen.com/blog/2024/10/02/arm64_32-PSA/) + +[@极速男孩](https://github.com/ztlyyznf001):Apple Watch 从 Series 4 起采用 arm64_32 架构,虽为 64 位系统,但用 32 位指针。开发者在 watchOS 模拟器中测试时 Int 为 64 位,而在实际硬件上 Int 为 32 位,导致模拟器运行正常的代码在硬件上可能崩溃。例如,处理时间戳的代码可能在 Apple Watch 上失败。所以要在处理 Int 和 CGFloat 时需注意这种差异,确保代码在硬件上也稳定运行。 + +### 🐎 [Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域](https://mp.weixin.qq.com/s/imRQnDJgHTdrcuD5rYQApg) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了 Flutter 在 3.10 版本里进行的颜色体系更改,首先介绍了 sRGB 和 P3 两种颜色体系的在色域上的区别,从肉眼上看 P3 的颜色更加鲜艳。紧接着文章便介绍了新版本的颜色体系,其中主要对颜色位数做了对比讲解,并且对源码也进行了分析。文章的最后作者更是对现有 API 的现状进行分析,更是对之后的 API 发展情况进行了介绍。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#311-2024.11.11.md b/Reports/2024/#311-2024.11.11.md new file mode 100644 index 000000000..88cfdb8e8 --- /dev/null +++ b/Reports/2024/#311-2024.11.11.md @@ -0,0 +1,62 @@ +# 老司机 iOS 周报 #311 | 2024-11-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/311.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Migrating Combine to AsyncAlgorithms](https://blog.jacobstechtavern.com/p/migrating-combine-to-asyncalgorithms) + +[@zoeGuo](https://github.com/zoeGuo):Swift Concurrency 发布以来,其设计在许多简单用例上大大超越了 Combine,而在 AsyncAlgorithms 发布之后,Combine 中的许多功能在 Swift Concurrency 中都可以使用。本文以一个示例项目为例,逐步演示了将 Combine 代码迁移到 AsyncAlgorithms 的过程,涵盖了数据源合并、流和节流、以及 CurrentValueSubject 到 AsyncChannel 的转换等常见场景。迁移后代码更简洁易读,易于维护;与 Swift Concurrency 无缝集成,享受异步编程的便利。 + +### 🐕 [Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar](https://www.nutrient.io/blog/swiftui-main-toolbar/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要探讨了在 SwiftUI 中使用主工具栏的实现方法。作者介绍了 SwiftUI 的 ToolBar 视图及其在 iOS 16 及以上版本中的应用,强调工具栏在提升用户体验和界面整洁性方面的重要性。文章通过示例代码展示了如何创建和自定义工具栏,包括添加按钮、分隔符以及响应用户交互的功能。此外,作者还讨论了工具栏的布局和风格设置,以及如何在不同设备上保持一致的用户体验。 + +### 🐕 [Faster iOS Networking with Shared Dictionary Compression](https://eisel.me/shared-dictionary-compression) +[@JonyFang](https://github.com/JonyFang): 共享字典压缩是一种有效加速 iOS 应用的网络性能的技术,通过在客户端和服务器之间共享数据字典来减少传输数据量。 + +## 工具 + +### [GitHub Copilot 官方发布 Xcode 插件](https://github.blog/changelog/2024-10-29-github-copilot-code-completion-in-xcode-is-now-available-in-public-preview/) + +[@kemchenj](https://kemchenj.github.io/):Xcode 在 AI 补齐的功能上一直落后其它 IDE/Editor,虽然今年 Xcode 也发布了 Code Completion Prediction 功能,但只有国外能用。终于终于,GitHub Copilot 官方在近日发布了 Xcode 插件,让我们也可以用上 AI 补齐的功能: + +- 代码补齐 +- 多语言支持,包含 Swift/Objective-C/C/C++/Metal +- 多行代码补齐 +- ... + +周报之前其实也介绍过一款国内工程师开发的 [Copilot Xcode 插件](https://github.com/intitni/CopilotForXcode),经过了解之后发现 GitHub 这次发布的插件其实是 fork 出来的,并且是[已经跟原版作者达成了协议](https://github.com/intitni/CopilotForXcode/discussions/597),GitHub 也[给了一点赞助金给作者](https://x.com/intitni/status/1851352010718880059)。 + +原版后续也会继续维护,而且就目前来说原版的功能甚至比 GitHub 版本更多更丰富。最后想说这大概是我入行以来看到最和谐的一次项目分叉了。 + +## 代码 + +### 🐕 [Metal-Puzzles](https://github.com/abeleinin/Metal-Puzzles) + +[@BluesJiang](https://github.com/bluesjiang):这个代码库提供了一些简单的习题,用来联系编写 Metal 的 Custom Kernel,可以利用在 MLX、Metal Shader 等场景下。对于想学习使用 Metal 加速计算、自己写 Shader 的可以下载下来跟着教程周走一遍。仓库提供了一个测试框架,需要写的代码注意是在 source 变量字符串里。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#312-2024.11.18.md b/Reports/2024/#312-2024.11.18.md new file mode 100644 index 000000000..da12d0560 --- /dev/null +++ b/Reports/2024/#312-2024.11.18.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #312 | 2024-11-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/312.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [We're forking Flutter. This is why.](https://getflocked.dev/blog/posts/we-are-forking-flutter-this-is-why/) + +[@极速男孩](https://github.com/ztlyyznf001): Flutter 社区在 Flutter 基金会的支持下,启动了名为 "Flock" 的 Flutter 新分支。此举是由于 Google 在处理桌面应用支持等方面的政策使一部分开发者感到不满,认为其发展速度和开放性不足。"Flock" 分支希望通过更加民主和包容的社区驱动模式,更好地响应开发者的需求。 + +### [A memory leak in Apple's Network Extension framework](https://obdev.at/blog/a-memory-leak-in-apples-network-extension-framework/) + +macOS 15.0 Sequoia 被发现会存在大量的内存泄漏(14.0 也存在,但是量级很小),你可以通过 ``sudo leaks at.obdev.littlesnitch.networkextension | grep "total leaked bytes"`` 来查询自己是否受到影响。如果确实有大量内存泄漏,可以通过杀死 ``at.obdev.littlesnitch.networkextension`` 进程来强制释放。 + +##  Developer - 设计开发加速器 + +### [案例研究:设计出色的 visionOS App](https://developer.apple.com/events/view/GV4QHX6VBJ/dashboard) + +与我们一起探索出色的 visionOS App,了解设计师是如何针对无边画布进行创作的。在为期半天的讲座中,你将了解如何采用沉浸式功能、为眼睛和手设计交互体验,并充分利用深度、比例和空间。 + +另外还有 [Apple Vision Pro 开发者实验室](https://developer.apple.com/events/view/ZJZ99TX978/dashboard) 的线下实验室,感兴趣的同学们可以积极报名。 + +## 文章 + +### 🐎 [Xcode stops fetching Swift packages](https://danielsaidi.com/blog/2024/11/04/xcode-stops-fetching-swift-packages) +[@Smallfly](https://github.com/iostalks):在 Xcode 16.1 中,Swift 包依赖突然无法获取,并出现 ` “ Fatal: cannot use bare repository ” ` 错误。经过排查,作者发现问题与 SourceTree 添加的全局 Git 配置 `safe.bareRepository = explicit` 有关。删除或注释掉该配置后,Xcode 恢复正常。 + +此配置的作用是提高安全性,建议不删除全局配置,而是通过命令手动标记相关仓库为安全: +```bash +git config --global --add safe.directory /path/to/repo +``` + +更详细的讨论可见 SPM 的 [issue 8068](https://github.com/swiftlang/swift-package-manager/issues/8068),以及对应的 [PR](https://github.com/swiftlang/swift-package-manager/pull/8106) 。 + + +### 🐕 [逆流而上的设计 - Swift 所有权和 ~Copyable](https://onevcat.com/2024/11/noncopyable/) + +[@zoeGuo](https://github.com/zoeGuo):Swift 5.9 中引入了不可复制类型的标记 ~Copyable(non-copyable),在今年的 Swift 6 中,之前类型扩展(extension)和泛型(generic)不支持 ~Copyable 的不足也得到了解决,~Copyable 的可用性得到了提升。文章用 ~Copyable 的工作方式、所有权转移关键字、在泛型或扩展中使用 ~Copyable,三个部分详细讲解了 ~Copyable 的概念、工作原理以及具体如何使用。作者在对 ~Copyable 的概念阐述中提到:“以往的协议是‘为类型增加功能’,而 ~Copyable 则是‘为类型解除限制’”,相信能帮助你更快理解 ~Copyable 协议。在文末:“只在确实需要独占资源或严格控制生命周期时才使用 ~Copyable,可能会是更加平滑和正确的方式”,也很好的总结了 ~Copyable 的使用场景。文中有大量代码例举以及内存管理的详细示意,强烈推荐阅读原文。 + +### 🐕 [THREADS IOS PERFORMANCE](https://atscaleconference.com/threads-ios-performance/) + +[@DylanYang](https://github.com/Dylan19Yang):本文是 Threads 开发讲述了 Threads 是如何优化 App 性能的。Threads 主要关注的性能指标包含了图片加载速度、网络内容的返回速度、发布成功率、页面加载耗时、发布可靠性等。本文对页面加载耗时和发布可靠性方面做了更深入的讲解,包括通过劣化实验推断页面加载耗时对业务数据的影响、提供 debug 工具帮助业务研发判断自己业务的性能水平以及发文草稿的磁盘占用对用户的体验影响等。本文对 Threads 各方面的性能监控、优化等都有涉及,想要优化自己 App 的读者可以细致阅读一下。 + +## 工具 + +### [screenshot-to-code](https://github.com/abi/screenshot-to-code) + +[@EyreFree](https://github.com/EyreFree):screenshot-to-code 是一个开源 AI 代码生成工具,能将设计稿截图、Figma 设计稿或网页模型快速转换为干净、可用的代码。该工具支持多种技术栈,包括 HTML+Tailwind、React+Tailwind、Vue+Tailwind、Bootstrap 等。它支持 Claude Sonnet 3.5 和 GPT-4o 等模型。且近期加入了实验性功能,可以将网页交互的视频 / 屏幕录制转换为功能性原型。用户可以通过 Docker 快速部署。对于需要快速将设计转换为代码的开发者来说,这是一个非常实用的工具,感兴趣可以尝试。 + +## 音视频 + +### 🐕 [SwiftConnection Videos, Material and Transcript](https://async.techconnection.io/frenchkit) + +[@Barney](https://github.com/BarneyZhaoooo):该网站提供了关于 Swift 编程语言的会议资源,包括视频、材料和演讲稿。会议内容覆盖 Swift 性能优化、AI 集成、嵌入式 Swift 应用、可访问性构建等多个技术领域。这个平台为 Swift 开发者提供了丰富的学习材料和交流机会。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#313-2024.11.25.md b/Reports/2024/#313-2024.11.25.md new file mode 100644 index 000000000..2b7468bd7 --- /dev/null +++ b/Reports/2024/#313-2024.11.25.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #313 | 2024-11-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/313.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Can't install any apps on my new iPhone 16 Pro with iOS 18 from Xcode](https://forums.developer.apple.com/forums/thread/764196?answerId=804884022#804884022) + +苹果的开发工程师对于从 Xcode 16 Beta/rc 升级到 Xcode 16 正式版用户会遇到无法安装 app 到 iPhone 16 系列手机的问题给出了解决方案:手动通过指令安装 XcodeSystemResources 。该问题在 Xcode 16.1 Beta 2 中修复。 + +``` +sudo installer -pkg /Applications/Xcode.app/Contents/Resources/Packages/XcodeSystemResources.pkg -target / +``` + +## 文章 + +### 🐎 [编译器,靠你了!使用类型改善状态设计](https://onevcat.com/2024/11/type-as-state/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者通过一个实际工作中碰到的端到端消息发送的例子,讲述了如何利用 Swift 的类型系统 , 将状态逻辑编码到类型中 , 由编译器来保证程序执行正确性,从而减少使用和维护的心智负担。 + +### 🐕 [MainActor usage in Swift explained to dispatch to the main thread](https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/) + +[@AidenRao](https://weibo.com/AidenRao):在构建应用程序时,在主线程上执行 UI 更新任务是至关重要的,而使用多个后台线程时可能会遇到点麻烦。使用 @MainActor 属性将有助于确保您的 UI 总是在主线程上更新。文章详细解释了什么是 MainActor,全局 actor 的概念,以及如何在 Swift 中使用 MainActor。 + +### 🐎 [Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development?](https://medium.com/@rushabhprajapati20/flutter-vs-kotlin-multiplatform-which-should-you-choose-for-cross-platform-development-4bcf28358918) + +[@Crazy](https://github.com/jiyan135960):从 React Native 开始,移动端的开发就发起了跨平台的改革,如今 Flutter,KMP,C++,都进入了跨平台的研发序列。本文主要对 Flutter 与 Kotlin 两个现今比较火的跨平台框架进行了对比。 + +Flutter 平台的优点主要为: + +1. 统一代码库 +2. 富有表现力和灵活的用户界面 +3. 快速的开发周期 +4. 强大的社区支持 + +KMP 平台的优点: + +1. 原生一般的性能 +2. 高互用性 +3. 高代码共享能力 +4. Google 的支持 + +总结一下:Flutter 主要用于项目启动、 MVP 功能、项目原型、有 UI 统一化的需求开发。KMP 主要用于大项目和已有代码库、需要高性能、需要多平台逻辑分享的功能开发。 + +### 🐢 [Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层](https://mp.weixin.qq.com/s/LW3bASRhA_HL6pS27qUVMA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文从原理层讲解了 Overlay 和 OverlayPortal 之间的差异,并且对如何使用 OverlayPortal 做了更深一步的阐述,对于 Flutter 开发的小伙伴来说是一个不错的科普文! + +### 🐕 [Integrating Live Activity and Dynamic Island in iOS: A Complete Guide](https://canopas.com/integrating-live-activity-and-dynamic-island-in-i-os-a-complete-guide) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了关于在 iOS 中集成 Live Activities 和 Dynamic Island 的完整指南。它涵盖了如何创建和管理 Live Activities,以便在锁屏和应用程序上显示实时信息。此外,指南还介绍了如何利用 Dynamic Island 来增强用户体验,让用户能够方便地访问和交互实时通知和活动。可供开发者参考,实现更具动态交互的应用程序。 + +### 🐎 [Swift Format in Xcode](https://troz.net/post/2024/swift_format/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了在 Xcode 16 中首次集成的 swift-format 工具,swift-format 是和 swint-lint 类似的用于规范代码格式的工具。作者写了一段有问题的示例代码,并同时使用 swift-lint、Prettier 和 swift-format 进行代码自动矫正。从表现上来看 swift-format 并不如 swint-lint 一般全能,但是使用十分方便,也支持规则的自定义配置,在配置妥当后已经适用于大部分场景。同时作者也提到目前并没有官方的 Swift code style guidelines, swift-format 目前仅仅只指向了一个方向,具体的规则后面还有改动的可能。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#314-2024.12.02.md b/Reports/2024/#314-2024.12.02.md new file mode 100644 index 000000000..281e63877 --- /dev/null +++ b/Reports/2024/#314-2024.12.02.md @@ -0,0 +1,116 @@ +# 老司机 iOS 周报 #314 | 2024-12-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/314.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [AutoConsis:UI 内容一致性智能检测](https://mp.weixin.qq.com/s/VwnnYnyo9sCDdUuG4Mu1kQ) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了美团技术团队与复旦大学计算机学院合作开发的 AutoConsis 系统,这是一个自动化智能检测流程,用于检测移动 App 中 UI 界面内容的一致性。该系统通过目标区域识别、目标信息提取和一致性校验三个关键步骤,实现了低成本、高泛化性和高置信度的 UI 内容一致性检测。AutoConsis 在美团 App 的多类营销业务场景中得到应用,有效提升了 UI 质量保障,并在 ICSE 2024 会议上发表了相关论文。 + +### 🐎 [Lazy vars in @Observable classes in Swift](https://nilcoalescing.com/blog/LazyVarsInObservableClasses/) + +[@zoeGuo](https://github.com/zoeGuo):从 ObservableObject 协议迁移到 @Observable 宏时,如果之前使用 lazy 修饰了该类型的变量,那么迁移后将会遇到报错的情况。文中解释了这种情况并提出可以使用 @ObservationIgnored 来解决。 + +### 🐎 [Exploring Apple Intelligence: Writing Tools](https://www.createwithswift.com/exploring-apple-intelligence-writing-tools) + +[@EyreFree](https://github.com/EyreFree):本文介绍了 Apple Intelligence 新推出的 Writing Tools 写作工具功能。该功能集成于 Apple 生态系统中,可在 iOS 和 macOS 设备上使用,主要提供以下功能: + +- 智能校对:自动识别并修正语法和拼写错误 +- 文本重写:支持改写文本,可选择友好、专业或简洁的语气 +- 文本转换:将文本转换为要点、列表或表格(测试版暂未提供) +- 文本摘要:生成长文本的简明摘要(测试版暂未提供) +- AI 集成:支持 AI 辅助写作(测试版暂未提供) + +对开发者而言,Writing Tools 已自动集成到 SwiftUI 的 Text、TextField 和 TextEditor 等原生组件中。开发者可以通过 writingToolsBehavior 修饰符来自定义写作工具的行为,还可以在 UIKit 中实现更灵活的控制。这套工具已无缝集成到 Mail、Messages、Notes 和 Safari 等 Apple 生态系统应用中,显著提升了在这些应用中的写作体验。 + +### 🐕 [货拉拉 iOS 疑难 Crash 治理-系统键盘语音](https://juejin.cn/post/7396463744186515465) + +[@xiaofei86](https://github.com/xiaofei86):本文主要介绍了货拉拉解决系统键盘语音转文字崩溃的整个排查过程。通过崩溃类型、崩溃堆栈和偏移指令等信息,结合汇编指令调试,最终确定崩溃根本原因,并进行有效治理。感兴趣的同学可以阅读原文学习更多疑难崩溃的分析思路。 + +### 🐢 [Google Deepmind LLM 研究员解读 OpenAI o1 及 LLM+ 强化学习新范式 | 3 小时播客全文精华](https://mp.weixin.qq.com/s/i019cHmumJIviyLCDPI3sA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章是对一个长达 162 分钟播客内容的深入解读,该播客深入探讨了 OpenAI 的 o1 模型及其与 LLM(大型语言模型)和强化学习(RL)结合的新范式。以下是播客内容的主要总结: + +- 1. Agent 系统 + - 基础:推理能力是构建 agent 的基础,需解决 AI 间协作、竞争及任务分工。 + - 工具使用:关键在于提升模型对工具功能的理解和调用能力。 + - 构建要素:强大基础模型、高质量工具、优质 prompt 及学习使用工具的数据集。 + - 数据收集:理想方式是将数据标注嵌入用户日常工作流程。 + +- 2. 思维链(CoT)与强化学习(RL) + - 思维链:详细步骤提升模型表现,分显式(明确 token)和隐式(直觉思考)流派。 + - 强化学习:通过 agent 与 environment 交互和 reward 指引学习。 + - 模型反思:允许模型反思修正错误,显著提升 reasoning 任务表现。 + +- 3. AI 反馈系统与 Human in the Loop + - AI 优势:快速处理文本并总结,处理复杂评估任务有优势。 + - Human in the Loop:AI 简化复杂问题,人类做最终判断,提升可扩展性。 + +- 4. Multi-Agent 与角色分类 + - Multi-Agent:更像 multi-task,需角色分离,如 generator 和 critic。 + - 角色分离:通过不同 persona 实现,提升 multi-agent 系统效率。 + +- 5. Single-Agent 与 Multi-Agent + - Single-Agent:在达到超人类水平前,Multi-Agent 表现更优。 + - 过渡阶段:Multi-Agent 可能是过渡产物,未来趋向单一全能模型。 + +- 6. 数据与方法 + - 数据获取:高质量数据是训练关键,特别是在 reasoning 领域。 + - 合成数据:MCTS 等方法生成高质量合成数据。 + +- 7. 未来展望 + - 一年内:期待 coding 技能商品化,多模态 reasoning 突破。 + - 三年内:希望看到接近 AGI 水平的模型,解决所有问题。 + +- 嘉宾与主持人介绍 + - Kimi Kong:Google DeepMind 研究工程师,专注于强化学习。 + - Eric Li:Google Cloud 研究科学家,专注于 LLM 和 MCTS 结合的研究。 + - 苏辉:前微信 AI 研究员,现负责国内一线互联网公司的大模型训练。 + - Cage:原字节数据科学家,现拾象科技研究员。 + - Monica:美元 VC 投资人,前 AWS 硅谷团队和 AI 创业公司员工。 + +### 🐎 [Syntax Highlighting SwiftUI Code with Swift Syntax](https://sahandnayebaziz.org/blog/syntax-highlighting-swiftui-with-swift-syntax) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者总结了一些在使用 swift-syntax 时的经验和技巧 , 并最终在 DetailsPro 应用中实现了对 SwiftUI 代码实时更新的语法高亮显示功能。 + +## 代码 + +### [SwiftUIFX](https://swiftpackageindex.com/finnvoor/SwiftUIFX) + +[@bq](https://github.com/bqlin):SwiftUIFX 是一个 Final Cut Pro 插件,用于直接将 SwiftUI 视图渲染到视频中。该插件提供了一个容器,打通了从 SwiftUI 到 Final Cut Pro 上屏渲染的链路。项目创造性地解决了几个问题: + +1. 如何实现一个 Final Cut Pro 插件。 +2. 如何将 UI 绘制成支持输出到 Final Cut Pro 的数据帧(实现比我们想象的要简单😜)。 +3. 如何在外部使用 dylib 将我们编写的 SwiftUI 视图跑起来。 + +思路很有趣,逻辑较简单,是个很好的入门制作 Final Cut Pro 插件的契机。了解更多插件制作可浏览 [Apple 官方文档](https://developer.apple.com/documentation/professional-video-applications/preparing-plug-ins-for-use-in-final-cut-pro)。 + +### [NSDockTilePlugIn](https://github.com/marioaguzman/NSDockTilePlugIn-Example) + +[@Cooper Chen](https://github.com/cjlcooper):`NSDockTilePlugIn` 是一个用于在 Mac 开发中用于应用未运行时自定义 Dock 图标的插件。通过实现这个插件,开发者可以在应用程序未启动的情况下修改其 Dock 图标,并提供自定义的 Dock 菜单。插件的名称通过应用的 `Info.plist` 文件进行指定,并在登录时或图标被添加到 Dock 时加载。插件可以通过实现 `setDockTile(_:)` 来定制图标,并通过 `dockMenu()` 提供自定义菜单选项。当图标不再有效时(例如应用被移除出 Dock),插件会接收到 `nil` 参数进行销毁操作,这个插件对于部分 Mac 开发用不错的借鉴价值。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#315-2024.12.09.md b/Reports/2024/#315-2024.12.09.md new file mode 100644 index 000000000..4ae75ebdb --- /dev/null +++ b/Reports/2024/#315-2024.12.09.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #315 | 2024-12-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/315.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [CocoaPods Trunk Read-only Plan](https://blog.cocoapods.org/CocoaPods-Specs-Repo/) + +Cocoapods 为将 Specs 仓库转为只读状态制定了时间表,预计在 2026 年 12 月 2 日正式不再接受新的提交。 + +## 文章 + +### 🐕 [有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常 | 肘子的 Swift 记事本](https://fatbobman.com/zh/posts/the-anomaly-of-onchange-in-swiftui-multi-layer-navigation/) + +[@Barney](https://github.com/BarneyZhaoooo):本文探讨了 SwiftUI 中 `onChange` 的异常行为,特别是在多层导航的情况下。文章分析了在使用 `NavigationView` 和 `NavigationLink` 时,`onChange` 修饰符可能会出现的问题,尤其是当视图层级嵌套较多时。作者提供了几个实际示例,演示如何管理状态变化和确保 `onChange` 正常响应。同时,提供了一些最佳实践,以帮助开发者避免常见陷阱并提升应用性能和用户体验。 + +### 🐕 [Improving the approachability of data-race safety](https://github.com/hborla/swift-evolution/blob/approachable-concurrency-vision/visions/approachable-concurrency.md) + +[@Smallfly](https://github.com/iostalks):这篇文章提出了 Swift 并发特性面临的易用性挑战,包括过多的显式注释、数据竞争误报和异步代码编写困难。文中提出了解决方案包括减少并发注释、调整异步函数语义以减少误报、提供同步和异步代码之间的桥接工具,以及自动迁移代码等。目的是为了让 Swift 并发更易学易用,同时保持高性能。推荐给对 Swift 并发特性演进感兴趣的同学阅读。 + +### 🐎 [深入探讨 C++ 多线程性能优化](https://mp.weixin.qq.com/s/18TujefnTj-17GuNgmYW-Q) + +[@老驴](https://weibo.com/u/6090610445):这篇来自腾讯技术工程的文章从实际案例出发,深入探讨了 C++ 多线程编程中的性能优化问题,包括锁竞争、缓存一致性等难点,并通过详细的 benchmark 数据对比锁与原子操作的性能差异。此外,文章还介绍了如 Epoch Based Reclamation 等高级优化方法。无论是提升性能还是理解底层机制,这篇文章都值得一读。 + + +## 工具 + +### [Xcode + ChatGPT: Official Support is Available Now](https://medium.com/@hiandic/dc21998f3653?source=friends_link&sk=e4dfbadcc5281bd474ecd546b221877e) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了 OpenAI 最新宣布的 ChatGPT for macOS 可以直接与 Xcode 集成的功能,除了 Xcode,该功能还支持 VS Code、TextEdit 和 Terminal 等开发工具。使用该功能需要按以下步骤: + +- 目前该功能仅向 ChatGPT Plus 和 Team 用户开放请先确保条件符合,Enterprise 和 Edu 用户将在近期获得访问权限 +- 确保 ChatGPT for macOS 应用已更新到最新版本 +- 在 ChatGPT 设置中启用 `Enable Work with Apps` 选项以获取辅助功能权限 +- 使用快捷键 Option + Space 打开 ChatGPT 聊天栏 +- 点击 `Work With Apps` 按钮并选择 Xcode + +通过这种集成,ChatGPT 可以直接查看和理解开发者的代码库(Codebase),从而提供更准确的回答和建议。作者以开发 SwiftUI 动画的卡片翻转游戏为例,展示了这个新功能的应用。AI 辅助编程近来发展迅速,这次与 Xcode 的原生集成让开发体验更加流畅,标志着 AI 编程助手进入新阶段。 + +### [Easydict: 一个简洁优雅的词典翻译 macOS App](https://github.com/tisfeng/Easydict) + +[@Cooper Chen](https://github.com/cjlcooper):Easydict 是一个开源的词典翻译 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果,目前支持市面上绝多数主流的翻译 App,使用者可以通过 Homrebrew 快速安装使用,Easydict 支持鼠标滑词、OCR 识别等功能,是 Mac 平台上非常高效的翻译软件,值得推荐。 + +## 代码 + +### [swift-sharing](https://github.com/pointfreeco/swift-sharing) + +[@bq](https://github.com/bqlin):如其名,sharing,你能想到的状态共享,跨模块间的状态共享、持久化、观察监听,它都做了,无论是实现业务逻辑、Combine、SwiftUI、UIKit 都能无痛接入。关键人家实现还非常优雅,宏、属性包装器、清晰的职责实现,都是很优秀的实践,单单接入就能让你的代码耳目一新了。还是那句话,Point-Free 出品,必属精品。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 比图科技 - 高级 iOS 工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#316-2024.12.16.md b/Reports/2024/#316-2024.12.16.md new file mode 100644 index 000000000..cd625f40b --- /dev/null +++ b/Reports/2024/#316-2024.12.16.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #316 | 2024-12-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/316.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐢 [Flutter 3.27 发布](https://mp.weixin.qq.com/s/gQ5u1m7hudyoa-HeLyMKlw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.27 悄悄的就来了,该版本包含了大量更新,包括: + +- Cupertino 相关组件的大量优化 +- Material 下的一些主题和控件调整,包括之前我们聊过的 Row and Column spacing +- Android Impeller 默认开启和 iOS 性能优化 +- P3 色域的 UI 支持 +- Web 下的大量改进 +- Swift Package Manager 的支持 +- 之前聊过的 Edge to Edge 和 Android Freeform 支持 +- pub 下载数 +- DevTool 工具大改进和优化,包括设备断线数据保持 +- 对老 Dart SDK 插件不再维护适配,弃用 OC + +## 文章 + +### 🐕 [Prevent screenshot capture of sensitive SwiftUI views](https://www.createwithswift.com/prevent-screenshot-capture-of-sensitive-swiftui-views/) + +[@BluesJiang](https://github.com/bluesjiang):这篇文章使用了一个比较巧妙的方法来实现截屏隐藏隐私信息。核心是使用 `UITextField` 的 `isSecureTextEntry` 属性,然后将被包装的 View 作为其子 View 即可。然后使用了 preference 来实现父容器大小与子容器大小匹配。可以通过这个文章整体了解 SwiftUI 的 View 的包装和 Modifier 的写法,是一个很好的参考。 + +### 🐕 [Why Can't You Loop Over Ranges of Characters in Swift](https://mfaani.com/posts/swift/why-cant-you-loop-over-ranges-of-characters-in-swift/) + +[@bq](https://github.com/bqlin):当你对 `"a"..."z"` 执行 for 循环遍历时,你会惊讶地发现 Swift 并不支持的,虽然这有点违反常理。这篇文章你将了解到 Swift 字符并不是简单的 ASCII 字符,而是可变长的 Unicode 字符,其在不同的语言环境有不同的排序,不断迭代的 Unicode 也在不断地扩充字符范围,甚至有些字符是集群的时候,遍历、计数将变得不太可能。文章也介绍了 Unicode 这么设计背后的意图,以及当你硬要遍历一个字符范围时候,作者也给出了一个比较安全的解决方案。 + +### 🐕 [WebKit GPU Profiling](https://developer.playcanvas.com/user-manual/optimization/gpu-profiling/) + +[@莲叔](https://github.com/aaaron7):WebGL 的 debug 一直以来都是一个令人头痛的问题,通过浏览器内置的调试能力能够满足一部分需求,但如果需要更进一步的分析往往都缺乏足够好用的工具。这篇文章针对 WebGL 和 WebGPU 两种应用在不同平台的调试技巧做了汇总,包括 Mac、Window 和 Quest。其中对于在 Mac 上通过 Xcode 来做分析给出了 step by step 的步骤,非常友好。 + +### 🐕 [Concurrency Step-by-Step: Reading from Storage](https://www.massicotte.org/step-by-step-reading-from-storage) + +[@Barney](https://github.com/BarneyZhaoooo):本文提供了关于如何在 Swift 应用中逐步从本地存储读取数据的详细指南。文章重点介绍了如何使用 `Codable` 协议来序列化和反序列化对象,并通过 `FileManager` 管理文件的读取和写入。作者逐步解析了实现这个过程的关键步骤,包括如何设置数据模型、保存数据以及从文件中加载数据的示例代码。此外,文章还提供了常见问题的解决方案,以帮助开发者更有效地处理数据存储。适合想要深入理解 iOS 数据存储机制的开发者阅读。 + +## 代码 + +### [rmtrash](https://github.com/TBXark/rmtrash) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Swift 实现的 macOS 命令行工具 rm 的替代方案,用于将文件移动到废纸篓。此外 rmtrash 提供了与 Linux 和 macOS 版本 rm 命令完全兼容的标志位支持方案。 + +### [ml-cross-entropy](https://github.com/apple/ml-cross-entropy) + +[@Leo](https://github.com/LeoMobileDeveloper):由 Apple 开源的 CCE(Cut Cross-Entrop) 是一种优化小模型(SLM)训练过程中内存消耗的代码库,以 Gemma 2 (2B) 为例,能够将内存从 24GB 优化到 1MB,显著提高小模型的训练速度。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 支付宝-终端业务研发专家(支付碰一下) - iOS/Android - P7 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#317-2024.12.23.md b/Reports/2024/#317-2024.12.23.md new file mode 100644 index 000000000..ce19f833b --- /dev/null +++ b/Reports/2024/#317-2024.12.23.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #317 | 2024-12-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/317.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [展望未来:打造出色的 visionOS App(线下)](https://developer.apple.com/events/view/F7QL84UKJV/dashboard) + +参加在上海 Apple 开发者中心举办的为期一天活动,了解如何打造出色的 visionOS App。 + +你将通过三个讲座学习如何开始使用 SwiftUI,探索一流的 App,并深入了解 RealityKit 和 Reality Composer Pro。随后,你还将听取开发者社区成员的分享,并有机会体验一系列 visionOS App 示例。 + +## 文章 + +### 🐕 [得物 iOS 函数调用栈及符号化调优实践|得物技术](https://mp.weixin.qq.com/s/KSAZRfqYmBPuooXJM5qn0A) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了得物技术团队如何解决 iOS 隐私合规检测的性能难题。文章详细解析了 `+[NSThread callStackSymbols]` 的内部机制,并通过逆向工程优化了调用栈的获取与符号化过程。实现包括自定义 `callStackSymbols` 方法、缩短堆栈长度以及智能缓存策略,显著降低了 CPU 占用,提升了检测效率。为 iOS 开发者提供了优秀的性能优化实践案例。 + +### 🐕 [Exploring Apple Intelligence: Image Generation](https://www.createwithswift.com/exploring-apple-intelligence-image-generation/) + +[@Cooper Chen](https://github.com/cjlcooper):Apple 推出了几款创新的图像生成工具,推动个性化创作和数字交流。Image Playground 允许用户通过文本和视觉提示生成图像,并与 PencilKit 集成,带来 Image Wand 功能,让用户将手绘草图转化为精美图像。同时,Genmoji 让用户根据文本描述生成个性化表情符号,增强了数字沟通的表现力。这两款工具不仅注重创意自由,还在包容性和版权合规性上做出了努力。此外,开发者可以将这些功能集成到应用中,扩展数字创作的可能性。而这篇文章为数字创作和个性化互动提供了不错的参考,展示了 Apple 工具如何为用户和开发者带来创意支持。 + +### 🐕 [Apple' s use of Swift and SwiftUI in iOS 18](https://blog.timac.org/2024/1208-state-of-swift-and-swiftui-ios18/) + +[@ZengyiMa](https://github.com/ZengyiMa):这篇文章分析了苹果在 iOS 18 中 Swift 和 SwiftUI 的使用情况。iOS 18 中使用 Swift 和 SwiftUI 的应用数量持续增长,甚至在安全固件的低级别部分开始使用 Swift。此外,新开发的技术,如 Apple Intelligence,也依赖于 Swift。截止目前,iOS 18 现在包含 592 个使用 SwiftUI 的二进制文件,Swift 代码的二进制文件数量相比较 iOS 17 增加了 50%。 + +### 🐎 [JDImage - 京东自研鸿蒙图片库](https://juejin.cn/post/7444800867030286371) + +[@Crazy](https://github.com/jiyan135960):JDImage 是京东使用 C++ 打造的一款跨平台的图片加载框架,主要解决系统和其他第三方加载组件的问题,比如加载速度较慢,格式支持不全等。JDImage 在架构上借鉴了 SDWebImage 与 Glide 等图片加载框架,将整体图片库分解为:图片缓存、解码器、图片源拉取、性能监控、图片组件五个部分,使用流水线设计灵活调整执行流程,满足各类的图片加载需求。最后关于 C++ 的跨端代码要根据自己项目的实际情况进行选择,使用之前对错误的捕捉与升降级一定要事先准备好。 + +## 工具 + +### 🐕 [HuggingChat macOS](https://github.com/huggingface/chat-macOS) + +[@EyreFree](https://github.com/EyreFree):HuggingChat macOS 是一款原生 macOS 聊天应用,由知名 AI 开源社区 Hugging Face 开发。该项目将先进的开源语言模型能力集成到桌面端,为用户提供流畅的 AI 对话体验,可以简单理解为 ChatGPT 客户端的本地大模型版。 + +- 原生体验:专为 macOS 设计,支持全局快捷键(⌘ + Shift + Return)快速唤起; +- 语音支持:支持实时同声传译(OpenAI Whisper); +- 易于安装:提供直接下载和 Homebrew 安装两种方式; +- IDE 集成:通过 VSCode 扩展支持代码上下文理解,提供更准确的编程建议; +- 开源透明:基于 Swift 开发,代码完全开源,支持社区贡献; +- 使用门槛低:仅需 macOS 14.0 以上系统即可运行,安装即用。对于开发者,项目提供完整的开发文档和贡献指南。 + +作为 Hugging Face 出品的官方客户端,该项目让优质开源 AI 模型触手可及,为想要摆脱商业 AI 服务的用户提供了绝佳选择。项目活跃度高,安装简单,值得一试。 + +### 🐢 [Skip: Build native apps for iPhone and Android with Skip](https://skip.tools) + +[@bq](https://github.com/bqlin):通过 Skip 项目,你可以使用 Swift 同时编写 Android 和 iOS 原生应用。没看错,Swift 也有反客为主的一天了。Skip 项目的基本原理是:当你在编写 Swift 和 SwiftUI 源代码时,Skip Xcode 插件会不断构建用于 Android 的等效代码,因此最终 App 产物都能获取原生的性能和原生的交互体验。 + +- 真正原生:与其他跨平台方案相比,Skip 项目是真正的原生代码。当编写 SwiftUI 代码时,将生成 Android 的 Jetpack Compose。 + +- 完全透明:使用 Skip 时,不会在调试器中隐藏任何信息。Skip 库是开源的,也没有复杂的运行时需要调试。 + +- 轻量:使用 SkipZero,iOS App 不依赖任何 Skip 框架;Android 也仅需几个 Skip 开源库。 + +- 内存效率:无额外的托管运行时,Skip App 在两个平台都可能地高效。 + +- 熟悉的 IDE:Skip 使用 Xcode IDE 进行编写,是 Swift 的首要开发环境。当需要高度自定义的 Android 能力时,则需在 Android Studio 中编写 Kotiln。 + +- 完美整合:Skip 与 Kotlin 和 Compose 无缝衔接,因此也很轻松集成 Android 三方库。 + +- 框架开放:Swift-on-Android 只是开始,Skip 的开发框架都是免费开源的。 + +- CI 友好:支持跨平台的单元测试,确保逻辑在跨平台中保持一致。也支持在本地或远程执行测试。 + +- 容易迁移:代码都是你自己的,包括 Swift 输入和 Android 输出,因此不会持续依赖 Skip 工具。 + + +值得注意的是,虽然框架源码是开源的,但 Xcode 转译器插件针对大型商用还是需要收费的。 + +## 代码 + +### [SwiftUI-experiments](https://github.com/mikelikesdesign/SwiftUI-experiments) + +[@DylanYang](https://github.com/Dylan19Yang):作者是一个爱好自己通过代码实现创意的设计师,他通过 SwiftUI 实现了不少有创意的交互设计,并且都提供了原型 Demo。独立开发者们如果希望尝试一些有特色的交互的话可以参考参考。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#318-2024.12.30.md b/Reports/2024/#318-2024.12.30.md new file mode 100644 index 000000000..b163f1709 --- /dev/null +++ b/Reports/2024/#318-2024.12.30.md @@ -0,0 +1,70 @@ +# 老司机 iOS 周报 #318 | 2024-12-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/318.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [阿权](https://github.com/bqlin) 加入老司机技术,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。 + +**希望 阿权 的加入也能为大家带来更多元化的内容输出!** + +## 文章 + +### 🐕 [Calling Hidden Swift Functions](https://www.emergetools.com/blog/posts/calling-hidden-swift-functions) + +[@AidenRao](https://weibo.com/AidenRao):这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别,从 open 到 private。但是,用 Swift 编写的 Apple 框架(尤其是 SwiftUI)包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。 + +### 🐕 [Be careful wrapping a throwing function in a Task](https://www.swiftwithvincent.com/blog/be-careful-wrapping-a-throwing-function-in-a-task) + +[@Barney](~https://github.com/BarneyZhaoooo~):本文讨论了在 Swift 中将抛出函数包装在 `Task` 中时需要注意的事项。直接在 `Task` 中调用抛出函数可能导致不如预期的行为,因为 `Task` 默认会捕获并处理错误。作者举例说明了如何正确使用 `Task` 来执行抛出函数,并提供了实现的最佳实践,以确保错误被适当地处理。同时,文章还强调了在并发编程中理解错误处理的重要性,帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。 + +### 🐎 [Enhance Xcode Previews with Unit Test Coverage](https://www.emergetools.com/blog/posts/unit-test-xcode-previews/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了如何利用单元测试加强 Xcode Previews 能力的可靠性。Xcode Previews 是一个非常方便的开发工具,但是它在有些时候也非常脆弱,如果有人在一个 view 上添加了 `@EnvironmentObject` 标志,所有调用到这个 view 的 preview 场景如果没有注入这个变量就会发生 crash。在代码量较少时还能及时发现,但是在一个庞大的项目中,view 的层级很深的话很难完全覆盖到所有需要修复的 preview 场景。而借助一个三方的 SnapshotPreviews 框架,它能够自动帮助我们在运行时查找所有实现了 PreviewProvider 的 preview 并添加到单元测试中进行执行。这样可以非常轻松的确保我们的 preview 都能成功运行了。 + +## 代码 + +### MetalLibraryArchive + +MetalLibraryArchive 是一个 Apple 的 metallib 的逆向库,可以解析出 metallib 的 library 类型,目标平台和包含的所有函数。 + +函数的信息包含了: + +- 函数名 +- 函数类型 - 例如 vertex/fragment/kernel 等等 +- Metal Shading Language 的版本 +- 函数的 bitcode 等效表达式(底层使用 llvm-dis) +- 函数源码(如果 metallib 包含了源码的话) + +另外也提供了一个[在线的 demo](https://yuao.me/MetalLibraryExplorer/),对于想要逆向 Metal 的朋友来说是非常有用的工具。 + +## 音视频 + +### 🐎 [为什么 C 口数据线越来越乱?](https://www.bilibili.com/video/BV1j7zzYGEp9/) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线,不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#319-2025.01.06.md b/Reports/2025/#319-2025.01.06.md new file mode 100644 index 000000000..44b4ac39c --- /dev/null +++ b/Reports/2025/#319-2025.01.06.md @@ -0,0 +1,62 @@ +# 老司机 iOS 周报 #319 | 2025-01-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/319.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [聊聊 Flutter & Dart 里的内存泄漏和优化,也许没你想的那么复杂](https://mp.weixin.qq.com/s/_88yMWWkLI6fFPHhqMdc2w) + +[@Crazy](https://github.com/jiyan135960):本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题,主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短,作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别,以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中,已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架,来解决关于 context 引用的问题。 + +### 🐕 [百度 APP iOS 端磁盘优化实践(上)](https://mp.weixin.qq.com/s/YNd8-NKVdql3pRNImwxyTA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 APP 开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题,从 iOS 沙盒文件存储机制出发,系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略,以及多维度触发机制和灵活的用户交互设计,平衡了系统性能与用户体验。 + +### 🐎 [Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing](https://www.adyen.com/knowledge-hub/swift-api-diff) + +[@DylanYang](https://github.com/Dylan19Yang):在 SDK 的维护过程中,检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具,但是对 iOS target 使用会有异常,第二种方式是结合 xcodebuild 和 swift-api-digester,第三种则是作者开源的一个工具 Swift Public API Diff,它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。 + +### 🐢 [Compile Metal shader Bitcode to x86 and ARM assembly](https://worthdoingbadly.com/metalbitcode/) + +[@ChengzhiHuang](https://www.github.com/ChengzhiHuang):作者通过逆向的手段研究了从 metal 代码到 air 文件([LLVM Bitcode](https://llvm.org/docs/BitCodeFormat.html)),最后到 metalib 文件(产物)的过程,期间根据经验进行合理猜测验证,通过寻找原始函数字符串、magic number 、长度偏移量 等还原了文件的结构,并最终提供了将 metalib 文件重新 disassemble 为 air 文件的脚本。 + +最后作者还尝试直接使用 LLVM 将 air 文件重新 compile 成最终的 ARM/x86 的机器码,尽管这些最终产物并不适合直接提交给 GPU 运行,但是也证明了 LLVM 是可以处理来自 metal 的 Bitcode 的。 + +内容与过程非常翔实,推荐工作中需要与 Metal 打交道的同学阅读。 + +前置知识:LLVM 是三段式的设计,而 LLVM 会将 IR 转为 Bitcode ,Bitcode 依旧是可以兼容多平台的中间代码,因此可以最终翻译为各个平台的代码。 + +### 🐢 [什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap](https://mp.weixin.qq.com/s/oiwfzBiednsQQgSCG-K_0g) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 如标题所言,Flutter 的 UI 组件编码方式一直被开发者们所诟病,本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化,毕竟末尾的 '括号山' 还是很高的。 + +## 代码 + +### 🐢 [Home Assistant iOS](https://github.com/home-assistant/iOS) + +[@阿权](https://github.com/bqlin):Home Assistant iOS 客户端,代码全部开源。Home Assistant 是一款开源的智能家居自动化平台,允许用户控制所有连接到同一网络的智能家居设备。项目文档详实,甚至面向零基础用户,了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 [Home Assistant Feature overview](https://companion.home-assistant.io/docs/core/)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#320-2025.01.13.md b/Reports/2025/#320-2025.01.13.md new file mode 100644 index 000000000..7b9fc6b0f --- /dev/null +++ b/Reports/2025/#320-2025.01.13.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #320 | 2025-01-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/320.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [Algorithm changes to server connections for Apple Pay on the Web](https://developer.apple.com/news/?id=2x8awlvm) + +[@Damien](https://github.com/ZengyiMa):从 2025 年 2 月 4 日开始,苹果将改变支持 Apple Pay 在 Web 上的服务器连接的安全算法。为了保持服务不间断,你需要确保你的生产服务器在这个日期之前支持指定的[六种密码之一](https://developer.apple.com/documentation/apple_pay_on_the_web/setting_up_your_server#overview)。 + +## 文章 + +### 🐕 [Xcode Library customization with SPM plugin](https://www.artemnovichkov.com/blog/xcode-library-customization-with-spm-plugin) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文探讨了如何通过 Swift Package Manager 插件自动将自定义 SwiftUI 视图和修饰符集成到 Xcode Library 中。 + +通过实现 `LibraryContentProvider` 协议,开发者可以将自定义组件引入库中,提升可重用性和发现性。然而,手动维护这些集成可能会很繁琐。作者通过利用 SwiftSyntax,开发了一份插件来自动化此过程,这种方法简化了将自定义组件集成到 Xcode 库中的过程,减少了手动操作和潜在错误。 + +### 🐕 [数据编织在AB实验自动化中的应用 | 京东零售技术实践](https://mp.weixin.qq.com/s/NMPot2AfEtsWXVPowZBDOA) + +[@Barney](https://github.com/BarneyZhaoooo):本文讨论了数据编织在 AB 实验中的应用,强调其重要性以及面临的数据科学性、一致性和时效性挑战,并提出相应的自动化解决方案。内容涵盖数据编织的管理理念、逻辑数据平台构建、标准语义建立及自动编排等关键技术。最后,展示了 AB 实验链路的自动化实施进展及未来规划,强调提升交付效率和数据治理的必要性。 + +### 🐢[使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南](https://mp.weixin.qq.com/s/3qDQJXXiVl9gF-q5KtbxVw) + +[@阿权](https://github.com/bqlin):文章本是 APMPlus 的软文,一套全面的性能监控的解决方案,但偏偏还为大家罗列了 21 条内存管理的最佳实践,并介绍了 OOM 监控的基本原理与手段。干货满满,都是我们日常开发中高频遇到的场景,或许它能成为内存问题踩坑时的自查小册。 + +### 🐕 [What happens when you move a file in git?](https://swiftrocks.com/what-happens-when-you-move-a-file-in-git) + +[@JonyFang](https://github.com/jonyfang): 文章主要介绍了在 Git 中移动或重命名文件及文件夹时的内部工作原理,包括文件以快照形式存储、文件夹与提交的关联、重命名或移动操作对存储的影响及优化方法,还提及了大文件的特殊处理情况。文中对 Git 文件的操作机制的介绍,对日常开发中文件结构调整会有帮助,降低因操作不当引发的仓库性能问题风险。 + +## 代码 + +### 🚧 [Now we’re all Forked!](https://appdecentral.com/2024/12/13/now-we-are-all-forked) + +[@Cooper Chen](https://github.com/cjlcooper):Forked 是一个简化共享数据管理的 Swift 工具,专为多设备数据同步和冲突解决设计。借鉴 Git 的分支和合并机制,Forked 能轻松实现三方合并(3-way merge),并自动处理并发冲突。该工具支持与 iCloud 等云服务同步,确保跨设备的数据一致性,并通过简洁的 API 帮助开发者快速实现数据合并和冲突解决。无论是离线编辑还是实时协作,Forked 都能提供高效、可靠的数据管理方案。如果你需要在应用中实现智能数据同步和冲突解决,Forked 是一个理想选择。了解更多并开始使用 Forked,查看官方文档:[Forked GitHub 仓库](https://github.com/drewmccormack/Forked)。 + +### 🐢 [解密小红书与美团的合作案例](https://www.xiaoyuzhoufm.com/episode/676e5d051e823e72d332d12e) + +[@EyreFree](https://github.com/EyreFree):播客主要探讨了小红书与美团两大平台的战略合作,美团正在寻求从单纯的效果营销转向更注重品牌价值和用户心智的增长方式,而小红书则凭借其独特的内容生态和用户群体特征,成为流行生活趋势的策源地。双方合作的核心在于优势互补:美团有流量但缺乏优质内容,小红书拥有丰富的 UGC 内容但需要商业变现出口。这次合作反映了内容平台与交易平台的融合趋势,也展示了"反漏斗模型"在实际商业场景中的应用。虽然可能离具体的技术开发较远,但对互联网商业逻辑感兴趣的朋友可以听一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#321-2025.01.20.md b/Reports/2025/#321-2025.01.20.md new file mode 100644 index 000000000..3c3602edb --- /dev/null +++ b/Reports/2025/#321-2025.01.20.md @@ -0,0 +1,85 @@ +# 老司机 iOS 周报 #321 | 2025-01-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/321.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +这就是春节前最后一期周报啦,下周老司机编辑部也会开始春节假期,提前祝大家新春快乐! + +## 文章 + +### 🌟 🐎 [探究 SwiftUI Preview 的工作原理](https://onee.me/zh/blog/how-new-xcode-swiftui-preview-works-under-the-hood/) + +[@JonyFang](https://github.com/jonyfang): 在 SwiftUI 开发中,Xcode Preview 常出现崩溃或卡死问题,如果不了解其工作原理,通常只能用清除缓存、重启 Xcode 等方法解决。作者通过将 DerivedData 文件夹加入 Git 管理,观察其变化来研究 Preview 原理。其运行机制上,Xcode 16 起 Build and Run 与 Preview 共享构建产物,Preview 用 JIT 方式运行且有特殊预处理过程。Preview 有 Small、Middle、Large 三种重构建策略,依源代码修改程度决定范围与刷新方式。与 Flutter 的 Hot Reload 相比 Xcode Preview 的表现逊色,不支持断点调试,视图状态会重置,实现更黑盒,但仍期待 Xcode 后续对 Preview 优化。 + +### 🐢 [Using Copilot to write a raindrop audio synthesizer using AVAudioEngine](https://www.cocoawithlove.com/blog/copilot-raindrop-generator.html) + +[@EyreFree](https://github.com/EyreFree):本文分享了作者使用 GitHub Copilot 开发一个用 AVAudioEngine 实现的雨滴音频合成器的经历。文章评估了 Copilot 在实际开发中的优缺点: + +优点: +1. 在处理不熟悉的 SDK 时能快速提供解决方案; +2. 能实现复杂算法(如粉噪音生成); +3. 擅长跨语言代码转换(如 C++ 到 Swift)且基本不会产生语法错误。 + +缺点: +1. 代码质量欠佳,存在大量重复和不必要的抽象,常忽略指令的部分要求; +2. 对最新的语言特性支持不足,线程安全处理不当; +3. 手动修改代码后容易与 Copilot 聊天上下文不同步。 + +使用 Copilot 就像在指导一个热情但经验不足的新手程序员,虽然在某些场景下能提高效率,但需要权衡使用 Copilot 编写代码与手动修复其产生的问题之间的时间成本,因为和 Copilot 的交互是「一次性」的,AI 并不会真的累积这些进步。 + + +### 🐎 [Creating interactive tutorials using DocC](https://www.nutrient.io/blog/creating-interactive-tutorials-using-docc/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何使用 DocC 创建交互式教程。通过 DocC,可以将静态的文档内容转变为交互式的体验,允许用户在文档中点击、操作,并快速找到他们所需的信息。此外,文章还展示了如何集成代码示例、自定义预览图片和课后小测,提供了更具互动性和可操作性的开发者学习体验。 + +### 🐎 [Creating a SwiftUI text view with tappable links](https://danielsaidi.com/blog/2024/12/18/creating-a-swiftui-text-view-with-tappable-links) + +[@Bluesjiang](https://github.com/bluesjiang): 文章介绍了一种在 SwiftUI 中实现可点击超链接效果的文本。因为 SwiftUI 原生没有提供对应中间。文章的作者很巧妙的利用了 SwiftUI 中 `Text` 支持 Markdown 的渲染来实现这一效果。作者还简单编写了一个组件来帮你快捷的构建 Markdown 超链接的内容。比较适合刚入门 SwiftUI 的同学实践自定义 UI。 + +### 🐕 [Size Matters: An Exploration of Virtual Memory on iOS](https://alwaysprocessing.blog/2022/02/20/size-matters) + +[@阿权](https://github.com/bqlin):文章作者发现开启扩展虚拟内存(Extended Virtual Addressing)能够解决调试 App OOM 的问题。文中详细介绍了以下内容: + +1. 虚拟内存的原理、作用; +2. iOS 中虚拟内存: + 1. iOS 虚拟内存的特殊性:No Page Outs; + 2. iOS 虚拟内存空间大小的计算方式; + 3. iOS 不同设备进程可用的虚拟地址空间大小; + 4. 调试 App 出现 OOM 的原因:除了程序自身的 Mach-O、依赖库占用内存,还需为调试环境预留内存; + 5. 通过开启扩展虚拟内存(Extended Virtual Addressing)来防止调试出现 OOM。 + +文章遇到的情况在许多大型项目跑在低端设备上都会经常出现,了解虚拟内存对调试开发都很有帮助。 + +### 🐢 [Type-Driven Design with Swift](https://swiftology.io/collections/type-driven-design/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一系列文章向我们介绍了类型驱动设计的概念。类型驱动设计的核心是通过类型自身来传递更多信息,一个非空类型比一个 Optional 类型包含了更多信息(非空),一个自定义的 Email 类型可以比单纯的 String 包含更多信息,例如在一个 Email 结构的初始化中校验 String 的格式是否正确,通过传递 Email 类型而不是 String 来保留这份格式校验的信息。以此类推,把更多的逻辑通过自定义类型封装起来,通过巧妙的设计类型来抹除原本可能出现的错误状态,然后在类型和类型之间通过领域化来划分、拆解,使得整个设计思路更清晰。本系列通过丰富的 demo 对类型驱动设计这一概念有较深入的阐释,感兴趣的读者可以花时间阅读下这个系列。 + +## 代码 + +### 🐎 [echarts](https://echarts.apache.org/examples/zh/index.html#chart-type-line) + +[@极速男孩](https://github.com/ztlyyznf001): ECharts 是一个开源的可视化库,广泛用于创建交互式图表。线性图表常用于表示数据趋势,X 轴通常为时间或类别,Y 轴为数值。ECharts 支持多条数据线展示、交互式操作(如悬停显示数据),并可高度自定义图表样式,如颜色、线条类型、动画等。用户通过 JSON 配置来定义图表内容,适用于销售、气温等多种数据展示。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#322-2025.02.10.md b/Reports/2025/#322-2025.02.10.md new file mode 100644 index 000000000..47518793d --- /dev/null +++ b/Reports/2025/#322-2025.02.10.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #322 | 2025-02-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/322.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [zhangferry](https://zhangferry.com) 加入老司机技术!ferry 是我们的老朋友了,作为摸鱼周报的主编输出了大量优质内容,同时也深度参与了历年 WWDC 内参担任审核。目前 ferry 在抖音基础技术团队从事代码分析相关工作,对 LLM 与 Stable Diffusion 也有涉猎。 + +**希望 ferry 的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [Apple 开源 Xcode 底层构建引擎](https://www.swift.org/blog/the-next-chapter-in-swift-build-technologies/) + +[@kemchenj](https://kemchenj.github.io/):Apple 近日开源了 swift-build,它是 Xcode、Swift Playground 底层使用的构建引擎(在 Xcode 里名为 XCBBuildService)。 + +目前 Swift Package Manager 使用的是另一套单独编写的构建引擎,同时维护两套除了行为不同会让用户困惑,并且维护成本也很高,所以后续 SPM 也会改为使用 swift-build,统一构建系统。 + +这样也给了我们机会一窥 Xcode 里的构建逻辑,以往很多问题都可以直接在这个库里找到答案,对于 Xcode 构建逻辑感兴趣的你千万别错过。 + + +### [不再依赖 CallKit,iOS 微信使用新方案实现通话弹窗接听](https://mp.weixin.qq.com/s/6hw75UXjqGGBfNmuH3_cVQ) + +苹果上线了新的 LiveCommunicationKit 作为在中国大陆替代 CallKit ,从用户视角分析,与 CallKit 最大的区别就是适配了灵动岛。目前[文档内容](https://mp.weixin.qq.com/s/6hw75UXjqGGBfNmuH3_cVQ)不多,期待 WWDC25 中能有更详细的内容。 + +## 文章 + +### 🌟 🐢 [Debugging An Undebuggable App](https://bryce.co/undebuggable/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部): +1. 直接调用 ``ptrace(PT_DENY_ATTACH, 0, 0, 0);`` 可以阻止后续所有的 debugger(lldb) attch。需要注意 ptrace 在 iOS 上是私有函数,需要通过 dlsym 查找。如果应用使用这种方式加固,则可以通过符号断点并 ``thread return`` 跳过当前函数的剩余指令解决。 +2. ptrace 本质是 ``svc #0x80`` 等汇编指令的集合,因此可以直接通过汇编指令调用,就能避免应用程序绕过 dlsym 寻找 ptrace 来进行调用(这样也能避免一些审核时的私有 API 扫描)。 +3. 在未知的二进制中搜索带有特殊含义的汇编,例如搜索 ``mov x16, #0x1a`` 与 ``mov w16, #0x1a`` 就比搜索 svc 效率更高。因为 x16/x17 是一般是跳转校验用的特殊寄存器,很少挪作他用。 +4. ``br s -a 0x102A2BB14 -s XXXBinary`` 意思是设置断点,在相对 XXXBinary 的 loadAddress + 0x102A2BB14 的位置。这样可以避免每次启动 App 时 iOS 的 ASLR 机制会随机 loadAdfress 位置而需要重复计算实际的断点地址。同样我们日常调试时也可以相对我们自己的二进制或者系统库(UIKit / SwiftFoundation 等)设置断点。 +5. 通过无限循环调用 [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES/NO] 可以制造出 OOM ,进而直接让 iOS 系统崩溃而重启(System OOM)。 + +### 🐎 [Advantages of Using withAnimation](https://www.magnuskahr.dk/posts/2025/01/advantage-of-withAnimation/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。 + +### 🐢 [Hardcore Debugging](https://blog.jacobstechtavern.com/p/hardcore-debugging) + +[@zhangferry](zhangferry.com):当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案: + +1. 利用 `git bisect`,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。 +2. 提取崩溃日志,利用 atos 进行符号化,可以更精准定位问题代码。其中还分享了一个 tips,当 atos 执行异常时,可以根据偏移地址在 dSYM 里的 `Relocations/aarch64/xx.yml` 文件中手动解析符号。 + +### 🐎 [Compose 多平台是真实存在的!](https://whackylabs.com/swift/kotlin/compose/2025/01/12/compose-multiplatform-is-real/) + +[@极速男孩](https://github.com/ztlyyznf001):该文章分享了作者使用 Kotlin Multiplatform 与 Compose Multiplatform 的体验。通过网页工具快速生成项目模板,并在 Android Studio 中打开,然后简单实现了一个 PhotoApp,实现多平台代码共享。虽然依赖配置略有挑战,但可直接在 Android Studio 中运行 iOS 应用。 + +### 🐢 [深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件](https://mp.weixin.qq.com/s/FCu6OiZRh6EcmCWLB904jA) + +[@david-clang](https://github.com/david-clang):本文深入介绍 Android 侧 Flutter 和 Compose 在内嵌 Platform Views 的实现对比。虽然 Compose 和「传统 XML View」 在上层开发是两种写法,但因为底层渲染机制都是 Android Native View 的同一套渲染机制,所以无论内嵌 Platform Views 是否为 SurfaceView,都能正常渲染,甚至官方还推出了 SurfaceView 对应的 Compose 封装 [AndroidExternalSurfaceScope](https://developer.android.com/reference/kotlin/androidx/compose/foundation/AndroidExternalSurfaceScope)。而 Flutter 和内嵌的 Platform Views 是两套渲染流程,连渲染数据的生产线程都不同,而且在内嵌 SurfaceView 时的渲染模式会从 [TLHC](https://docs.flutter.dev/platform-integration/android/platform-views#texturelayerhybridcomposition) 降级为 VD(这会影响 SurfaceView 交互逻辑,如无障碍功能可能失效),对此官方还没很完美的兼容方案(截止 2 月 9 日,Android 侧 Platform Views 相关的 [issue](https://github.com/flutter/flutter/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22a%3A%20platform-views%22%20label%3Aplatform-android) 还有 100 个是 open 状态)。 + +### 🐕 [深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比](https://mp.weixin.qq.com/s/756kaH11g0rM7dlklLSiuA) + +[@Crazy](https://github.com/jiyan135960):这是一篇针对 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](https://www.avanderlee.com/debugging/network-link-conditioner-utility/) + +[@阿权](https://github.com/bqlin):Network Link Conditioner 是苹果提供的慢网模拟工具,支持 macOS 和 iOS,其提供几套预设的网络环境供用户直接切换,常用于调试网络环境不佳下的网络请求或其他连接,优化用户体验,文章详细介绍了在该工具在各平台的使用方法。 + +比较有趣的是在模拟器上模拟慢网时还提到了另外一款工具 [RocketSim](https://www.rocketsim.app/?utm_source=swiftlee&utm_medium=article&utm_campaign=network_link_conditioner),该工具可以独立控制模拟器的慢网模拟,不影响 macOS 其他进程,另外该工具还支持网络抓包、UI 稿对比、网格像素对齐、标尺、程序状态切换、Deeplink 测试、推送测试、权限控制、定位模拟等功能,功能丰富强大,可惜只能作用在模拟器。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#323-2025.02.17.md b/Reports/2025/#323-2025.02.17.md new file mode 100644 index 000000000..2a68deb48 --- /dev/null +++ b/Reports/2025/#323-2025.02.17.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #323 | 2025-02-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/323.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Updating the Visual Studio Code extension for Swift](https://www.swift.org/blog/vscode-swift-2/) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展,旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织,确保更广泛的社区支持和持续更新。对于现有开发者,升级过程无缝衔接,旧版扩展会自动替换为新版,用户可以轻松过渡。如果你是 Swift 开发者,可以尽快更新以体验更多功能和改进。 + +## 文章 + +### 🐕 [Creating a reusable action menu component in SwiftUI](https://peterfriese.dev/blog/2025/swiftui-action-menu/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件: + +- 视图构建器与解耦:通过 `@ViewBuilder` 允许动态注入菜单内容,提升组件的通用性 +- SwiftUI 风格系统:利用 `LabelStyle` 和 `ButtonStyle` 统一管理样式,确保视觉一致性 +- 封装与复用:通过视图修饰符将复杂逻辑隐藏,调用时仅需链式语法(如 `.actionMenu {title: ..., isPresented: ...}`),类似 SwiftUI 原生 API 的体验 + +作者也提供了配套的 GitHub 库([ActionMenu](https://github.com/peterfriese/ActionMenu)),支持通过 Swift Package Manager 集成。 + +### 🐎 [Attaching debugger to system apps](https://supersonicbyte.com/blog/attaching-debugger-to-system-apps/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者分享了调试 iOS 模拟器中系统 App 的一些经验:在关闭 macOS SIP 后我们即可对任何进程进行调试,然后使用 `simctl` 命名启动对应系统 App 并获取 PID,最后在 Xcode 中对该 process 进行 debug 即可。 + +### 🐎 [Attending Apple Intelligence and App Intents workshop at Paris](https://blog.thomasdurand.fr/story/2025-01-17-attending-apple-workshop/) + +[@Smallfly](https://github.com/iostalks):这是一篇苹果在巴黎举办的技术研讨会议内容,主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能,提升系统集成能力。涵盖从代码实现到系统集成的关键步骤,并透露出苹果在智能化和本地化功能上的战略布局。 + +iOS App Intents 是苹果生态中实现「功能原子化」的核心工具,通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体,即可将应用融入 Siri、搜索、自动化等场景,为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合,其应用潜力将进一步释放,对于关注 AI 集成的开发者,有较高的参考价值。 + +### 🐢 [Flutter 3.29 发布,看起来会是一个“大坑”的版本](https://mp.weixin.qq.com/s/_uA5XYYqmzbtTVCtqRPI7w) + +[@david-clang](https://github.com/david-clang):本文结构和内容参考 Flutter 技术项目经理的 [What ’ s new in Flutter 3.29](https://medium.com/flutter/whats-new-in-flutter-3-29-f90c380c2317) ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如: + +1. Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。 +2. 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。 +3. 移除了 Flutter Gradle 插件,之前没迁移的需要手动迁移适配。 + +而且 Flutter 创始人 [Eric](https://github.com/eseidel) 也对“废弃 Dart 独立 UI 线程”发表了 [comment](https://github.com/flutter/flutter/issues/150525#issuecomment-2652547816),表怀疑态度,比如 Dart 和 Native 平台同一线程之后,那么「滚动 / 动画」是否会因此出现相互影响,特别是第三方插件处理不当的时候,反而可能更加卡顿。官方回复 Eric 这利大于弊,而 Eric 表示后面有空整理文档回复该讨论。 + +## 工具 + +### 🐢 [SweetPad: Develop Swift/iOS projects using VSCode](https://github.com/sweetpad-dev/sweetpad) + +[@阿权](https://github.com/bqlin):之前你可能听说过 VSCode 插件 [Swift Programming Language](https://marketplace.visualstudio.com/items?itemName=swiftlang.swift-vscode),官方大力宣传 Swift 可以跨平台开发了,但也就仅限于开发 Swift 了(语法高亮、代码补全、错误检查、Swift Package Only),还是不能取代 Xcode 进行 iOS 开发。 + +SweetPad 或许能做到这一点,其也是一款 VSCode 插件,旨在使用 VSCode 开发 Swift/iOS 项目,成为 Xcode 以外的替代 IDE 方案。SweetPad 通过集成各种开源工具(swift-format、swiftlint、xcodebuild、xcrun、xcode-build-server、sourcekit-lsp 等)直接在 Xcode 生成(当然也可以用 [XcodeGen](https://github.com/yonaskolb/XcodeGen) 或 [Tuist](https://tuist.io/) 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。 + +SweetPad 目前实现能力有: + +- Xcode 项目文件编辑:通过 Tuist 工具实现。 +- 自动补全(SourceKit-LSP)、单元测试:通过 [Swift](https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang) 插件 + [xcode-build-server](https://github.com/SolaWing/xcode-build-server) 工具实现。 +- 调试:通过 [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) 实现。 +- 运行到模拟器和真机:通过 `xcrun simctl` 和 `xcrun devicectl` 命令行实现。 +- 格式化:通过 [swift-format](https://github.com/apple/swift-format) 实现。 + +SweetPad 还没使用最近开源的 [swift-build](https://github.com/swiftlang/swift-build),还是使用 `xcodebuild` + `sourcekit-lsp` 的方案,所以还是得安装 Xcode 环境。另外,诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。 + +之前 [#224](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23244-2023.05.15.md) 周报有提到 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g) 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境,感兴趣的同学可以对比着阅读。 + +## Tips + +### [一个使用 Instrument 的小技巧](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4871) + +[@Barney](https://github.com/BarneyZhaoooo):Instrument 录制结束卡顿很久或者秒退时,可用的设置。只采集最后几秒的数据,对于一些需要前置操作一段时间才能复现的问题时,会有较大帮助。在处理大量长时间数据时,Instrument 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。 + +![Instrument](https://github.com/user-attachments/assets/42907aa6-5814-49c6-ac06-402502bfe4a6) + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#324-2025.02.24.md b/Reports/2025/#324-2025.02.24.md new file mode 100644 index 000000000..88e8c4ff8 --- /dev/null +++ b/Reports/2025/#324-2025.02.24.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #324 | 2025-02-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/324.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS & iPadOS 18.4 Beta 1: Here’s everything new](https://9to5mac.com/2025/02/21/ios-18-4-beta-1-heres-everything-new/) + +对于中国用户最期待的自然是中文版本的 Apple Intelligence 终于可以使用了,[Release Notes](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_4-release-notes#Apple-Intelligence) 有两条相关提醒: + +1. 对于中文(非英语),使用 Apple Intelligence 需要前置打开 Siri ,并允许通过任意方式唤醒 Siri 。 +2. 还原设备后,可能出现 Apple Intelligence 出现 "Downloading support …" 的报错,此时重启设备后问题可能可以解决(原文用词是 might resolve ,尚不清楚是否有 bad case)。 + +## 文章 + +### 🐎 [Understanding SwiftUI Preferences](https://peterfriese.dev/blog/2025/swiftui-preferences-swift6/#what-are-preferences-in-swiftui) + +[@JonyFang](https://github.com/JonyFang): 本篇主要介绍了 SwiftUI 中的 Preferences 机制,讲述了其在父子视图间传递数据的作用。 作者通过具体示例,展示了如何利用 Preferences 构建自定义视图,如表单验证功能。 此外,文章还讨论了 Swift 6 中与 Preferences 相关的问题,提供了对开发者有价值的见解。 总的来说,这篇文章为开发者深入理解和应用 SwiftUI 的 Preferences 提供了清晰的指导。 + +### 🐢 [The Synchronization Framework in Swift 6](https://blog.jacobstechtavern.com/p/the-synchronisation-framework) + +[@DylanYang](https://github.com/Dylan19Yang):作者为我们介绍了 Swift 6 和 iOS 18 下的新同步框架,其中主要包含了两个底层结构 Mutex 和 Atomics。作者在本文中对这两个新的能力做了较为详细的说明和性能比对。Mutex 能使得对被他包裹的数据的访问自动上锁,在性能上和手动通过代码上锁区别不大,但是相比使用 Actor 有不少提升。不过相比 Actor 的缺点自然是锁会阻塞当前线程。而 Atomic 则可以使被他包裹的操作都为原子操作不会被并发打断。从性能上看它和 Actor 比并没有较大优势,因此大多数情况下使用 Actor 已经足够。对同步框架感兴趣的读者可以花时间阅读下本文。 + +### 🐎 [The Framework Next Door](https://www.elkraneo.com/the-framework-next-door) + +[@BluesJiang](https://github.com/BluesJiang): 这篇文章分享了他们在制作密室逃脱场景下,使用 TabletopKit 来开发一个 VisionOS 的应用。这个主要是针对桌面游戏的需求来设计的框架,支持多人互动,桌面的 Persona 布局,还有丰富的交互能力。有兴趣给 Vision Pro 开发桌面游戏的可以调研一下这个框架。 + +### 🐎 [解决 Xcode 16 "Waiting to reconnect to ..." 问题](https://stackoverflow.com/questions/79016653/after-upgrading-to-xcode-16-i-am-stuck-at-waiting-to-reconnect-to-when-tryi) +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要解决了在升级到 Xcode 16 后,无法在 Apple TV(tvOS 17.7)上构建应用的问题。错误提示显示 DDI(Developer Disk Image)内容过时,导致设备无法连接。最终,运行 `xcrun devicectl manage ddis update` 命令更新 DDI 后,问题得以解决。这个方法不仅适用于 tvOS,也可以解决 iOS 开发中的类似问题,帮助开发者应对 Xcode 16 引入的新 DDI 管理方式。 + +### 🐢 [asm lessons](https://github.com/FFmpeg/asm-lessons) +[@老驴](https://weibo.com/u/6090610445):很多人敲碗等待的 FFmpeg 汇编课终于来了。FFmpeg 现在基本是业界最重要的开源视频编解码库了。这种对于性能极度敏感的库,自然会有一些特殊手段来进一步优化性能。FFmpeg 团队就在库里使用了大量的汇编,按照他们的说法,可以大幅提升性能。但是现在会手写汇编语言的人也越来越少,所以很多人就敲碗让团队出一个汇编课程。这就是这个课程的来历。略微可惜的是,这个课程目前是基于 x86 的汇编,不过团队也说之后会添加 ARM 的汇编内容。鉴于 FFmpeg 在业界的地位,值得大家花一点时间来学习一下。 + +## 工具 + +### 🐎 [你的 iPhone 也可以离线运行 DeepSeek「含原理介绍」](https://mp.weixin.qq.com/s/oXfrBKwZzXIzg-k_KRQEbQ) + +[@EyreFree](https://github.com/EyreFree):本文为大家介绍了一款能在 iPhone 上运行 LLM 的应用 fullmoon,它的下载链接为 [https://apps.apple.com/app/id6727014156](https://apps.apple.com/app/id6727014156),能直接运行 mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-4bit 模型,还给出了配置步骤,其原理基于苹果的 MLX Swift 实现,iOS 开发者可通过修改 LLMEval 例子来运行 DeepSeek。作者自测 iPhone 16 Pro 能运行 1.5B 和 7B 模型,感兴趣的朋友可以下载体验。 + +## Tips + +### 🐎 [DispatchConcurrentQueue 可用性提示](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4870) + +[@Damien](https://github.com/ZengyiMa):DispatchConcurrentQueue 实际要在 iOS 17 才开始能够使用,但是 Xcode 15 标注错误并且可以通过编译检查,但是在 Runtime 期间会引发 Crash。有使用到的同学请特别注意。 + +Xcode 15 +![image](https://github.com/user-attachments/assets/81dfa441-424a-4706-a5d2-0bda334ecc95) + +Xcode 16 +![image](https://github.com/user-attachments/assets/4ca77442-dd15-4131-b3db-8b564921dac7) + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#325-2025.03.03.md b/Reports/2025/#325-2025.03.03.md new file mode 100644 index 000000000..fa898a988 --- /dev/null +++ b/Reports/2025/#325-2025.03.03.md @@ -0,0 +1,66 @@ +# 老司机 iOS 周报 #325 | 2025-03-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/325.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Presenting and Managing Expandable Sections in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/presenting-and-managing-expandable-sections-in-swiftui/) + +[@DylanYang](https://github.com/Dylan19Yang):作者为我们介绍了如何在 SwiftUI 中实现一个可通过交互来展开和收起的 Section。在 Section 的 header 上实现一个自定义 view,并在点击时反转 Section 的 isExpanded 属性来达成目标。文章内容非常简单基础,并且有丰富的代码演示,适合刚接触 SwiftUI 的同学学习。 + +### 🐕 [First analysis of Apple's USB Restricted Mode bypass (CVE-2025-24200)](https://blog.quarkslab.com/first-analysis-of-apples-usb-restricted-mode-bypass-cve-2025-24200.html) + +[@david-clang](https://github.com/david-clang):本文分析了 iOS 中 [CVE-2025-24200](https://support.apple.com/en-ca/122174) 漏洞的技术细节,该漏洞利用 Accessibility 框架中状态管理不严密的问题,使得攻击者能够在设备锁定时绕过 [USB Restricted Mode](https://support.apple.com/en-us/111806),从而实现未授权的 USB 数据连接。文章中的分析思路和手段很值得学习。 + +作者通过对比补丁前后的固件,详细说明了漏洞修复涉及的关键代码改动,例如在 AXSpringBoardServerInstance 和 profiled 守护进程中新增的状态检查逻辑。接着展示了利用辅助功能(如 Assistive Touch 或 Switch Control )触发漏洞的可能攻击路径,即在设备锁定且辅助功能激活时,通过触发警告弹窗诱导用户点击“ OK ”,进而调用 `_setUSBRMPreferenceDisabled` 函数禁用 USB Restricted Mode,使攻击者有机会绕过物理安全防护措施。 + +### 🐎 [How Swift's server support powers Things Cloud](https://www.swift.org/blog/how-swifts-server-support-powers-things-cloud/) + +[@阿权](https://github.com/bqlin):文章分享了 Things App 如何将自身的后端服务使用 Swift 重写的经验。 + +Things Cloud(Things App 后端服务),原本是使用 Python 2 和 Google App Engine 构建的,虽然稳定,但面临内存占用高、响应速度慢、后端语言缺乏类型静态安全检查导致上线错误不可预知的问题。在探索了多种后端语言后,因为 Things App 开发已经深度使用 Swift,熟悉其优势(可能是客户端人力充足🐶),最终选择使用 Swift 重写后端。使用 Vapor + SwiftNIO 编写主要的后端业务,通过 RediStack 调用 Rdis、MySQLKit 调用 Aurora、Soto 调用 S3、APNSwift 调用 APNs。最终通过 Linux 编译产物,构建到 Docker 中以便部署到集群中。最终算力节省 3 倍多,响应时间缩短 4 倍多。 + +在降本增效的大流中,或许用 Swift 也能闯出一番天地。 + +### 🐕 [What ’ s new in Swift 6.1?](https://www.donnywals.com/whats-new-in-swift-6-1/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 的最新特性和改进。Swift 6.1 是一个较小的版本,主要包含错误修复和用户体验提升。其中主要讨论了两个特性: +1. **Task Groups 的变化**:Swift 6.1 对 TaskGroup 进行了改进,开发者不再需要显式定义子任务的返回类型。编译器可以根据第一个添加的任务自动推断类型,这样可以简化代码。 +2. **导入成员可见性的新模式**:Swift 6.1 引入了一种新的成员可见性模式,允许开发者在导入特定模块时,仅使用该模块中的扩展。这解决了当多个模块中有相同函数名时,编译器可能产生混淆的问题。通过这种方式,开发者可以更明确地控制代码中使用的扩展,避免意外调用错误版本的函数。 + +总体而言,这些改进增强了 Swift 的易用性,提升了开发体验。 + +## 工具 + +### 🐎 [Interactive & Beautiful CLI Tools with Noora](https://swifttoolkit.dev/posts/noora-package) + +[@Smallfly](https://github.com/iostalks):Noora 是一款创新性的 Swift 命令行工具包,致力于将枯燥的黑白终端转化为专业、交互式的开发者体验。它提供了丰富的组件——从醒目的成功 / 错误提示、智能的 Yes/No 选择框,到动态进度指示器,再到灵活的主题定制功能——让 CLI 工具瞬间焕发活力。如果你的应用需要进行命令行交互,值得一试。 + +### 🐎 [基于 WWDC 内容的 AI 问答平台 Ask WWDC](https://askwwdc.com) + +[@xiaofei86](https://github.com/xiaofei86):Ask WWDC 以 WWDC 内容对 LLM 进行检索增强。基于 LangChain 和 GPT-4o,目前免费使用,响应速度尚可。作者同时开放了其基于 Next.js、Upstash 和 ModalLabs 的服务,用户也可以构建自己的 Ask Site。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#326-2025.03.10.md b/Reports/2025/#326-2025.03.10.md new file mode 100644 index 000000000..938acef2b --- /dev/null +++ b/Reports/2025/#326-2025.03.10.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #326 | 2025-03-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/326.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [David](https://github.com/david-clang) 加入老司机技术!David 有多年大厂的工作经验,目前在日本从事 iOS Infra 相关工作,对 Flutter 动态化框架也有涉猎。 + +**希望 David 的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [Lynx: 迈向原生体验](https://mp.weixin.qq.com/s/Wmapq8NMfoXejIcxX-2K-Q) + +[Lynx](https://github.com/lynx-family/lynx):跨平台 UI 方案始终在**性能、灵活性和工程复杂度**之间寻找平衡。Lynx 采用**声明式 DSL 直出原生 UI**,减少 JS 端计算和通信开销,同时优化 UI Diff 机制,使更新更加高效。 + +它并非简单的 React Native 或 Flutter 替代,而是对跨端渲染的一次新尝试,在实际业务场景中提供了不同的取舍和可能性。 + +不论是国内还是国外,都已有一段时间没有推出类似的新框架了,此次开源还是有较大的借鉴意义,希望 Lynx 团队后续能有更多原理的解析释出。 + +## 新手推荐 + +### 🐎 [Simple Modularization setup for a New App](https://www.manu.show/2025-02-27-simple-modularization-setup/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何使用 Swift Package Manager 的本地包实现 iOS 应用的模块化。作者强调了模块化在改善构建时间、分离关注点、增强测试能力和促进团队协作方面的优势。文章提供了清晰的依赖关系图,解释了核心层(CoreLayer)、领域层(Domain Layer)和表现层(Presentation Layer)的设计,并分享了通过 Fastlane 集成来运行测试的实用技巧。对于寻求优化开发流程和提高代码质量的 iOS 开发新手来说,这篇文章提供了宝贵的指导和实际案例,是不错的学习资源。 + +## 文章 + +### 🐕 [Ollama](https://nshipster.com/ollama/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Ollama,一个简化在 macOS 上运行大语言模型(LLMs)的工具。Ollama 基于 llama.cpp,提供友好的接口,使模型管理和推理变得简单。文章强调了在本地运行模型的优势,特别是当计算几乎变得免费时,AI 的可用性和应用方式也随之改变。虽然像 GPT-4 和 Claude 这样的前沿模型无疑令人印象深刻,但本地运行开放模型同样值得关注,因为它提供了隐私保护、成本效益、低延迟、用户控制和可靠性等多种优势。 +值得注意的是,Ollama 不仅限于 macOS 应用,因其提供的 HTTP API 可以与任何支持 HTTP 请求的编程语言和工具集成,因此可以在其他操作系统上使用。 + +### 🐎 [不要升级,Flutter Debug 模式在 iOS 18.4 beta 无法运行,提示 Permission denied](https://mp.weixin.qq.com/s/shfvj95_CjwO-33s_7LIWQ) + +[@david-clang](https://github.com/david-clang):本文介绍了为什么 Flutter Debug 模式无法在 iOS 18.4 beta 1 的真机上运行([issues](https://github.com/flutter/flutter/issues/163984)),是因为该版本修复了通过 get-task-allow 授权即可获取 JIT 的内存访问权限([iOS 18.4 beta 1 JIT patch analysis](https://gist.github.com/osy/8940e5ae5f24646b808f58d197883ca5))。好消息是 iOS 18.4 beta 2 撤销了对应更改,所以升级系统版本将不会影响 Flutter Debug 模式的真机调试。 + +但 Flutter 团队还是想避免利用 get-task-allow 授权获取 JIT 的内存访问权限,并在该 [issues](https://github.com/dart-lang/sdk/issues/60202) 讨论了些解决方案。其中有个[思路](https://github.com/dart-lang/sdk/issues/60202#issuecomment-2695705498)很值得大家学习,利用 lldb debugserver 将数据写入到"只读和可执行(RX)"的内存映射区域后,即可直接调用 mprotect 让内存权限在"只读和可执行(RX)"和"可读可写(RW)"之间切换,从而稳定地实现 JIT。虽然该事在 Flutter 官方的优先级只是 P2,也让我们期待下最终的解决方案吧! + + +### 🐕 [Designing a custom lazy list in SwiftUI with better performance](https://nilcoalescing.com/blog/CustomLazyListInSwiftUI/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了如何在 SwiftUI 中创建一个自定义的惰性列表(Lazy List)。作者首先讲解了惰性列表的概念,然后展示了如何通过使用 `LazyVStack` 和 `ForEach` 实现具有动态加载功能的列表并提供了示例代码和优化性能的建议。 + + +### 🐎 [关于推理模型的一些误解和盲区](https://onevcat.com/2025/02/reasoning-model/) + +[@JonyFang](https://github.com/jonyfang): 文中介绍了推理模型与通用大模型的性能差异及适用场景,指出推理模型在逻辑领域优势显著却受制于响应速度与创作力,揭示了温度参数对生成内容的影响规律,并探讨了混合架构趋势与开源蒸馏模型推动 AI 普惠的技术路径。 + +## 工具 + +### [XCFolder: 一个将 Xcode 项目 Group 转为 Folder 的工具](https://github.com/ZhgChgLi/XCFolder) + +iOS 开发者都知道团队协作时 .xcodeproj 文件会经常冲突,这是因为 Xcode 项目会为每个文件和文件夹都生成 UUID 引用,多人同时修改项目结构时几乎必然会发生合并冲突。 + +好消息是,Xcode 16 带来了一个新功能 —— 将虚拟的 Group 转换为 Folder!基于 Folder 的项目不再为每个文件声明对应的 object,大幅减少了合并冲突的可能性。 + +但对于现有项目,手动迁移工作量巨大。这时 XCFolder 就可以派上用场了,这款由 ZhgChgLi 开发的工具能自动完成这一项工作,并且保持项目引用完整性,操作简单高效。 + +如果你厌倦了处理 Xcode 项目合并冲突,这个工具绝对值得一试。它不仅能帮助团队顺利过渡到 Xcode 16 的新项目结构,还能大幅提升团队协作效率。 + +## 音视频 + +### 🌟 🐢 [Deep Dive into LLMs like ChatGPT](https://www.youtube.com/watch?v=7xTGNNLPyMI&list=PPSV) + +[@Damien](https://github.com/ZengyiMa):LLM 时代已经到来,作为开发人员,我们也需要了解一些必备的 LLM 相关的知识,本视频为 AI 大神 Karpathy 出品的 LLM 视频,本视频深入浅出,适合零基础想要了解 LLM 的同学。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京/上海] 美团 - 短视频 - iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#327-2025.03.17.md b/Reports/2025/#327-2025.03.17.md new file mode 100644 index 000000000..d1898834b --- /dev/null +++ b/Reports/2025/#327-2025.03.17.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #327 | 2025-03-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/327.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS Versions Market Share in 2025](https://telemetrydeck.com/survey/apple/iOS/majorSystemVersions/) + +网页展示了使用 iOS 系统(包括 iPadOS)的用户的分布变化,其中有两条结论: + +1. 自 2024 年 9 月推出以来,iOS 18 已成为迄今为止份额最高的版本。截至 2025 年 2 月底,该比例为 79.54%。 +2. 截至 2024 年 8 月底,iOS 17 是占主导地位的版本,占 87.70% 的份额。截至 2025 年 2 月底,它已降至 13.68%。 + +## 新手推荐 + +### 🐎 [通过覆写方法看 Swift 方法派发](https://blog.rakuyoo.top/swift-method-dispatch-via-overriding/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一个子类覆写方法的 Demo 向我们解释了 Swift 内静态派发和动态派发两种机制,并介绍了 @objc 和 dynamic 关键字的含义,讲述了如何在 extension 中正确的覆写父类方法。看完以后感兴趣的同学也可以尝试再研究下 Protocol 方法的派发机制。 + +## 文章 + +### 🐢 [A Journey to understand LLVM-IR](https://un-devs.github.io/low-level-exploration/journey-to-understanding-llvm-ir/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):对于 iOS 开发来说,接触 LLVM-IR 的机会不多,一般逆向研究系统库时会直接反汇编,研究 Swift 时大部分情况阅读 sil(Swift Intermediate Language) 即可解决大部分问题。但也有极端情况下,需要研究 IR 优化时,就需要这块知识了。作者虽然是以 C/Rust 语言的视角进行讲解,但是对于 OC/Swift 是一样的。文章内容大致包含下面几块: + +1. IR 的 静态单一分配 (static single assigment representation) +2. 开启 mem2reg 讲解生成的 IR 代码 +3. 再对比 x86 汇编与 IR 代码的对应 + +### 🐕 [op run](https://nshipster.com/1password-cli/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章探讨了传统 .env 文件在开发中的痛点(配置同步难、多环境管理复杂、变更追踪缺失),并介绍了 1Password CLI(op)的解决方案。通过 op run 命令动态注入环境变量,开发者可用 op://URL 引用密钥库中的敏感数据,实现配置与代码分离。步骤包括安装 CLI、创建共享保险库、迁移密钥、更新.env 文件为引用格式,并调整启动命令。 + +### 🐕 [What drives your users to pay? Jobs to Be Done has the answers](https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文探讨了 Jobs to Be Done (JTBD) 理论如何帮助企业理解用户真正的需求,并通过精准定位驱动更强的产品变现能力。主要内容如下: + +1. 了解用户购买动机:痛点驱动 vs. 需求驱动 +2. 如何进行 Jobs to Be Done 访谈,发现变现关键点 +3. 三种核心驱动力:功能、情感和社交 +4. 如何优化定价、转化和留存 +5. 利用 JTBD 扩展高价值用户群 + +### 🐢 [当 Swift 编译器删除了标准库中的代码 - 记修复 Swift 6 中的冗余 Load 指令消除优化器](https://mp.weixin.qq.com/s/MLYm8S8vMeI9y06SgAGfFw) + +[@david-clang](https://github.com/david-clang):本文首先通过最小复现代码,展示了在 `-Osize` 优化级别下使用 `AutoreleasingUnsafeMutablePointer` 导致的 use-after-free(UAF)崩溃问题。 + +通过反汇编和 SIL 分析,发现 Swift 编译器在冗余 Load 消除优化(RLE)过程中,因误判 `_reserveCapacityAssumingUniqueBuffer` 函数的副作用,错误删除了数组扩容后必须重新加载缓冲区地址的 `load` 指令,致使后续代码访问已释放内存。 + +作者还给出了修复方案,通过调整逃逸分析对 `unchecked_ref_cast` 指令中 Optional 转换的路径追踪逻辑,确保编译器正确识别副作用,从而避免冗余 `load` 指令消除,修复 UAF 崩溃问题。 + +文章结尾还分享了调试 Swift 编译器的技巧,全文为深入理解 Swift 编译优化机制提供了宝贵参考。 + +## 代码 + +### [RealityShaderExtension](https://github.com/XanderXu/RealityShaderExtension) + +[@BluesJiang](https://github.com/BluesJiang): visionOS 开发官方有两套可选的开发方式,一种是使用 RealityKit,另一种是使用基于 Metal 的自制引擎来自己绘制。苹果推荐使用的 Unity 的 PolySpatial,一种将 Unity 的内容直接导出到 visionOS 上的方式,也是通过第二种模式运行的。 +但是第二种模式会存在许多限制,比如没有眼动追踪等。所以有时候还是需要使用原生的开发方式。但是为了保证渲染效果的一致性,作者经常需要将在 Unity 中实现的 Shader 再在 ShaderGraph 中实现一遍。而二者默认提供的 Shader 节点并不一致。 +所以作者将 Unity 中有而 RealityKit 中没有的 Shader 效果实现了一遍,并且开源。visionOS 的原生开发玩家可以关注一下。 + +## 音视频 + +### [How to Do Apple Search Ads (ASA) Right and Grow Your Downloads](https://www.youtube.com/watch?v=W6_bN3AZo_s) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 如何使用 Apple Search Ads 提升你的下载。作者分享了配置使用 ASA 完整流程和一些实用技巧,有自己的独立 App 需要推广的可以学习下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] TikTok - iOS 高级开发工程师(跨端方向)& 实习生(跨端方向) + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#328-2025.03.24.md b/Reports/2025/#328-2025.03.24.md new file mode 100644 index 000000000..8786e43a4 --- /dev/null +++ b/Reports/2025/#328-2025.03.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #328 | 2025-03-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/328.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [Understanding SwiftUI's Namespace](https://kyleye.top/posts/swiftui-namespace/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 SwiftUI `Namespace` 的工作原理,从底层实现到实际应用,再到高级用法,内容详实且易于理解。作者不仅解释了 `Namespace` 如何生成唯一标识符,还通过实际代码示例展示了如何利用它实现平滑的几何动画。相信无论是初学者还是有一定经验的开发者,都能从中获得一些启发。 + +### 🐕 [Designing a custom lazy list in SwiftUI with better performance](https://www.swiftwithvincent.com/blog/animation-vs-withanimation-whats-the-difference) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章探讨了 SwiftUI 中 `animation` 与 `withAnimation` 的区别。`animation` 是一个修饰符,直接在视图上应用动画,而 `withAnimation` 则是一个函数,用于在特定的状态变化中包裹代码,使其能够动画化。作者通过示例展示了两者的用法和适用场景,强调了使用 `withAnimation` 时可以更灵活地控制动画效果。 + +### 🐎 [Identifying individual sounds in an audio file](https://www.createwithswift.com/identifying-individual-sounds-in-an-audio-file/) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了如何实现声音识别功能,使用 Apple 的 Sound Analysis 框架来识别音频文件中的特定声音。通过这个文章教程,读者可以构建一个应用,能够分析音频文件、分类声音的 App。文章还提到,这种声音识别功能适用于预录制音频文件的分析,可以用于批量处理、高质量录音的编辑以及离线分析等场景,为音频分析任务提供了更广泛的应用可能性。 + +### 🐕 [Swift + Zed = ❤️ ](https://tgomareli.medium.com/swift-zed-%EF%B8%8F-6b08de865425) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了作者如何在 Zed 编辑器中优化 Swift 编程体验。作为一位文本编辑器爱好者,作者分享了他从 Neovim 转向 Zed 的过程,探讨了安装 Swift 扩展、解决 Xcode 项目中的代码补全问题,以及创建自定义任务和快捷键的具体步骤。通过这些配置,作者成功提升了开发效率,使得构建、测试和运行 Swift 包变得更加流畅和自然。如果你正在寻找高效的编程工具,这篇文章值得一读。 + +### 🐎 [Synchronous Work](https://www.massicotte.org/synchronous-work) + +[@DylanYang](https://github.com/Dylan19Yang):作者分别通过 DispatchQueue、Task.detached、nonisolated func 等方式为我们介绍了如何去异步执行一段耗时逻辑。最终作者更推荐 async let 的方式,因为它更加简洁,但也要注意它并不是时刻生效的,我们需要关注方法的 isolated 的状态。同时作者也提到同步方法本身会更加灵活,因为它可以按需转为异步调用,给了调用方更多选择。 + +## 工具 + +### 🐎 [Framous: Screenshot Frames](https://apps.apple.com/us/app/framous-screenshot-frames/id6636520519?mt=12) + +[@阿权](https://github.com/bqlin):[Framous](https://apps.apple.com/us/app/framous-screenshot-frames/id6636520519?mt=12) 是一款快捷生成 Apple 设备带壳截图的 Mac App,支持生成常见的 iPhone、iPad、Apple Watch、Mac、Apple TV 设备的带壳截图。对于独立开发者上架或者介绍某款 App 时是款很实用的工具。App 支持功能: + +- 可以通过拖放、复制粘贴、捷径等方式将图片生成带壳截图。 +- 自动识别截图来源设备(大概是根据分辨率),自动匹配设备。 +- 支持多个设备合成一张图或批量导出多张图。 +- 丰富的自定义选项,支持切换设备、修改设备颜色、圆角、设备按钮位置、屏幕挖孔样式等。 + +App 在 Mac App Store 免费下载,但生成支持的设备截图仍需内购。 + +## 代码 + +### [GlyphixTextFx](https://github.com/ktiays/GlyphixTextFx) + +[@AidenRao](https://weibo.com/AidenRao):**GlyphixTextFx** 主要实现了类似 SwiftUI 中 `numericText` 的数字变化过渡动画效果。以下是核心内容: + +- **字符级动画**:当文本内容变化时,每个字符会以平滑的动画过渡(如数字增减时的滚动效果)。 +- **灵活定制**:支持自定义过渡方向(向上 / 向下)、文本对齐方式(左 / 中 / 右)以及多行文本显示。 +- **视觉效果优化**:提供模糊效果选项增强过渡美感。 +- **跨框架兼容**:适用于 UIKit、AppKit 和 SwiftUI,支持 iOS 13+ 和 macOS 11.0+ + +## 音视频 + +### [Swift DevRoom at FOSDEM 2025](https://swiftlang.github.io/event-fosdem/) + +[@zhangferry](zhangferry.com): FOSDEM 是一个专门为自由软件及开源软件开发者而设的周年会议,由比利时的布鲁塞尔自由大学及一些志愿者共同筹办,被视为全欧洲、乃至全球最优秀的自由软件及开源软件活动。Swift 作为开源语言,曾在 2023 年[申请 FOSDEM](https://forums.swift.org/t/swift-fosdem/67752),但被官方拒绝,2024 年再次申请,终于通过,正式会议于 2025 年 2 月召开,已经结束。 + +作为向开源社区展示 Swift 的一次重要机会,演讲主题也跟开源相关,涵盖:服务端、嵌入式、跨语言交互等内容,总计 15 场,每个在 20min 左右,所有视频内容都可以到 FOSDEM 查看。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海/北京/深圳/杭州] 抖音 - 基础技术 - iOS/Android + +[上海] BiliBili - 移动端开发实习生(社区生态)- iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#329-2025.03.31.md b/Reports/2025/#329-2025.03.31.md new file mode 100644 index 000000000..b3c62f3b7 --- /dev/null +++ b/Reports/2025/#329-2025.03.31.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #329 | 2025-03-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/329.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Understanding structural identity in SwiftUI](https://tanaschita.com/swiftui-structural-identity/) + +[@阿权](https://github.com/bqlin):SwiftUI 使用结构体描述视图,由 SwiftUI 内部完成视图的绘制与更新。而结构体标识则是视图层级中的唯一 id,用于识别状态变化前后的视图结构体是否是同一视图,进而进行更新和重绘。 + +文章介绍了 SwiftUI 结构体标识的基本原理和应用、SwiftUI 重绘机制以及 SwiftUI 结构体标识的具体实践。 + +## 文章 + +### 🐢 [Profiling apps using Instruments](https://developer.apple.com/tutorials/instruments) + +[@Smallfly](https://github.com/iostalks):这是苹果官方出品的 Instruments 教程。Instruments 主要用来分析应用程序的性能、资源使用和行为,了解如何提高响应性,减少内存使用,以及运行时的复杂的行为。该教程包含对卡顿的基础知识介绍,卡顿的分析和检测,并提供了卡顿的优化建议。 + +### 🐢 [充分理解 C/C++ 重要概念:运行时库](https://mp.weixin.qq.com/s/Fed-0uVaOGDUiftH43vnGA) + +[@极速男孩](https://github.com/ztlyyznf001):本文系统解析了 C/C++ 运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统 API(如内存管理 malloc/ 文件操作 fopen)、提供标准库函数(字符串 / 数学运算),并管理程序生命周期(全局变量初始化 / 资源清理)。跨平台差异显著:Linux 依赖 glibc/libstdc++,Windows 通过 MSVC 运行时库实现,Android/iOS 则采用轻量化 Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI 不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递 C++ 对象)及固化工具链版本。 + +### 🐕 [Detecting body poses in a live video feed](https://www.createwithswift.com/detecting-body-poses-in-a-live-video-feed/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何利用苹果的 Vision 框架在 SwiftUI 应用中实时检测视频流中的人体姿态。主要步骤包括: + +1. 通过 `AVCaptureSession` 管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示 +2. 使用 `UIViewRepresentable` 协议将 `AVCaptureVideoPreviewLayer` 集成到 SwiftUI 视图中,实现实时画面展示 +3. 创建 `PoseEstimationViewModel` 类处理视频帧,利用 Vision 的 `VNHumanBodyPoseRequest` 检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 +4. 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果 + +文章提供了完整的代码实现思路,适用于健身追踪、AR 等场景开发。 + +### 🐎 [Why I Avoid Group](https://chris.eidhof.nl/post/why-i-avoid-group/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一系列的 Demo 向我们展示了 Group 目前存在的一些问题。官方文档上写着作用于 Group 的 modifier 会作用在 Group 内的每一个元素上,但实际在模拟器上的表现并非如此。作者猜测可能和渲染 SwiftUI 的根结点实质是一个 UIKit 的 view 有关。如果使用一个 VStack 包裹 Group,则它的表现又符合预期了。 + +### 🐎 [这篇 GPU 学习笔记,详细整理了其工作原理、编程模型和架构设计](https://mp.weixin.qq.com/s/IzsI_dzX6AxFnJGg8zewEw) + +[@老驴](https://weibo.com/u/6090610445):最近 AI 大火也让 nvidia 再次在风口浪尖烧,你有没有想过 GPU 到底是怎么工作的?它为什么在特定应用下这么快?和我们日常写的代码、性能优化有什么关系? + +这篇文章用清晰的逻辑和大量实例,从 GPU 架构原理、并行执行模型到实际的 CUDA 编程,带你系统了解 GPU 背后的技术基础。即使你平时不写 CUDA,这些知识也能帮你更好地理解 Metal、CoreML 这些 Apple 平台下的 GPU 特性。 + +如果你是一名希望拓展技术广度的开发者,值得一读。 + +## 代码 + +### [FlowNavigation](https://github.com/magnuskahr/swiftui-flow-navigation) + +[Announcing FlowNavigation](https://www.magnuskahr.dk/posts/2025/03/announcing-FlowNavigation/) 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理 , 如注册流程。作者提供了一个示例代码 , 展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] Soul App - 终端技术团队 - iOS 架构/跨端容器专家 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#330-2025.04.07.md b/Reports/2025/#330-2025.04.07.md new file mode 100644 index 000000000..ab9fa4a23 --- /dev/null +++ b/Reports/2025/#330-2025.04.07.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #330 | 2025-04-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/330.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [Swift 6.1 Released](https://www.swift.org/blog/swift-6.1-released/) + +[@AidenRao](https://weibo.com/AidenRao):Swift 6.1 正式推出,核心更新: + +1. **并发优化**: `nonisolated` 支持类型和扩展,任务组子任务结果类型自动推断; +2. **OC 迁移:** 新增 `@implementation` 支持,允许在 Swift 中实现 Objective-C 类型,便于逐步迁移; +3. **开发体验**:尾随逗号支持扩展至参数列表、元组等场景; +4. **包管理**:新增 `package traits` 机制,适配跨平台条件编译; +5. **测试增强**:支持自定义测试前后逻辑,异常处理更便捷; +6. **文档工具**:Swift-DocC 优化符号链接可读性。 + +推荐通过 Xcode 16.3 或 `swiftly` 工具链安装体验。 + +## 新手推荐 + +### 🐕 [Modern URL construction in Swift](https://www.swiftbysundell.com/articles/modern-url-construction-in-swift/) + +[@阿权](https://github.com/bqlin):本文介绍了 Swift 在 URL 构建方面的现代解决方案,通过类型扩展、宏和新 API 的结合,实现了更安全、简洁的 URL 处理方式。开发者可根据项目需求选择合适方案,提升代码质量。具体内容为: + +1. 静态字符串构建 URL 使用 Optional 方式显得冗余,应直接强制解包。 + 1. 解法 1:添加 URL 扩展直接创建 URL 实例,内部解包为空时 fatallError,输出信息。 + 2. 解法 2:通过自定义宏创建 URL 实例,实现解包并抛出错误的逻辑。 +2. 对于动态构建的 URL,应使用更结构的 URL、URLComponents 拼接、构建方法,甚至能够直接获取本地常见目录的 URL。 + +## 文章 + +### 🐕 [Deploying a Swift Server App to Fly.io and Railway](https://swifttoolkit.dev/posts/deploy-fly-railway) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了如何使用 Vapor 框架部署 Swift 服务端应用程序到 Fly.io 和 Railway 平台。文章涵盖了初始化 Vapor 项目、编写 Dockerfile、以及在两个平台上部署应用的具体步骤。此外 , 还提到了一些进阶主题 , 如自定义域名和添加数据库服务等。 + +### 🐢 AI 产品经理进阶:万字深析大模型的 MCP([上](https://www.woshipm.com/ai/6190336.html) & [下](https://www.woshipm.com/ai/6190355.html)) + +[@EyreFree](https://github.com/EyreFree):这篇文章深度剖析了大模型的 MCP 技术。MCP 是 Anthropic 于 2024 年底开源的开放标准协议,旨在统一 AI 与外部数据源和工具的连接方式,降低集成成本。它采用客户端 - 服务器架构,基于 JSON-RPC 2.0 通信,定义多种原语规范交互。该技术已在智能问答、编程辅助、办公自动化等场景崭露头角。文章还全面分析了 MCP 的优势与局限,如标准统一、开源灵活,但也存在生态不完善、远程支持不足等问题。此外,还展望了其未来在完善远程云支持、构建 “应用商店” 式分发机制、拓展多模态应用等方面的演进方向,为 AI 从业者或对之感兴趣的同学提供了极具价值的参考。 + +### 🐕 [Fast & Fluid: Integrating Rust egui into SwiftUI](https://medium.com/@djalex566/fast-fluid-integrating-rust-egui-into-swiftui-30a218c502c1) + +[@david-clang](https://github.com/david-clang):作者在开发实时预览 SwiftData 和 CoreData 数据库的 Mac App [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,发现 SwiftUI 的 `Table` 性能相当差,尝试用 AppKit 的 `NSTableView` 也无法满足需求,最后用 Rust 的 UI 框架 `egui` 去优化性能。作者把 SwiftUI 中嵌入 `egui` 渲染视图的 Demo 整理成文章,还用代码示例展示如何在 SwiftUI 的 `NavigationSplitView` 中嵌入 `egui` 渲染的视图。以下是 `egui` 和传统 UI 框架的对比: + +- 传统 UI 框架(如 SwiftUI、UIKit)多采用**保留模式(Retained Mode)**,需显式管理 UI 组件状态(例如按钮状态、列表数据等),框架内部通过对比新旧状态差异来局部更新界面。 +- `egui` 的**即时模式(Immediate Mode)** 则相反:**每帧完全丢弃旧 UI 状态**,根据当前数据重新生成整个界面,通过高频重建实现“无状态化”。 + +虽然 Demo 中使用 `egui_wgpu_backend` 作为渲染后端,但它在 Metal 上渲染单帧需要 10 毫秒,作者在开发 [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,通过自定义渲染后端,把帧渲染时间缩短到仅 1-2 毫秒,最终才实现高性能需求,可见把 “ SwiftUI 中嵌入 `egui` 渲染视图” 封装成成熟框架会比较难,但本文优化 SwiftUI 性能的思路值得我们学习。 + +### 🐎 [得物 iOS 启动优化之 Building Closure](https://mp.weixin.qq.com/s/xr43Xx-A3NT8lPGIii8pPA) + +[@Smallfly](https://github.com/iostalks):本文深入解析了 iOS 应用启动优化中常被忽视的 **Building Closure** 阶段(由 dyld 动态链接器负责),聚焦其耗时问题与优化实践。文章通过真实案例,揭示了某版本因 Building Closure 阶段耗时暴增 200ms 的根因定位过程,并最终通过 解决**Perfect Hash 算法**的哈希冲突,将关键函数耗时从 1200ms 降至 110ms。 + +文中详细剖析了 Building Closure 的工作原理(如首次启动生成缓存、Swift/ObjC 协议一致性处理),并提供了 **文件结构解析、耗时定位方法(Instrument 工具)及优化方案**,适合以下读者参考: +1. **iOS 开发工程师**:需优化应用启动速度,尤其是冷启动场景; +2. **性能调优团队**:关注底层 dyld 机制,探索启动耗时优化新方向; +3. **技术管理者**:了解复杂问题排查流程与跨团队协作经验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#331-2025.04.14.md b/Reports/2025/#331-2025.04.14.md new file mode 100644 index 000000000..6204de8d4 --- /dev/null +++ b/Reports/2025/#331-2025.04.14.md @@ -0,0 +1,80 @@ +# 老司机 iOS 周报 #331 | 2025-04-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/331.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Building a dependency injection framework](https://tanaschita.com/dependency-injection-building-lightweight-container/) + +[@阿权](https://github.com/bqlin):文章介绍了在 Swift 中如何从零到一搭建轻量级级依赖注入(DI)容器,内容包括: + +1. DI 容器设计:实现注册(`register`)和解析(`resolve`)依赖的基本功能,通过字典存储类型与工厂函数的映射。 +2. 生命周期管理:使用枚举 `DependencyLifetime` 区分瞬态(每次解析创建新实例)和单例(首次解析创建并缓存),通过单独的字典存储单例实例。 +3. 属性包装器 `@Injected`:简化依赖注入,声明属性时自动从容器解析依赖,提升代码简洁性。 +4. 实战示例:通过协议定义、容器配置和 SwiftUI 集成演示完整流程。 + +文章中的实现覆盖了 DI 的核心机制,有了这篇文章的基础,推荐大家再去阅读 [Swinject](https://github.com/Swinject/Swinject) 的实现,会对 DI 的实现有更深刻的理解。 + +## 文章 + +### 🐎 [注意,暂时不要升级 MacOS ,Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」被拒绝](https://mp.weixin.qq.com/s/s9fJWOJNhOf9Beu60VDQUA) + +[@david-clang](https://github.com/david-clang):macOS 15.4 会导致 Flutter/RN 构建产物新增无效文件夹 `.Symbols` ,提交 App Store 审核会被拒。虽然文章还提供了临时解决办法,但还是建议非必要先不升级,因为调试 Flutter iOS 模拟器时会遇到 `flutter attach` 失效,无法 hot reload ([#166333](https://github.com/flutter/flutter/issues/166333)),该问题还没好的解决办法,可用真机调试先绕过。 + +### 🐕 [New in Swift 6.1: Test Scoping Traits](https://www.pointfree.co/blog/posts/169-new-in-swift-6-1-test-scoping-traits) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 引入的 Test Scoping Traits 新特性,它彻底改变了测试代码的编写方式。通过自定义 TestTrait,开发者可以更优雅地管理测试上下文和全局状态,特别适合依赖注入和快照测试等场景。 +新特性主要优势包括: +1. 简化测试代码:用 @Test(.trait) 替代复杂的闭包嵌套 +2. 支持并发安全:完美适配 Swift Testing 的并行测试 +3. 三大流行库已适配:Dependencies、SnapshotTesting 和 MacroTesting 都支持新特性 + +现在升级到最新版本即可体验这些改进,让测试代码更简洁高效。 + +### 🐕 [Swiftdata Architecture Patterns And Practices](https://azamsharp.com/2025/03/28/swiftdata-architecture-patterns-and-practices.html) + +[@Barney](https://github.com/BarneyZhaoooo):本文以预算管理为例,展示了 Swift 原生框架下数据驱动的开发范式。主要介绍了苹果专为 `SwiftUI` 设计的 `SwiftData`。 +核心特性包括: +**1** **声明式建模** :`@Model` 宏简化模型定义,支持 `Codable` 类型与唯一性约束; +**2** **深度 SwiftUI 整合** :`@Query` 动态追踪数据变化,视图自动刷新; +**3** **业务逻辑内聚** :模型类直接嵌入唯一性验证、金额计算等规则; +**4** **灵活架构** :可选协议抽象数据层,适配长期维护或框架迁移; +**5** **云同步与预览** :默认 `CloudKit` 私有库同步,`PreviewModifier` 快速注入测试数据。 + +## 工具 + +### 🐎 [Introducing swiftly 1.0](https://www.swift.org/blog/introducing-swiftly_10/) + +[@DylanYang](https://github.com/Dylan19Yang):Swift 正式发布了它的工具链版本管理工具 swiftly,它可以帮助开发者更方便的在不同的平台上下载、安装指定版本的 Swift。借助 swiftly 的版本申明,可以更简单的在团队开发或者 CI/CD 环境中保持 Swift 的版本一致性。swiftly 一大亮点是它自身是由 Swift 开发而成的,因此它可以直接使用 Swift 内的标准库处理 HTTP 请求和文件系统读写等场景,它也利用可以和 C 桥接的特性使用了 C 的压缩库。对具体的使用方式感兴趣的同学可以阅读文章做进一步的了解。 + +## 音视频 + +### 🐢 [Spatial Rendering for Apple Vision Pro with ARKit, Metal, and Compositor Services by Warren Moore](https://www.youtube.com/watch?v=vO0M4c9mb2E) + +[@BluesJiang](https://github.com/BluesJiang): 《Metal by Example》的作者亲自亲自视频授课。这个视频介绍了 Vision Pro 上做 3D 内容所涵盖的所有知识点,包括 ARKit 渲染,Metal 渲染,自定义渲染器,空间手势,手部追踪,物理等,内容覆盖的很全面,适合想了解 VisionOS 在 3D 渲染方面如何切入的读者。视频作者的书也很值得跟着学一学。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#332-2025.04.21.md b/Reports/2025/#332-2025.04.21.md new file mode 100644 index 000000000..c9d2bc6dd --- /dev/null +++ b/Reports/2025/#332-2025.04.21.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #332 | 2025-04-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/332.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [DocC for Multi-Platform Documentation](https://alexanderweiss.dev/blog/2025-03-09-docc-for-multi-platform-documentation) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何手动创建 Swift 包的跨平台文档。虽然 DocC SPM 插件最近添加了对多目标文档生成的支持,但目前仍不支持跨平台包的文档生成。作者分享了一种解决方案,通过直接使用 Xcode 自带的 DocC 工具来实现。 + +文章详细讲解了三个主要步骤: +1. 为各平台构建项目并生成符号图 +2. 将.docc 包转换为 DocC 存档 +3. 将存档处理成可托管的 HTML 文件 + +作者提供了完整的代码示例,包括如何设置 DocC 包结构、创建 Info.plist 文件定义各平台的部署目标,以及编写 shell 脚本来自动化整个构建过程。这种方法可以有效地显示每个 API 在 iOS、watchOS、visionOS、tvOS 和 macOS 上的可用性。 + +### 🐕 [iOS 静态代码检查方案解读](https://mp.weixin.qq.com/s/yYmwuD3wl77Je4m1zFGfWQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章对比了 iOS 开发中三大主流静态代码检查工具:SonarQube、Infer 和 Clang Static Analyzer。SonarQube 存在资源消耗大、配置复杂及 Xcode 适配等问题;Infer 存在语言局限和误报、漏报等问题;Xcode 原生集成的 Clang Static Analyzer,相比 SonarQube 和 Infer,Clang 静态分析在底层问题检测、编译阶段的高效性和多语言支持方面具有显著优势。其凭借增量分析、路径敏感检测和零配置优势,通过脚本筛选增量文件并转换分析结果,可以实现高效自动化检查与定制化报告生成,成为平衡开发效率与质量的中大型项目优选方案。 + +### 🐕 [How to inspect .ipa files and secure your iOS app from common mistakes](https://www.artemnovichkov.com/blog/how-to-inspect-ipa-files) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了如何检查 iOS 应用的 .ipa 文件结构,揭示潜在安全隐患。通过 Apple Configurator 等工具获取 .ipa 文件后,可解压分析 Info.plist(含明文密钥 /URL scheme)、Frameworks(第三方 SDK)和 Resources(测试账户 / 配置文件)。并提出三准则:勿在 Info.plist 存敏感数据,移除开发测试资料,避免明文存储密钥。强调攻击者常用逆向工具(如 Hopper)解析未加密信息,开发者应定期自查 .ipa 文件,强化安全防护。 + +### 🐎 [你为什么需要了解 Dart AST?一个简单的 bug 带你快速认识下 Dart Kernel AST](https://mp.weixin.qq.com/s/DgC0C3U9-9u8KFeM4Ud6mw) + +[@david-clang](https://github.com/david-clang):作者在调用 extension 拓展 BuildContext 的 context.l10n 时报运行时错误 `NoSuchMethodError`,最终通过 [ast_to_text.dart](https://github.com/dart-lang/sdk/blob/ee32a22712b64006b98a3923ff77f4d9476e2f84/pkg/kernel/lib/text/ast_to_text.dart#L5) 相关工具将 IR 层的 dill 文件转成可读文本,定位到问题根本原因是未显式声明函数参数是 BuildContext 类型,导致编译时 context 被推断为 dynamic 类型,最终导致运行时 `NoSuchMethodError` 错误。文章里通过分析 Dart AST 来找到代码根本问题的思路值得我们学习。 + +### 🐎 [SwiftUI Keyboard Shortcut Scope](https://useyourloaf.com/blog/swiftui-keyboard-shortcut-scope/) +[@Smallfly](https://github.com/iostalks):本文聚焦 SwiftUI 键盘快捷键的「跨视图生效」问题,当控件通过导航跳转离开屏幕时,其关联的快捷键仍被系统识别并响应,导致操作冲突。核心原因是系统按视图层级解析快捷键,而非视图可见性。解决方案是利用状态变量动态禁用父视图控件,间接关闭其快捷键响应。若你在 SwiftUI 开发中需精准管理多层级导航的快捷键作用域,本文可帮助你快速定位逻辑隐患。 + +## 代码 + +### 🐎 [Supercharging SwiftUI Text with Dynamic Content Styling](https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling) + +[@阿权](https://github.com/bqlin):文章提供了一种扩展 SwiftUI `Text` 视图的思路,通过自定义文本替换规则,允许对文本中的特定字符串(如单词或段落)应用自定义样式。核心实现包括: + +1. `TextReplacementView`:提供单个或多个替换规则的初始化接口。 +2. `processReplacements`:查找文本中的匹配范围,按顺序处理非重叠替换,拼接生成带有不同样式的 `Text` 视图。 + +文章最后展示了简单和复杂场景下的用法,支持灵活的视图修饰符(如字体、颜色、斜体等)。其优势在于简化了原有通过组合多个 `Text` 视图实现样式定制的繁琐流程,提供了更统一的解决方案。 + +更详细的实现和用法可前往开源库 [TextReplacements](https://github.com/danielsaidi/TextReplacements)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#333-2025.04.28.md b/Reports/2025/#333-2025.04.28.md new file mode 100644 index 000000000..a13285f33 --- /dev/null +++ b/Reports/2025/#333-2025.04.28.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #333 | 2025-04-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/333.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +下周就是五一劳动节了,老司机周报轮休一周,提前祝大家劳动节快乐! + +## 新闻 + +### [重磅上线 | 一次性购买通知 ONE_TIME_CHARGE 即将正式发布 / A new App Store Server Notification type will soon be available](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) + +[@SeaHub](https://github.com/SeaHub):自 2024/06/10 沙箱环境首发以来,该通知历经大半年的稳定性验证,现即将进入现网发布阶段。以下内容值得我们重点关注: + +1. 全商品类型覆盖能力 +突破原有仅自动续期订阅型存在后台发货通知的限制。新通知囊括消耗型商品、非续期订阅型商品及非消耗型商品等所有类型,彻底解决一次性购买场景的后台通知缺位问题 + +2. 客户端依赖解耦 +通过一次性购买通知,针对发货阶段,我们不再需要依赖客户端与服务端通信。客户端不再作为发货主路径,实现发货逻辑的解耦 + +3. 实时发货闭环 +结合一次性购买通知与 appAccountToken 订单透传字段,可构建起媲美国内主流支付平台(微信支付 / 支付宝)的实时发货体系 + +该通知于 2025/05/27 正式上线,推荐大家优先接入。我们通过一次性购买通知更加优雅的处理订单发货场景,构建更健壮的业务履约体系 + +## 新手推荐 + +### 🐎 [Using singletons in Swift 6](https://www.donnywals.com/using-singletons-in-swift-6/) + +[@Smallfly](https://github.com/iostalks):本文介绍了 Swift 6 中单例模式因并发安全性触发的编译错误及解决方案。针对「全局可变状态不安全」和「非 `Sendable` 类型共享状态」等典型问题,文章提出多场景应对策略:通过 `MainActor` 隔离属性或类型、将共享实例重构为 `actor`、使用 `Sendable` 协议确保类型安全,并谨慎使用 `nonisolated(unsafe)` 或 `@unchecked Sendable` 作为临时过渡。作者强调遵循 Swift 6 规范的同时,平衡代码安全性与迁移成本。 + +### 🐎 [Using Swift ’ s defer keyword within async and throwing contexts](https://www.swiftbysundell.com/articles/using-defer-within-async-and-throwing-contexts/) + +[@阿权](https://github.com/bqlin):`defer` 常用在代码块(花括号)作用域结束时执行代码。我们常常用来清理在当前作用域内创建的资源或其他上下文,如配置 lock-unlock。这一思想在 async 方法中同样适用,`defer` 为异步流程提供一个处理成功或失败绝佳的节点,类似异步的 finally。不过 `defer` 会打破传统的流程控制流顺序,带来便利的同时也会削弱一些代码可读性。详细可阅读原文,文章从这几方面介绍了 `defer` 的应用: + +1. `defer` 关键字基础介绍。 +2. 在异常抛出场景中的应用。 +3. 在异步场景中的应用。 + +## 文章 + +### 🌟 🐕 [Dynamically Constructing Generic Types in Swift](https://kyleye.top/posts/dynamic_generic/) + +[@JonyFang](https://github.com/jonyfang): 在 Swift 这种强类型语言里,运行时拼泛型一直是个痛点 —— 比如我们想动态生成 `Optional`、`Array` 这样的类型,通常只能在编译期确定。 +- 作者先带着扒了扒 Swift 元数据(Metadata)的底层结构,包含 `Metadata`、`ProtocolDescriptor`、`ConditionalProtocolDescriptor` 等核心数据布局,并封装成易用的辅助类型,帮你在运行时拿到任意类型的信息和协议类型。 +- 接着用 SwiftUI 的 `_ConditionalContent` 举例,演示如何调用元数据访问器函数,动态组装出三种常见场景下的泛型:`optional`、`either`、`atom`,整个过程零配置、可复用。 +- 最后给出一个基于 Swift Runtime 的完整实现方案,从元数据解析、函数指针调用到类型实例化全流程演示,并对该方案在 ABI 稳定性和未来演进方向上的局限性给出了思考。 + +如果你在做框架或底层库,需要在运行期才知道类型,或者想探索 Swift ABI / Runtime 的更多玩法,这篇文章绝对值得一读。 + +### 🐕 [20 years of Git. Still weird, still wonderful.](https://blog.gitbutler.com/20-years-of-git/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章回顾了 Git 诞生 20 周年的历程,最初由 Linus 为解决 Linux 内核协作问题开发,以高效跟踪代码快照为核心设计。从仅 7 个底层命令的"内容跟踪器"起步,逐步整合社区贡献(如 rebase、log 功能),演变为分布式版本控制系统。GitHub 的诞生及其章鱼猫形象推动普及,使其成为全球开发基石。20 年来核心数据结构和"愚蠢但极快"的理念未变,持续支撑从代码管理到内容分发的创新(如 GitButler),奠定现代软件开发基础设施地位。 + +### 🐕 [SwiftFiddle/swiftregex: Swift Regex is an online tool to learn, build and test Swift Regex Regex and Regex Builder.](https://github.com/swiftfiddle/swiftregex) + +[@Barney](https://github.com/BarneyZhaoooo):**Swift Regex** 是开源在线工具,支持 Swift 正则表达式及 Regex Builder 的实时测试与调试,提供语法高亮和错误定位。基于 Swift、JavaScript 及 Vapor 框架开发,采用 MIT 协议,含 Docker 部署配置。支持命名捕获组、自动化依赖更新及安全策略,适合开发者快速验证正则逻辑。 + +### 🐕 [Creating MCP Servers in Swift](https://www.artemnovichkov.com/blog/creating-mcp-servers-in-swift) + +[@Kyle-Ye](https://github.com/Kyle-Ye):作者深入探讨了如何在 Swift 中创建 MCP 服务器。这篇文章不仅为开发者提供了有关 MCP(Model Context Protocol)通信协议的详细背景,还通过代码示例展示了如何在 Swift 中实现一个基本的 MCP 服务器,最后介绍了如何在 VSCode 和其他客户端中使用该 MCP 服务器。 + +### 🐕 [Make your app content show on Spotlight](https://www.createwithswift.com/make-your-app-content-show-on-spotlight/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何让应用内容出现在 iOS 的 Spotlight 搜索中。主要有两种方法:一是通过 AppShortcutsProvider.updateAppShortcutParameters() 自动索引应用数据;二是使用 Core Spotlight API 手动创建索引,步骤包括为数据模型实现 IndexedEntity 协议、设置 attributeSet 元数据、在添加或删除内容时分别调用 indexAppEntities 和 deleteAppEntities 方法。文章还提到从 iOS 18.4 起,可以用 hideInSpotlight 控制内容是否显示在搜索结果中。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#334-2025.05.12.md b/Reports/2025/#334-2025.05.12.md new file mode 100644 index 000000000..250e780e8 --- /dev/null +++ b/Reports/2025/#334-2025.05.12.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #334 | 2025-05-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/334.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Adding dependencies to binary Swift packages](https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章介绍了作者如何为 Swift 的二进制包(binary Swift packages)添加依赖的问题和解决方案。普通 Swift 包可以直接声明依赖,但二进制包无法这样做,这给闭源 SDK 的开发带来了挑战。过去作者采用复制依赖库源代码到二进制包中的方式来解决,但这种方式混乱、低效、并增加了编译时间。后来作者发现可以通过在 Swift 包中同时声明多个二进制目标(binary target),并将它们一起加入到产品中,从而实现依赖的间接引入,这样包管理器就会自动下载和链接所需的依赖库。作者用这种方法解决了 VietnameseInput 这类闭源 SDK 的依赖管理问题,大大简化了项目结构并提升了构建效率,同时也指出这种方案尚未在更多场景下验证,需要更多开发者一起探索和交流。 + +### 🐎 [支付宝客户端 Kotlin/Native 包体积优化实践](https://mp.weixin.qq.com/s/vcuo2YJsrn3kQcTNuoLuGQ) + +[@Kyle-Ye](https://github.com/Kyle-Ye):支付宝在使用 Kotlin/Native 进行跨端开发时 , 针对应用安装包体积过大的问题 , 采取了一系列优化措施。通过增加 LLVM 优化参数和 DCE 优化,支付宝团队成功将 iOS 和鸿蒙平台上的 Kotlin/Native 应用包体积分别减少了 50% 和 15% 以上。对于正在使用或计划使用 Kotlin/Native 的开发者来说,这篇文章或是一份很好的优化实践参考。 + +### 🐢 [使用 AVPlayer 播放 FairPlay DRM 视频的最佳实践](https://mp.weixin.qq.com/s/vnK8GZP9ucvML6GQ7EJkeQ) + +[@阿权](https://github.com/bqlin):DRM,数字版权管理,可以简单理解为加密媒体 / 音视频。文章围绕使用 AVPlayer 播放 FairPlay DRM 视频展开,详细介绍了相关技术要点和操作方法,具体内容如下: + +1. DRM 介绍:DRM 原理、方案;FairPlay 播放 DRM 视频原理。 +2. FairPlay 密钥的两种管理方式:AVAssetResourceLoader、AVContentKeySession,及其应用场景。 +3. 使用 AVAssetDownloadTask 下载 DRM 资产:使用流程、下载后本地文件组成。 + +对于 DRM 视频,其场景不仅可用于点播视频,直播视频场景也可以使用。只要是 Apple 支持的格式,使用系统的 AVPlayer 播放 DRM 足矣,系统提供一定自由度来让用户定义自己的加解密业务流程,剩下的音视频编解码就交由 AVPlayer 自身管理了。这样实现一个满足自身业务的 DRM 播放器门槛自然就低了很多,也不一定都要白手起家捣鼓起 FFmpeg 来。 + +### 🐕 [Gatekeeper change in macOS 15.4](https://lapcatsoftware.com/articles/2025/4/8.html) + +[@Cooper Chen](https://github.com/cjlcooper):苹果在 macOS 15.4 中调整了安全策略:用户下载文件后,拖拽至部分应用(如 TextEdit)时会反复弹出安全警告,而 Preview 等应用却不受影响。 +问题核心: +- 触发条件取决于应用声明的文件类型。若包含"高危类型"(如 Unix 可执行文件),任何下载文件都会触发警告 +- 文件扩展名直接影响判定结果,暴露逻辑漏洞 + +解决方案: +- 普通用户:终端执行 xattr -d com.apple.quarantine 文件名 +- 开发者:需检查应用配置,避免声明高危文件类型 + +这一调整究竟是安全升级还是过度防护?目前苹果尚未回应,用户可暂用上述方法应对。 + +### 🐎 [How a Single Line Of Code Could Brick Your iPhone](https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone) + +[@david-clang](https://github.com/david-clang):本文介绍了 [Darwin Notify](https://developer.apple.com/documentation/darwinnotify) 的系统漏洞,仅一行代码 `notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")` 即可让设备进入“恢复中”界面且无法退出,只能重启设备,再利用 iOS 自动唤醒小组件的机制,使设备在每次重启后重复触发漏洞,最终实现一行代码把 iPhone 变砖。不限制该敏感通知发送权限的漏洞疑似 [iOS 18.2 beta 2](https://github.com/blacktop/ipsw-diffs/blob/fee5b3c8c18e4639e74677dd3cc1fa80203e64f6/18_2_22C5109p__vs_18_2_22C5125e/Entitlements.md?plain=1#L2336) 引入的,在作者报告漏洞后,[iOS 18.3](https://support.apple.com/zh-cn/122066) 已修复。 + +## 工具 + +### [DeepWiki](https://deepwiki.com/) + +[@EyreFree](https://github.com/EyreFree):DeepWiki 是一个将 GitHub 仓库转化为交互式 wiki 的工具网站,它能够根据项目代码、文档等内容为 GitHub 上的 Public 项目生成详细文档、绘制交互式图表、提供对话式 AI 助手等。用法是把 GitHub 项目 URL 中的 `github` 换成 `deepwiki`,例如 kingfisher 的对应访问地址就是 [deepwiki.com/onevcat/Kingfisher](https://deepwiki.com/onevcat/Kingfisher),或直接在 DeepWiki 官网搜索仓库名称,主流项目基本上已经做了预处理,搜不到的话在主页点击 `Add repo` 等待处理即可。 + +## 代码 + +### [swift-subprocess](https://github.com/swiftlang/swift-subprocess) + +[@kemchenj](https://kemchenj.github.io/):Swift 近日开源了 swift-subprocess 这个库,作为 Swift Foundation 团队的提案,旨在提高 Process 相关 API 的易用性,支持更多的 Swift 现代化的特性,设计部份参考了 Python 和 Rust,目前属于 0.1 版本,并且在后续可能会直接加入 Swift Foundation 库。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [深圳] Lalamove 司机端(Huolala 海外业务)- iOS + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#335-2025.05.19.md b/Reports/2025/#335-2025.05.19.md new file mode 100644 index 000000000..19919ec5b --- /dev/null +++ b/Reports/2025/#335-2025.05.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #335 | 2025-05-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/335.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Apple 公布将于今年晚些时候推出的强大辅助功能](https://www.apple.com.cn/newsroom/2025/05/apple-unveils-powerful-accessibility-features-coming-later-this-year/) + +苹果在辅助功能的上的设计还是非常先进的,现有的一些辅助功能适配起来相对来说还是比较轻松的,期待苹果更多的辅助功能。 + +## 文章 + +### 🐎 [UIApplication delegate deprecation coming in iOS 19 SDK](https://lapcatsoftware.com/articles/2025/4/5.html) + +[@Damien](https://github.com/ZengyiMa):作者通过关注 WebKit 提交记录发现 iOS 19 SDK 中 UIApplicationDelegate 协议中的部分 API 将被弃用,原因是修复因新 SDK 导致的弃用警告,作者预测“新 SDK ”指的是即将在 6 月 WWDC 发布的 iOS 19,苹果工程师们已经在用 iOS 19 SDK 编译 WebKit,所以出现了这些弃用警告。 + +### 🐕 [Using Model Context Protocol in iOS apps](https://www.artemnovichkov.com/blog/using-model-context-protocol-in-ios-apps) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):MCP(Model Context Protocol,模型上下文协议)是一种用于大语言模型(LLM)与外部工具交互的协议。它允许模型在对话过程中调用开发者自定义的函数(称为“工具”),以访问本地或远程的数据和服务,从而增强模型的实际能力。这篇文章介绍了如何在 iOS 应用中使用 Model Context Protocol(MCP)集成大模型能力。作者通过示例展示了如何实现一个 MCP Server(用于获取 Apple Health 中的血压数据)和一个 MCP Client(通过 Anthropic Claude API 实现聊天功能)。整个流程包括定义工具、调用本地服务、解析大模型响应,并在用户请求与工具调用之间建立桥梁,实现智能对话与本地数据交互的结合。 + +### 🐕 [Xtool: cross-platform Xcode replacement. Build iOS apps on Linux and more!](https://forums.swift.org/t/xtool-cross-platform-xcode-replacement-build-ios-apps-on-linux-and-more/79803) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇贴子介绍了作者的开发名为 Xtool 的跨平台 Xcode 替代工具。Xtool 可以在 Linux 和 Windows 上构建和部署 iOS 应用程序 , 同时也可以在 macOS 上替代 Xcode。它支持使用 SwiftPM 构建 iOS 应用程序、签名和安装应用程序。中间还提到了一些 Xtool 目前还不支持的功能 , 如 Interface Builder、资产目录和 LLDB 调试等,作者表示未来会继续完善这些功能。 + +### 🐕 [Vibe Xcoding your apps](https://tuist.dev/blog/2025/05/13/vibe-xcoding) + +[@EyreFree](https://github.com/EyreFree):本文探讨了 LLMs 驱动的氛围编程(Vibe Coding)在 Xcode 生态的应用,介绍了 Alex、CopilotForXcode 等社区开发的 AI 代码助手,提及 MCP 协议对上下文交互的作用。同时指出了 Xcode 的扩展性局限,期待苹果开放底层接口(如借鉴 VSCode 模式)优化集成,强调了上下文、运行时数据和文档对 AI 辅助的重要性。作者认为氛围编程将推动苹果革新开发者工具,建议感兴趣的朋友持续关注社区在 Xcode 与 AI 整合方面的探索。 + +### 🐎 [A flowing WebGL gradient, deconstructed](https://alexharri.com/blog/webgl-gradients) + +[@莲叔](https://github.com/aaaron7): 一篇非常棒的科普文章,通过由浅入深的例子,娓娓道来的揭开了复杂动效的神秘面纱。本质上,绝大多数动画都可以解构为 时间 + 公式 + 图形 api。本篇文章从渐变开始、过度到波浪、贝塞尔曲线等复杂动效,都以思路,公式到代码予以实现,一直到最后实现了一个非常炫酷的动态模糊效果,标题中虽然有 WebGL,但绝大多数代码其实可以非常方便的移植到其他图形 api,如 OpenGL 和 Metal 等等。对动画和图形学有兴趣的同学千万不能错过。 + +### 🐕 [Unlocking the Real Power of Swift 6's Typed Throws with Error Chains](https://www.fline.dev/swift-6-typed-throws-error-chains/) + +[@阿权](https://github.com/bqlin):本文围绕 Swift 6 的类型化抛出(Typed Throws)特性展开,重点解决错误处理中的「嵌套地狱」问题,核心内容如下: + +1. 类型化抛出的优势与挑战 + - 优势:编译时错误检查、类型安全、自文档化 API、IDE 支持。 + - 挑战:抛出类型只能指定一个,不支持嵌套。多层架构中错误需手动转换,导致代码冗余、类型激增和上下文丢失。 +2. Catching 协议与 [ErrorKit](https://github.com/FlineDev/ErrorKit) 解决方案 + - 引入 ErrorKit,通过 `Catching` 协议为错误类型添加 `caught(Error)` case,统一包装子层错误。 + - 关键函数: + - `catch` 函数:自动将闭包中抛出的错误包装为当前层错误类型,避免手动转换。 + - `errorChainDescription` 函数:递归构建层级化错误链,保留原始错误上下文,提升调试效率。 +3. 总结 + - 类型化抛出结合 `Catching` 协议,在保证类型安全的同时简化错误处理,ErrorKit 提供的工具链进一步增强了调试能力。 + - 适用于复杂多层架构,尤其适合需要清晰错误追踪和高效调试的场景。 + +### 🐕 [Debug crashes in iOS using MetricKit](https://ohmyswift.com/blog/2025/05/08/debug-crashes-in-ios-using-metrickit/) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍如何通过苹果 MetricKit 实现系统级崩溃诊断,捕获内存 / 系统信号等传统工具遗漏的崩溃。涵盖框架配置、调用栈分析和 iOS 版本差异化报告机制(13-14 每日汇总,15+ 即时推送),提供崩溃模拟方案,并展示与 Zoho Apptics 整合实现符号解析与数据可视化。 + +### 🐕 [Fitting the Lapse experience into 15 MegaBytes](https://blog.jacobstechtavern.com/p/f7411f56-a502-4ef4-81b1-aef15238d460) + +[@DylanYang](https://github.com/Dylan19Yang):本文讲述了作者在开发 App Clip 时如何将包体压缩到 15 MB 的方式。作者通过重构依赖关系,减少核心功能的依赖库大小,减少、压缩内置的图片、字体等文件,分割核心模块,较少不必要的代码,裁剪字体包,编译优化等各种手段来极致的压缩包体。虽然这是 App Clip,但是对 App 本体的包体有诉求的开发者也有不错的参考价值。 + +## 代码 + +### [ButtonKit](https://github.com/Dean151/ButtonKit) + +[@Smallfly](https://github.com/iostalks):ButtonKit 的设计背景源于 SwiftUI 对异步任务交互的不足,旨在简化开发者在处理复杂用户交互时的工作量。其主要作用是提供一个支持异步操作、进度展示和自定义样式的按钮组件,特别适合需要处理网络请求、文件操作或其他耗时任务的 SwiftUI 应用。开发者可以通过这个库减少样板代码,提升代码可读性和用户体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#336-2025.05.26.md b/Reports/2025/#336-2025.05.26.md new file mode 100644 index 000000000..70e209b0d --- /dev/null +++ b/Reports/2025/#336-2025.05.26.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #336 | 2025-05-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/336.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [LLM 学习笔记:最好的学习方法是带着问题去寻找答案](https://mp.weixin.qq.com/s/T7aD9diSNymHhv68FSaSZA) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章以日常 AI 聊天场景为切入点,生动解析了大语言模型背后的技术原理。特别值得关注的是: + +1. 完整训练流程剖析 +- **数据清洗**:详细讲解如何通过 MinHash 去重、PII 移除、Gopher 过滤等技术处理海量原始数据 +- **Tokenization 优化**:深入解析 BPE/WordPiece 算法,对比不同模型的词汇表设计(如 GPT-4 的 10 万 token 词汇表) +- **分布式训练**:揭秘千亿参数模型如何在数千 GPU 上高效并行训练 +- **监督微调(SFT)**:展示如何用人工标注的高质量对话数据优化模型输出 +- **奖励建模(RM)**:详解如何训练小型网络评估回答质量,实现人类偏好对齐 + +2. DeepSeek-R1 的创新实践 +- **GRPO 算法详解**: + - 创新性地采用分组相对策略优化(Group Relative Policy Optimization) + - 通过分组奖励估计替代传统批评模型,降低 40% 训练成本 + - 结合准确性奖励(基于规则验证)和格式奖励(强制结构化输出) + +- **自主推理能力涌现**: + - 训练过程中自然发展出自我验证和反思能力 + - 在数学(AIME 2024)任务上 pass@1 达 71% + - 自动生成长思维链(CoT)推理过程,平均生成 500+ 推理 token + +文章用大量实例和图表,将复杂的模型训练过程讲解得通俗易懂。无论是想了解 AI 工作原理的初学者,还是希望深入掌握训练技巧的开发者都能从中获得启发。 + + +### 🐎 [What's new in Swift 6.2?](https://www.hackingwithswift.com/articles/277/whats-new-in-swift-6-2) +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 Swift 6.2 将会迎来的重大更新,聚焦于提升开发效率与代码安全性。其核心改进包括: + +1. **并发编程简化**:通过编译器标志 `-default-isolation MainActor` 支持模块级主线程默认隔离,大幅降低异步代码复杂度;新增 `Task.immediate` 实现同步任务初始化,优化执行逻辑。 +2. **语法增强**:引入原始标识符(如 `` `Strip HTML tags`() ``)提升测试可读性,字符串插值支持默认值(`\(age, default: "Unknown")`),KeyPath 扩展支持方法调用(`map(\.uppercased())`)。 +3. **工具升级**:`Backtrace` API 提供运行时堆栈追踪,任务命名功能(`Task(name: "FetchNews")`)助力异步调试,`InlineArray` 实现高性能定长存储。 +4. **测试革新**:支持验证程序崩溃逻辑(`#expect(processExitsWith:)`),失败测试可附加日志 / 数据(`Attachment.record()`)。 +5. **安全强化**:严格内存检查要求显式标记 `@unsafe` 代码,全局 Actor 隔离协议提升并发安全。 + +此次更新通过 20+ 项提案优化了语言一致性,为开发者提供更简洁、安全的工具链,尤其助力 SwiftUI 和服务器端开发的深度整合。 + +### 🐎 [Dependency container on top of task local values in Swift](https://swiftwithmajid.com/2025/04/30/dependency-container-on-top-of-task-local-values-in-swift/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章由 Swift 专家 Majid 撰写,深入探讨了 Swift 并发编程中的 Task Local Values(任务本地值),并创新性地将其应用于依赖注入容器的实现。 +文章首先解析了 @TaskLocal 宏的核心机制,展示了它如何在异步任务间隐式传递数据,类似于 SwiftUI 的 Environment。随后,作者通过构建一个支持多环境(生产 / 测试)的依赖容器,演示了如何利用这一特性优雅地管理全局依赖,特别是在单元测试中快速切换 mock 实现。适合中高级 Swift 开发者学习现代并发编程范式,为复杂应用架构提供新思路。 + +### 🐎 [2025 上半年 Flutter iOS 大坑超汇总,看看你踩中了没](https://mp.weixin.qq.com/s/JceoW5K554Gg3QYZoVYbYw) + +[@david-clang](https://github.com/david-clang):本文汇总了 2025 上半年 Flutter iOS 影响比较大的 6 个问题,好在这些问题都有对应的解决办法,它们分别是: + +1. iOS 18.4 Beta 的 JIT 权限问题([#163984](https://github.com/flutter/flutter/issues/163984)) +2. macOS 15.4 打包 IPA 的 ITMS-90048 错误([#166367](https://github.com/flutter/flutter/issues/166367)) +3. macOS 15.4 模拟器的调试服务问题([#166333](https://github.com/flutter/flutter/issues/166333)) +4. iOS 设备 Hot Restart 延迟([#165656](https://github.com/flutter/flutter/issues/165656)) +5. iOS 18.5 Beta 字体粗细异常([#167343](https://github.com/flutter/flutter/issues/167343)) +6. iOS 输入框崩溃问题([#138464](https://github.com/flutter/flutter/issues/138464)) + +### 🐎 [Default isolation with Swift 6.2](https://www.massicotte.org/default-isolation-swift-6_2) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过 Swift 默认可见性的类比形象的为大家解释了默认隔离态 (Isolation) 的含义。修改默认隔离态是 Swift 6.2 新引入的特性,帮助开发者方便的修改一个模块默认的隔离态。原先模块默认的隔离态均为无隔离 (nonisolated),而通过修改默认隔离态,我们可以将一个模块的隔离态默认改为使用主线程隔离,相当于默认带上了 `@MainActor` 。不过作者随后也提到此修改有利有弊,大家实际使用时需要认真权衡。 + +## 代码 + +### [OpenAsyncImage](https://github.com/OpenSwiftUIProject/OpenAsyncImage) + +SwiftUI 的 `AsyncImage` 开源 backport: + +- 最低支持 iOS 13 +- 基于 iOS 18 的 `State.wrappedValue` setter 进行优化 +- 全平台统一一致的行为 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#337-2025.06.09.md b/Reports/2025/#337-2025.06.09.md new file mode 100644 index 000000000..a8427d244 --- /dev/null +++ b/Reports/2025/#337-2025.06.09.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #337 | 2025-06-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/337.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Optimized mathematical computations in Swift](https://swiftwithmajid.com/2025/05/13/optimized-mathematical-computations-in-swift/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍如何用 `Swift` 的 `Accelerate` 框架 (特别是 `vDSP` 模块) 高效处理大规模数学计算 (如求和、平均值、标准差)。它替代传统低效方法(如 `reduce`), 显著提升大数据场景性能 (如百万级健康数据点)。核心展示了 `vDSP.sum`、`vDSP.mean` 和 `vDSP.standardDeviation` 的简洁用法,并指出该框架还支持更复杂计算(如机器学习、信号处理)。 + +### 🐢 [微信自研高性能推理计算引擎 XNet-DNN:跨平台 GPU 部署大语言模型及优化实践](https://mp.weixin.qq.com/s/QNQpWKX3EuoTJvBNrIqmPQ) + +[@Cooper Chen](https://github.com/cjlcooper):在 AI 大模型落地浪潮中,微信团队的 XNet-DNN 引擎以“一次开发,全平台高效运行”的理念,解决了 LLM 部署的两大痛点:硬件碎片化适配和边缘计算性能瓶颈。其技术突破性体现在三方面: + +- 跨平台统一性 +-- 通过自研 RCI 框架,将 NVIDIA TensorCore、Apple M 系列 GPU、高通 Adreno 等异构硬件的计算能力抽象为统一接口,大幅降低开发成本。对比社区方案(如 llama.cpp),仅需少量代码即可实现更广的硬件覆盖。 + +- 性能压榨艺术 +-- 从宏观的系统级优化(Command Tape 减少 CPU 开销)到微观的指令级调优(寄存器分配、Cache 命中),结合硬件逆向工程,真正“榨干”每颗 GPU 的算力潜力。实测显示,其推理速度在多个平台领先竞品 30% 以上。 + +- 工业级落地价值 +-- 包体积优化适合移动端,长序列支持(FlashAttention-2)契合实际业务场景,且已通过微信生态验证。对于亟需在端侧部署 LLM 的开发者,XNet-DNN 提供了从理论到实践的完整技术路径。 + +该技术特别适合三类专业人士深入研读:需要跨平台部署大语言模型的工程师可通过该引擎实现"一次开发,多端适配",大幅提升开发效率;专注边缘计算性能优化的架构师能从其系统级设计思路中获得异构硬件资源调度的创新启发;而致力于 GPU 底层调优的研究者则可借鉴其从硬件逆向到指令级优化的完整方法论,这套基于 Roofline 模型和微基准测试的优化体系具有普适性参考价值。 + +### 🐕 [一行代码解决 iOS 18 iPad TabBar 位置变化,还你熟悉的底部导航](https://mp.weixin.qq.com/s/i5ydTkzlyxcgdQQ39b7lnA) + +[@BluesJiang](https://github.com/bluesjiang): 在 WWDC24 上,苹果对 iPadOS 上的原生 TabBar Controller 的 UI 作了很大的改版。将 SideBar 移动到了顶部,原本在底部的 UI 也移动到了页面的顶部。这种底层 UI 的改动影响到了我们线上的 UI 表现。这篇文章就给出了三个可行的解决方案,将 UI 还原成原来的的样子, + +### 🐎 [Compose Multiplatform Skia 对比 Flutter Impeller ,都是跨平台自绘有什么差异](https://mp.weixin.qq.com/s/o0vopxuOcqzT47R0Pb2EkA) + +[@david-clang](https://github.com/david-clang):本文大概介绍了 Compose Multiplatform 中的 Skia 和 Flutter 中的 Impeller 的差异,它们最大的区别是两个: + +1. Impeller 定位只为 Flutter 服务,而 Skia 更多考虑兼顾通用性支持。 +2. Impeller 着色器是提前编译,而 Skia 是运行时动态编译。 + - Impeller:通过 `impellerc` 工具链在应用构建期将 GLSL 转换为 SPIR-V ,再编译为平台原生代码(如 Metal MSL),彻底消除运行时编译开销。 + - Skia:依赖传统 Ganesh 后端,需在运行时动态生成着色器(GPU 指令),首次执行复杂动画易引发卡顿(Jank) + +### 🐕 [『极致』的二进制重排](https://juejin.cn/post/7432913408574930971) + +[@JonyFang](https://github.com/JonyFang): 本文介绍了基于 `Clang` 静态插桩的二进制重排方案,主要解决了 `Page Fault` 符号部分剩余未彻底清理的问题。基于 `SanitizerCoverage` 完善符号收集机制,也针对 C++ 静态初始化和 Swift 项目等特殊场景提出优化思路。 + +## 工具 + +### 🐎 [Data Scout: SwiftData debugging tool](https://medium.com/@djalex566/behind-the-scenes-of-datascout-a-swiftdata-debugging-tool-dcfc880f0733) + +[@阿权](https://github.com/bqlin):Data Scout 是一款 SwiftData 调试工具。SwiftData 底层也会使用 SQLite 能力,但读取文件上会有一些细微的差别。 + +1. 发现数据库:支持从模拟器、App 或本地目录中自动发现 SwiftData 数据库。 +2. 查看数据库结构与内容:与 SwiftData 一致,以 Swift 模型的形式展示数据库的结构。并支持层级导航。 +3. 支持使用谓词进行高级筛选。 +4. 实时更新:支持数据库在外部被更新时实时展示在 Data Scout App 中。 + +Data Scout 是作者技术的试验场,其使用了 SwiftSyntax、SourceKit、CoreML、Rust 等技术,App 还在持续更新中,更多内容可以阅读:[Behind the Scenes of DataScout: A SwiftData Debugging Tool](https://medium.com/@djalex566/behind-the-scenes-of-datascout-a-swiftdata-debugging-tool-dcfc880f0733)。 + +## 代码 + +### [Swift Embedded ESP32C6 OLED Demo](https://github.com/CmST0us/swift-embedded-xiao-esp32c6-expansion_board) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这个项目展示了如何在 ESP32C6 嵌入式环境中使用 Swift 进行开发,实现了在 OLED 显示屏上渲染旋转 3D 立方体动画。项目的亮点在于演示了 Swift Package Manager 与 CMake 的集成方案,提供了完整的 Swift 嵌入式开发工作流。特别值得关注的是其解决了 Swift 与 C 互操作时的符号链接问题,以及 U8g2 字体优化方案。对于想要探索 Swift 在嵌入式领域应用的开发者来说,这是一个很好的实践参考项目。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] 米哈游 - iOS 初级 / 高级 / 资深工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#338-2025.06.16.md b/Reports/2025/#338-2025.06.16.md new file mode 100644 index 000000000..d7c9f7f37 --- /dev/null +++ b/Reports/2025/#338-2025.06.16.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #338 | 2025-06-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/338.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Redesigned Swift.org is now live](https://www.swift.org/blog/redesigned-swift-org-is-now-live/) + +Swift 上线了新的官网,新官网的设计目标是突出 Swift 易于上手的特性。并且还提供了 软件包、Swift 实际应用示例、代码片段以及进一步学习的资源链接等信息。 + +## 文章 + +### 🐕 [What's new in Swift 6.2?](https://www.hackingwithswift.com/articles/277/whats-new-in-swift-6-2) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Swift 6.2 带来了一系列语言特性增强和并发模型优化,旨在提升开发效率并简化并发编程。以下是核心更新要点: +- 一.并发编程改进 + - 1.默认 actor 隔离推断 + - 2.非隔离异步函数默认在调用者 actor 执行 + - 3.任务优先级升级 API + - 4.任务命名 +- 二.语言特性增强 + - 1.Raw Identifier 大扩展 + - 2.字符串插值的默认值 + - 3.enumerated () 遵循 Collection 协议 + - 4.方法和初始化器键路径 +- 三.内存安全与调试 + - 1.可选严格内存安全检查 + - 2.回溯 API +- 四.测试框架升级 + - 1.退出测试 + - 2.测试附件 + - 3.条件特性公共 API +- 五.其他重要更新 + - 1.弱常量 + - 2.内联数组 + - 3.正则表达式后向断言 + - 4.全局 actor 协议一致性 + +Swift 6.2 通过简化并发入门门槛、增强语言灵活性和测试能力,持续推动 Swift 在多平台开发中的易用性与专业性。 + +### 🐕 [Accessorise Your Context Menu Interactions](https://sebvidal.com/blog/accessorise-your-context-menu-interactions/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何通过苹果的私有 API,实现类似 iMessage 消息气泡上的 Tapback 表情选择器效果。作者详细介绍了相关 API 的使用,并给出 Objective-C 桥接和 Swift 运行时动态调用两套完整的方案,巧妙的规避审核风险。有相关需求的同学值得一读。 + +### 🐕 [A (Re-)Introduction to ExtensionKit](https://www.massicotte.org/extensionkit-intro) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章全面解析了苹果 ExtensionKit 框架的核心功能与应用价值,其中包括: + +- 跨平台扩展:支持应用间功能调用与 UI 嵌入(SwiftUI 远程视图),覆盖 macOS/iOS; +- 高效安全:基于 XPC 通信,强制沙盒化但允许文件共享; +- 开发要点:需内置于 .app 分发,iOS 支持自动授权;推荐开源库 Extendable 降低复杂度; +- 应用场景:专业工具集成(如相机 + 修图)、编辑器插件等,为开发者创造跨应用协作新机会; + +适合以下开发者深入阅读: + +- iOS/macOS 开发者:想要实现跨应用功能集成的技术团队; +- SwiftUI 使用者:需要深度整合原生 UI 的开发者; +- 独立开发者:寻找商业化新机会的个人或小团队; + +建议关注 iOS 26 对该框架的支持进展,把握跨平台开发新趋势。 + +### 🐎 [iOS 26 beta1 重新禁止 JIT 执行,Flutter 下的 iOS 真机 hot load 暂时无法使用](https://mp.weixin.qq.com/s/KREg8100EKo3oemJZ6F36Q) + +[@david-clang](https://github.com/david-clang):iOS 26 beta1 并未“禁止 JIT ”,而是**精确封堵了 App 进程自身动态修改内存权限并执行未签名代码的能力**,目标是打击利用此机制的恶意软件(App Fraud),同时保留合法的开发调试功能。但 Flutter iOS 真机 hot load 因依赖此机制而“误伤”,需通过解释器等新方案适配。 + +文章还介绍了几个适配思路,其中混合模式执行的思路很有意思,因为这是 Flutter 热更新框架 shorebird 在 iOS 上目前的热更新方案:**App 整体通过 AOT 运行,只有热更新 patch 存在的时候,针对该部分进行解释执行**。 + +## 工具 + +### [SourceKitten](https://github.com/jpsim/SourceKitten) + +SourceKit 是一个由 Apple 开发的框架,它构成了 Xcode 等开发工具中大部分语言功能的基础,例如代码补齐,定义跳转等等。尽管 SourceKit 功能强大,但其底层通信协议(基于 XPC)相对复杂,直接使用并不方便。这时,SourceKitten 就应运而生了。 + +SourceKitten 是一个由社区驱动的开源 SPM 项目,它将与 sourcekitd 的复杂交互封装成了简单易用的命令行工具和 Swift 框架。开发者可以轻松地利用 SourceKitten 来调用 SourceKit 的强大功能,而无需关心底层的实现细节。 + +可以用来替代 sourcekitd-test,不推荐直接与 sourcekitd-test 交互,输入格式可读性不强。 + +SourceKitten 默认使用 `sourcekitdInProc.framework/Versions/A/sourcekitdInProc` 处理请求,当然也可以替换为自己本地编译的 Sourcekit (之前已开源)方便排查与定位问题。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#339-2025.06.23.md b/Reports/2025/#339-2025.06.23.md new file mode 100644 index 000000000..e89c8a7ae --- /dev/null +++ b/Reports/2025/#339-2025.06.23.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #339 | 2025-06-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/339.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Unique values in Swift: Removing duplicates from an array](https://www.avanderlee.com/swift/unique-values-removing-duplicates-array/) + +[@阿权](https://github.com/bqlin):文章介绍了 Swift 中数组去重一些最佳实践。 + +1. 使用 Set 去重(O(n)),要求元素遵循 Hashable: + 1. 不关心顺序场景,可以直接创建对应的 Set,再转换为数组来去重。 + 2. 对于保留顺序场景,也可以增加 Set 来跟踪出现过的元组,过滤出重复项。 +2. 使用 [Swift Algorithms Package](https://github.com/apple/swift-algorithms) 提供的 `uniqued()` 方法。虽然功能完善,不过对于这个场景可能有些大材小用了,还可以能引入不必要的依赖。 + +大家在工程实践中,推荐用方法一也够用了,另外这也是各公司面试题中的必考基础算法之一噢。 + +## 文章 + +### 🐕 [Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention](https://steipete.me/posts/2025/automatic-observation-tracking-uikit-appkit) + +[@AidenRao](https://weibo.com/AidenRao):苹果在 iOS 18/macOS 15 中为 UIKit/AppKit 框架秘密添加了“自动观察追踪”功能。开发者只需在应用的 Info.plist 文件中启用一个键值,UI 就能自动响应数据变化,类似 Swift 的 @publish。(从 iOS 26 开始,此功能默认启用。) + +### 🐎 [Recreating the bird animation from Swift.org](https://alexwlchan.net/2025/swift-bird-animation/) + +[@Smallfly](https://github.com/iostalks):这篇文章揭晓了 [Swift.org](https://www.swift.org/) 首页那只「飞鸟」的诞生过程。作者深入剖析了这个令人印象深刻的动画:它并非视频,而是巧妙地利用 HTML5 Canvas 和 JavaScript 实现的纯代码杰作。 +核心亮点在于: +1. 「画笔」​效果:​ 用特殊的 虚线路径(dash pattern)​ 技巧,模拟出画笔逐渐绘制出飞鸟轨迹的动态。 +2. 精准遮罩:​ 通过 globalCompositeOperation 技术,将绘制出的动态路径作为「模具」,精准地揭示出底层的精美图像。 +3. 流畅动画:​ 借助 Anime.js 库 实现平滑自然的运动效果,并考虑了页面加载(MutationObserver)和用户偏好(prefers-reduced-motion)。 + +### 🐎 [Tips and tricks for when using SwiftUI ’ s ViewBuilder](https://www.swiftbysundell.com/articles/swiftui-viewbuilder-tips-and-tricks/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者主要介绍了使用 SwiftUI 中的 ViewBuilder 类型的一些实用小建议。比如通过在合适的地方添加 ViewBuilder 属性来使得我们自定义的 View 初始化时可以使用 SwiftUI 风格的 View 描述方式。以及提供了两种不同方法达成初始化参数缺省的方式,以简化自定义 View 的初始化。这些方法虽然并不起眼,但是可以让我们在组织代码的时候获得更多的灵活性。 + +## 工具 + +### [enableAppleAI](https://github.com/kanshurichard/enableAppleAI) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):可以开启国行设备体验 Apple AI 的工具,优势是不用长期关闭 SIP (完成后可重新开启)。原理是通过修改 eligibilityd 沙盒文件 + 锁权限 。需要注意的是,其中关于注入 eligibilityd 相关代码报错的描述存在一些错误,[XcodeLLMEligible](https://github.com/Kyle-Ye/XcodeLLMEligible/) 并未替换系统的 eligibilityd ,仅是在开发调试 eligibilityd 时对齐系统行为所用。 + +### [Notepad.exe](https://notepadexe.com/) + +[@EyreFree](https://github.com/EyreFree):Notepad.exe 是专为 Swift 开发设计的原生 macOS 应用,主打轻量高效,可替代 Xcode 用于快速原型和代码实验。它支持 iOS 模拟器集成、智能代码补全、实时错误检测,具备便签式悬浮笔记、库式工作流等功能,还有内置 AI 辅助编码。工具注重隐私,数据本地存储,界面简洁无冗余,适合想避开重型 IDE 的开发者,感兴趣的朋友可以试试。 + +## 代码 + +### 🐕 macOS 26 恢复启动台小技巧 + +[@Barney](https://github.com/BarneyZhaoooo):macOS 26 恢复启动台小技巧,终端执行一下命令后重启电脑即可。 + +``` + +sudo mkdir -p /Library/Preferences/FeatureFlags/Domain +sudo defaults write /Library/Preferences/FeatureFlags/Domain/SpotlightUI.plist +SpotlightPlus -dict Enabled -bool false + +``` + +### [apple-on-device-openai](https://github.com/gety-ai/apple-on-device-openai) + +[@Cooper Chen](https://github.com/cjlcooper):这个创新项目巧妙地将 macOS 26 内置的 Apple Intelligence 本地模型(3B 参数)封装成兼容 OpenAI API 的接口,让开发者能在第三方 AI 客户端中直接调用这个轻量级模型,实现隐私优先的本地推理。 + +技术亮点包括: + +- 完整的 OpenAI API 协议兼容,无缝对接现有生态 +- 针对 M 系列芯片优化的本地推理引擎 +- 智能上下文管理,支持多轮对话 +- 典型响应速度控制在 800ms 内(M3 设备实测) + +目前项目已在 GitHub 开源,这种创造性地"桥接"系统级 AI 能力的思路,为桌面端 AI 应用开发提供了新范式。对于关注隐私计算和边缘 AI 的开发者,这无疑是个值得研究的样本。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#340-2025.06.30.md b/Reports/2025/#340-2025.06.30.md new file mode 100644 index 000000000..18fed622a --- /dev/null +++ b/Reports/2025/#340-2025.06.30.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #340 | 2025-06-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/340.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!](https://github.com/bytedance/btrace/blob/master/INTRODUCTION.zh-CN.MD) + +[@JonyFang](https://github.com/JonyFang): btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。 + +btrace 3.0 相比 2.0 的优化(iOS 视角): + +1. 采集方案升级。 +3.0 由单一编译期插桩,升级为“同步抓栈 + 异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。 + +2. 数据存储与压缩优化。 +3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。 + +3. 多线程与性能再提升。 +3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁 / 低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。 + +4. 死锁规避与线程采样精细化。 +异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。 + +5. 丰富的性能归因与可视化。 +除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页 / 上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。 + +6. 易用性和生态提升。 +3.0 极大简化了接入流程,无需业务侧代码大改,无侵入式支持线上场景,支持性能自动诊断和多端(Android/iOS/ 鸿蒙 /Web)扩展,生态愈发完善。 + +整体来看,btrace 3.0 对 iOS 开发者而言,是一款集高性能、易用性、灵活性于一体的专业 Trace 工具。相比 2.0,3.0 大幅优化了采集方式、性能、安全性和数据分析能力,适合需要深入性能调优、线上问题定位和日常性能治理使用,推荐纳入工程实践! + + +### 🐕 [避免在 Swift 中使用 `self.`](https://juejin.cn/post/7508668930896412722) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章探讨了在 Swift 开发中避免不必要的 `self.` 前缀使用,利用编译器检查减少循环引用风险。它基于 Swift 5.3(SE-0269)和 5.8(SE-0365)的演进,在闭包中省略 `self.` 能让编译器强制捕获语义(如使用 `[weak self]`),从而暴露潜在内存泄漏问题。 + +### 🐕 [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/) + +[@阿权](https://github.com/bqlin):文章分享了作者关于 Apple Feedback 的心得体会与收益: + +1. 反馈的价值: + 1. 作者自 2014 年起提交超 1000 条反馈,推动漏洞修复、文档更新及新功能开发(如 HealthKit、MetricKit 等框架的改进)。 + 2. 对开发者而言,可以理清技术思路、记录测试用例,形成可复用的技术文档;提升沟通能力,强化对平台的理解,甚至在撰写反馈过程中解决问题。 +2. 有效提交反馈的策略: + 1. 内容结构化: + 1. 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“ HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。 + 2. 内容:遵循 “问题描述→预期→复现步骤→重要性→示例项目” 结构,附日志、截图或 sysdiagnose 文件。 + 2. 高优场景: + 1. 生产环境漏洞、重大回归、影响广泛的 API 问题; + 2. beta 版本期间,及时提交问题,利用 WWDC 与工程师面对面跟进。 +3. 作者的反馈实践案例。 + +开发者可以积极参与反馈提交,尤其在 WWDC 和测试版周期中,通过结构化报告和社区分享推动平台改进。反馈不仅是对 Apple 的贡献,更是优化自身开发流程的重要手段。 + +### 🐢 [Reverse-Engineering Xcode's Coding Intelligence prompt](https://peterfriese.dev/blog/2025/reveng-xcode-coding-intelligence/#explaining-a-chunk-of-code) + +[@zhangferry](zhangferry.com):Xcode 26 提供了 Coding Intelligence 功能,并且支持自定义模型。但当前自定义模型支持的 URL 格式 是 ChatGPT 风格的,非这类格式例如 Gemini 还需要依赖 Proxyman 这类网络代理工具做一层转换。(感觉算是 Bug,希望后续能修复) +文中以 Xcode 中使用 Gemini 为例,抓取和分析了 AI 相关的代码解释、文档生成、代码生成这几个功能所涉及的 Prompt,每一个功能都对应一组封装好的 Prompt,可以了解到 Apple 是如何使用 PE 的: + +* 行为约束:完整理解用户意图及代码再回答问题 +* 前置知识:注意 Apple 平台的 API 选型;代码生成优先使用 Swift、OC;优先 Concurrency 而不是 Combine +* 代码理解:使用 SEARCH 工具(函数调用)获取代码相关上下文,再丢给 LLM +* 代码生成:除了代码本身,还会查找项目依赖,学习其 API + +### 🐕 [Flutter 又双叒叕可以在 iOS 26 的真机上 hotload 运行了,来看看又是什么黑科技](https://mp.weixin.qq.com/s/jGqJFTlLqF2N_rqVdSkLKQ) + +[@Damien](https://github.com/ZengyiMa):由于 iOS 26 beta1 禁止了 Debug 时 mprotect 的 RX 权限,导致 Flutte 在 iOS 26 真机上 Debug 运行时出现了问题。为了解决这一问题,Flutter 团队采用了一种临时方案,即创建了 NOTIFY_DEBUGGER_ABOUT_RX_PAGES 函数。当 Flutter 应用需要执行新代码时,该函数会暂停应用并通知调试器,调试器随后利用其特权,通过 debugserver 修改内存权限,实现“双地址映射”,其中一个地址用于写入代码,另一个地址用于执行代码。这一方案虽然解决了当前的运行问题,但存在一定的延迟和较高的环境要求,未来仍需开发高性能的 Debug 解释器来提供更完善的解决方案。 + +## 代码 + +### 🐕 [EFQRCode](https://github.com/EFPrefix/EFQRCode) + +[@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` 集成。 + +## 音视频 + +### 🐢 [SwiftData versus SQL Query Builder](https://www.pointfree.co/blog/posts/174-free-episode-swiftdata-versus-sql-query-builder) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Point-Free 团队在 WWDC 2025 期间免费放送了一期重磅视频,深入对比 SwiftData 与他们自家 SQL Query Builder(Structured Queries)在实际开发中的表现。视频以还原 Apple Reminders 复杂查询为例,展示了两种方案在代码简洁性、可组合性和类型安全等方面的差异。 + +Structured Queries 方案只需 23 行代码即可线性表达复杂查询逻辑,支持类型安全、可读性强;而 SwiftData 不仅写法更繁琐(32 行),还存在布尔和枚举类型无法直接排序 / 筛选、可选字段排序不灵活等问题,甚至有些写法在运行时会直接崩溃。 + +如果你关心 Swift 持久化方案、数据层架构,或在 SwiftData 和 SQL 之间犹豫,强烈建议观看本期视频。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#341-2025.07.07.md b/Reports/2025/#341-2025.07.07.md new file mode 100644 index 000000000..c5a5483e4 --- /dev/null +++ b/Reports/2025/#341-2025.07.07.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #341 | 2025-07-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/341.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Don ‘ t Liquid Glass All the Things](https://david-smith.org/blog/2025/06/17/design-dary-liquid-glass-everything/) + +[@阿权](https://github.com/bqlin):iOS 26 的液体玻璃效果让大家眼前一亮,大家可能已经在重新设计自己的 App,恨不得给所有 UI 都加上液态玻璃效果。文章提到液态玻璃效果容易滥用,导致界面的不和谐。使用液态玻璃的场景应该是用于突出按钮下方的内容,例如地图预览上方的操作按钮。换句话说,液态玻璃效果的控件会让控件自身与下方内容悬浮出来,形成两个解耦的交互层级,如果控件本身与内容是嵌合的二维依赖关系,则并不适合添加液态玻璃效果。 + +## 文章 + +### 🐢 [深入解析| Cursor 编程实践经验分享](https://mp.weixin.qq.com/s/UQPcxiV4UsTxpPYRjaNZIA) + +[@Cooper Chen](https://github.com/cjlcooper):本文深度剖析 AI 编程助手 Cursor 的进阶使用方法,为开发者提供一套可落地的效率提升方案: + +1.Prompt 设计黄金法则 + +- 采用"目标-背景-约束"三段式结构 +- 技术方案设计阶段明确禁止生成代码 +- 单测生成时附带示例代码确保风格统一 + +2.Rules 规范引擎 + +- 自动生成项目专属开发规范(支持 Go/Java 等) +- 中间件调用错误率降低至 0.3% +- 通过"/"命令快速适配团队规范 + +3.工具链整合方案 + +- 复杂需求使用 AutoGPT 进行任务分解 +- 技术调研调用 Claude 深度研究模式 +- 钉钉文档直接解析免去格式转换 + +本文提供的技术方案设计模板和开发规范 Rules 可直接复用,帮助开发者快速建立 AI 辅助编程工作流。文中揭示的"代码生成 + 架构决策"分层协作模式,为现代软件开发提供了高效的智能解决方案。 + + +### 🐕 [Flutter 里的像素对齐问题,深入理解为什么界面有时候会出现诡异的细线?](https://mp.weixin.qq.com/s/eESwYV6tfXP-zeygHObCrw) + +[@david-clang](https://github.com/david-clang):Flutter 界面中出现的诡异细线,本质原因是: + +1. 逻辑像素到物理像素转换出现浮点值(非整数 DPR、布局误差)。 +2. Skia 默认开启 AAA(Analytic Anti-Aliasing)抗锯齿处理,处理相邻同色元素时各自计算的像素覆盖率总和可能不足 100%(如 40% + 50% = 90%)。 +3. 未被覆盖的剩余部分(如上例的 10%)会显露背景色,形成半透明的细线。 + +解决方案是: + +1. [pixel_snap](https://pub.dev/packages/pixel_snap):提前将逻辑像素换算物理像素,根本上避免转换后出现物理像素不对齐。 +2. Impeller: MSAA(Multisample Anti-Aliasing)抗锯齿处理,通过在每个像素内部采样多个点来获得更准确的边缘渲染效果,使那些原本因浮点误差产生的“半像素边缘”更加平滑自然,从而视觉上弱化或隐藏了细线问题。 + +### 🐕 [Rewriting a 12 Year Old Objective-C iOS App with Claude Code](https://twocentstudios.com/2025/06/22/vinylogue-swift-rewrite/) + +[@Smallfly](https://github.com/iostalks): 这是一篇非常详实的 AI 辅助开发实践分享。作者用 Claude Code 将一个 12 年前的 Objective-C 应用 Vinylogue 重写为 Swift + SwiftUI,仅用 7 天时间就完成了从架构升级到 App Store 上架的全流程。 + +文章的价值在于: +1. **真实的成本分析** - 详细记录了理论花费 $353 vs 实际花费 $20 的对比,以及每日开发进度 +2. **实用的最佳实践** - 总结了大量 Claude Code 使用技巧,如使用 `--quiet` 标志、合理管理上下文窗口、创建反馈循环等 +3. **架构升级经验** - 展示了如何利用 AI 工具进行大规模重构,从传统架构升级到现代的 swift-dependencies + swift-sharing 架构 +4. **完整的开发流程** - 涵盖了从数据迁移、UI 适配到自动化截图生成的全过程 + +对于想要尝试 AI 辅助开发的 iOS 开发者来说,这篇文章提供了一个很好的参考框架。特别是文章中提到的"保持在宏观层面评估代码库,让 AI 处理微观层面的工作"这一理念,对提高开发效率很有启发意义。 + +### 🐕 [Understanding and Improving SwiftUI Performance](https://medium.com/airbnb-engineering/understanding-and-improving-swiftui-performance-37b77ac61896) + +[@AidenRao](https://weibo.com/AidenRao):Airbnb 的 SwiftUI 性能优化分享:通过为视图自定义 `Equatable` 协议实现,仅在实际数据变化时触发重绘,避免不必要的视图更新。将大型视图分解为小型可差异化组件,配合复杂度检测工具(如 SwiftLint 规则)预警重构时机,减少单次渲染计算量。 + +## 代码 + +### [container](https://github.com/apple/container) +[@老驴](https://weibo.com/u/6090610445):Apple 最近发布了一个新的开源项目叫 Container,本质上是一个运行在 Linux 上,基于 Swift 和 Virtualization framework 的容器库。它的重点是更好地支持 Apple Silicon 芯片跑容器。 个人猜测,这可能是 Apple 为将来在自家服务器上使用 Apple Silicon 做准备的一步。毕竟一直有传言说 Apple 想让自家数据中心的服务器用上自研芯片,而要做到这一点,一个完善的容器方案是少不了的。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#342-2025.07.14.md b/Reports/2025/#342-2025.07.14.md new file mode 100644 index 000000000..acc007768 --- /dev/null +++ b/Reports/2025/#342-2025.07.14.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #342 | 2025-07-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/342.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 宣布成立安卓工作组](https://www.swift.org/android-workgroup/) + +Swift 官方宣布成立 Android 工作组,将 Android 列为官方支持的平台。该工作组的主要目标是为 Swift 语言添加并维护 Android 平台支持,让开发者能够使用 Swift 开发 Android 应用。 + +## 文章 + +### 🐕 [A Swift Developer ’ s Guide to Prompt Engineering with Apple ’ s FoundationModels](https://www.natashatherobot.com/p/swift-prompt-engineering-apples-foundationmodels) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章是关于 Apple's FoundationModels 在 Swift 开发中的提示工程指南。Apple 的 Foundation Model 专门为 Swift 和 SwiftUI 训练,有 4096 token 的上下文限制。核心技术是使用 Generable 宏定义输出结构,通过 Guide 系统精确控制生成内容。文章强调属性顺序的重要性,因为 LLM 逐 token 生成。实用技巧包括自然语言长度修饰符、角色设定、少样本提示法和温度调节。对于用户输入,建议限制开放字段并妥善处理 guardrail 错误。为 Swift 开发者提供了原生、类型安全的 AI 集成方案。 + +### 🐕 [Finding my Way](https://david-smith.org/blog/2025/07/02/new-maps/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 独立 iOS 开发者 David Smith 分享了他在基于 iOS 26 设计语言重新设计 Pedometer++ 的地图功能的一些思考。文章详细描述了他的设计过程,包括如何让地图全屏显示、如何优化顶部按钮、如何设计浮动的信息面板等。 + +### 🐢 [《别急于下定论:人工智能编程工具实则可能降低生产力》 Not So Fast: AI Coding Tools Can Actually Reduce Productivity ](https://secondthoughts.ai/p/ai-coding-slowdown) + +[@Cooper Chen](https://github.com/cjlcooper):在 AI 编程工具被广泛吹捧的背景下,METR 实验室通过一项严谨的随机对照试验(RCT)揭示了一个反直觉的结论:经验丰富的开发者在成熟项目中使用 AI 工具后,工作效率反而降低 19%。这项研究基于 16 位资深开源开发者在百万行代码项目中的 246 项真实任务,挑战了“ AI 必然提升效率”的行业共识。 + +关键发现: + +- 效率幻觉:开发者普遍预期 AI 能提速 24%,实际却拖慢 19%,认知偏差高达 40 个百分点。 +- 时间消耗:44% 的 AI 生成代码被废弃,开发者 9% 的时间用于修正 AI 输出,4% 在等待响应。 +- 适用场景:AI 在小型新项目中表现良好,但对复杂系统维护可能适得其反。 + +### 🐕 [Schedule a countdown timer with AlarmKit](https://nilcoalescing.com/blog/CountdownTimerWithAlarmKit/) + +[@阿权](https://github.com/bqlin):文章详细介绍了如何使用 WWDC25 推出的 AlarmKit 框架实现倒计时提醒功能。过去要实现指定时间提醒功能,普通开发者只能通过苹果的通知推送。虽然通知能自定义时机甚至提醒铃声,但始终还是通知,在静音模式和专注模式下都无一幸免,要想像系统闹钟一样即使在静音和专注模式下还能提醒,只能通过新推出的 AlarmKit 了。AlarmKit 支持一次性闹钟、重复闹钟和立即开始的倒计时提醒,AlarmKit 提供的能力需要用户授权,并需要适配锁屏展示和灵动岛中的展示,具体配置可浏览原文。 + +只希望该功能不要被厂商滥用,尤其不要用在“加急”功能上啊! + +### 🐎 [Google I/O Extended :2025 Flutter 的现状与未来](https://mp.weixin.qq.com/s/hqra9NJJ4-KwtoQFc6h1mg) + +[@david-clang](https://github.com/david-clang):本文的分享更侧重于科普类型的概括,包括 Flutter 的市场渗透率、技术进展、未来方向,其中有几个有趣的点: + +1. 市场渗透率: + - **Flutter 比 RN 的整体渗透率高**:根据 2025 年 6 月[腾讯端服务](https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653581211&idx=1&sn=eb05a7282b245fd33dedfa1ace9a2c76&scene=21#wechat_redirect)统计整体渗透率,Flutter 约 13%,RN 约 9%。另外,根据 Apptopia 统计,2024 年 AppStore 里 Flutter 占据所有新免费 iOS 应用的近 30%。 + +2. 技术进展: + - **线程合并**:之前的 3.29 Android 和 iOS 默认合并 Dart UI 线程和平台线程,从最近 3.32 开始, Windows 和 macOS 也支持合并 Dart UI 线程和平台线程。 + - **多窗口**:在本文发布后 2 天,对多窗口的支持已经合到主分支([#168728](https://github.com/flutter/flutter/pull/168728)),在 Engine 层引入在 Windows、macOS 和未来 Linux 平台上创建并管理多个窗口的机制。 + +3. 未来方向: + - **移除 Cupertino 和 Material 的内置**:对于 iOS 26 的液态玻璃实现,官方已经明确了不会内置支持,甚至连 Android 的最新  Material 3 Expressive 也是,长期来看,把特色控件从 Framework 内置移除,专注引擎优化,是个更好的方向。 + - **ffigen/jnigen 持续优化**:线程合并的主要目的,是为了抛弃历史产物 MethodChannel,而在互操作这件事情,未来肯定是 Dart 和平台语言直接互调用,而 3.32 也提到了,ffigen/jnigen 也在持续改进并内测,预计下半年会有全新的消息。 + +### 🐎 [使用 Xcode 26 构建,在 (, iOS 26) 设备启动崩溃 Symbol not found: _NSUserActivityTypeBrowsingWeb](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5062) + +[@DylanYang](https://github.com/Dylan19Yang):使用 Xcode 26 构建包,跑在版本号小于 iOS 26 的系统上会在启动阶段遇到设备启动崩溃 Symbol not found: NSUserActivityTypeBrowsingWeb。原因是 CoreServices 在 iOS26 SDK 中重新导出了 NSUserActivityTypeBrowsingWeb 符号,导致链接时将符号绑定到了 CoreServices 模块。修复方案是把 Foundation 的在链接参数中的位置往前面提到 CoreServices 之前。 + +> [CrazyFanFan](https://github.com/CrazyFanFan) 提供信息 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#343-2025.07.21.md b/Reports/2025/#343-2025.07.21.md new file mode 100644 index 000000000..3939f4b56 --- /dev/null +++ b/Reports/2025/#343-2025.07.21.md @@ -0,0 +1,83 @@ +# 老司机 iOS 周报 #343 | 2025-07-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/343.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Meet the Inspector view in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/meet-the-inspector-view-in-swiftui/) + +[@阿权](https://github.com/bqlin):文章介绍了 SwiftUI 中检查器视图(Inspector View)的用法: + +1. 基本概念与使用场景: + 1. 检查器视图用于展示主内容的附加信息,默认在右侧展示(macOS/iPadOS),在紧凑尺寸设备(如竖屏 iPhone)上以 sheet 形式呈现。 + 2. 需要 macOS 14+ 和 iOS 17+。 +2. 基本用法:通过 `inspector(isPresented:content:)` 控制检查视图的显隐。 +3. 自定义宽度:支持固定宽度 `inspectorColumnWidth(_:)`,和用户拖拽控制宽度 `inspectorColumnWidth(min:ideal:max:)`。 +4. 检查器入口按钮与导航工具栏的适配,问题提供了三种适配方案。 +5. 在紧凑尺寸中的展示效果及其适配方案。 + +在苹果提供中的 App 中,检查视图是用户早已习惯的交互形式,使用检查视图可能提升 App 的专业性并提升用户体验。 + +## 文章 + +### 🌟 🐢 [An open source tool to speed up iOS app launch](https://blog.sentry.io/open-source-tool-speed-up-ios-app-launch/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Emerge Tools 提供了一个轻量级的收集 App 启动阶段内执行到的函数的收集工具,而不用修改编译选项(开启插桩),以此可以用来投喂给 Xcode 进行二进制重排,进而通过减少启动过程中的 Page In 数量来加快启动速度。技术方案是通过 Linkmap 或者 [trick 的方式](https://github.com/getsentry/FaultOrdering/blob/main/Sources/EMGFaultOrdering/Constructor.mm#L137) 收集函数起始的地址。然后对所有函数起始地址替换汇编指令为触发 ARM64_BREAK_INSTRUCTION 。在捕获断点后,记录下此方法,然后跳转原始逻辑继续执行。其中有非常多的细节,推荐对此感兴趣的同学阅读。 + +同时可以对此工具稍加改造,以此适配收集 App 任意阶段内的执行函数(如某个巨大模块),然后执行预热,以加快某个模块的冷启动首次进入耗时;同时其中涉及到与 [SimpleDebugger](https://github.com/EmergeTools/SimpleDebugger) 的联动,可以进行修改优化,目前是每个函数都执行一次 StopTheWorld + 替换单个函数汇编方便断点记录,可以修改为 批量执行一次 StopTheWorld + 替换所有需要函数。 + +### 🐕 [Everything You Should Know About Spacer](https://kyleye.top/posts/everything-you-should-know-about-spacer/) + +[@AidenRao](https://weibo.com/AidenRao):SwiftUI 提供了四种 `Spacer` 类型实现灵活布局:通用 `Spacer` 在可用空间内沿主轴扩展;`_TextBaselineRelativeSpacer` 支持文本基线对齐;`_HSpacer`/`_VSpacer` 严格限定方向。它们通过 `PrimitiveSpacer` 协议共享核心属性(`minLength`, `axis`, `requireTextBaselineSpacing`) + +### 🐕 [Swift 6.2 Java 互操作性实践](https://arturgruchala.com/swift-6-2-java-interoperability-in-practice/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章展示了如何通过 Swift 6.2 的 swift-java 包实现 Swift 与 Java 的高效互操作。整个过程通过标准工具链(SwiftPM + Makefile)自动化,从 Java 编译到 Swift 调用无缝衔接,大大简化了跨语言开发的复杂度。最终实现了 Swift 程序可以优雅地调用 Java 方法的目标。 + +### 🐕 [What you need to know before migrating to Swift Testing](https://soumyamahunt.medium.com/what-you-need-to-know-before-migrating-to-swift-testing-b9c1d749ebd5) + +[@JonyFang](https://github.com/JonyFang): 一篇 Swift Testing 迁移指南摘要,介绍了从传统 XCTest 框架迁移到 Swift Testing 框架前需要了解的关键信息。如: + +- Swift Testing 框架的主要优势和新特性 +- 迁移过程中可能遇到的常见兼容性问题 +- Swift Testing 与 XCTest 的语法和结构差异 +- 一些迁移策略建议和最佳实践 + +对于正在考虑升级测试框架的 iOS 开发者来说,这是一篇实用的参考指南。 + +## 代码 + +### [部分使用了 Data.bytes 的代码无法正常编译](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5061) + +[@Smallfly](https://github.com/iostalks):iOS 26 SDK 中 ``Foundation.Data`` 扩展了新的属性 ``var bytes: RawSpan { get }``,如果之前的实现里面使用了 CryptoSwift 对 Data 添加的 extension 中的 ``var bytes: Array`` 且未明确 ``import CryptoSwift`` 就会遇到编译器无法正确匹配实现的问题。 + +使用到的位置主动 `import CryptoSwift` 明确实现来源。 + +CryptoSwift 已将 extension 重命名为 byteArray ,[PR](https://github.com/krzyzanowskim/CryptoSwift/pull/1076)。 + +> [CrazyFanFan](https://github.com/CrazyFanFan) 提供信息 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#344-2025.07.28.md b/Reports/2025/#344-2025.07.28.md new file mode 100644 index 000000000..6e56db56b --- /dev/null +++ b/Reports/2025/#344-2025.07.28.md @@ -0,0 +1,73 @@ +# 老司机 iOS 周报 #344 | 2025-07-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/344.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [WWDC 2025: What's new for the Apple community?](https://www.createwithswift.com/wwdc-2025-whats-new-for-the-apple-community/) + +[@BluesJiang](https://github.com/bluesjiang):这篇文章快速介绍了 WWDC25 的重要更新,很适合产品、开发者进行速览,快速发现自己关系的功能和相关技术的介绍。文章很贴心的将相关文档的链接内置的其中方便读者快速检阅。其中的液态玻璃的适配和 Apple Intelligent 是重点的更新项目,也是开发者比较值得关注的地方。因为液态玻璃的启用是系统默认行为,可能会带来不少适配的问题。文章也简单介绍了一下 Swift 和 SwiftUI 的更新。不过文章中没有特别介绍 visionOS 的相关更新,其实这方面苹果也开放了很多新能力来发掘 Apple Vision Pro 的潜能,非常值得相关开发者关注一下。 + +### 🐎 [迁移至 Swift Actors](https://juejin.cn/post/7527865199861841947) +[@Smallfly](https://github.com/iostalks):这篇文章聚焦 Swift Actors 在实际项目中的迁移实践,针对传统并发方案(锁、队列)易遗漏保护、无法保证原子性的痛点,给出了 Actor 重构的具体路径。核心内容包括: + +- **数据模型重构**:通过 `actor` 替代传统类,编译器强制属性隔离访问,从源头避免数据竞争;结合 `performInIsolation` 实现多属性原子操作。 +- **环境桥接**:用 `nonisolated` 标记协议方法,通过 `Task` 异步调用隔离逻辑,兼容同步与并发环境。 +- **线程正确性**:`@MainActor` 标记类 / 属性,编译器检查调用链线程,解决 UI 更新等场景的崩溃隐患;解析 `@preconcurrency` 对 OC 导入类的影响,明确编译器警告边界。 +- **内部并发**:`nonisolated` 函数配合 `async let` 处理耗时任务,结合任务取消机制解决重入问题。 + +文章以 `Uploader` 和视图模型为例,串联工具链与代码细节,为老项目迁移至现代并发模型提供了可复用的实践参考。 + +### 🐢 [CursorShenzhen 0608 讲师 PPT](https://pf2n1japaz.feishu.cn/docx/DgAudpiFpoVqFgxEx00czJyonzf) + +[@Cooper Chen](https://github.com/cjlcooper):这是 6 月 8 日深圳 Cursor 技术讲座 PPT 合集,汇集了 6 位专家的精彩分享,其中包括: + +- 生产级 Cursor 应用——企业级开发规范、团队协作优化、工程化实践 +- AI 创业实战 —— 如何用 Cursor 构建 AI 公司,技术栈选择与商业化落地 +- 智能前端开发 —— Cursor + Figma 联动,自动生成高质量前端代码 +- 更多实战技巧——代码优化、Prompt 工程、AI 辅助调试与部署 + +特别适合正在使用 Cursor 的开发者学习参考。 + +### 🐕 [Giving Claude Code Eyes to See Your SwiftUI Views](https://twocentstudios.com/2025/07/13/giving-claude-code-eyes-to-see-your-swiftui-views/) + +[@Barney](https://github.com/BarneyZhaoooo):本文探讨如何为 Claude Code 提供视觉能力来查看 SwiftUI 视图渲染结果,核心方案是通过 Swift Snapshot Testing 实现可视化验证工作流。 + +**技术方案**:配置测试套件,建立"生成快照→分析对比→优化代码→迭代验证"的闭环流程。 +**实战验证**:通过重建用户列表界面测试发现,Claude Code 在图像分析方面存在局限性,难以精确识别字体、间距、颜色等细节差异。 +**结论**:当前技术仍处于研究阶段,建议迭代不超过 3 次即引入人工干预,对于像素级需求直接提供设计稿更有效。 + +### 🐎 [Modern Swift Lock: Mutex & the Synchronization Framework](https://www.avanderlee.com/concurrency/modern-swift-lock-mutex-the-synchronization-framework/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们介绍了 Swift 中的 Mutex 锁,Mutex 锁是 Swift 锁的其中一种,只需要在声明变量时将类型通过 Mutex 关键字包裹起来,后续所有对该变量的访问就都可以通过锁的方式进行从而避免多线程的数据竞争问题。Mutex 也可以和 Swift Concurrency 配合使用。而和 actor 相比 Mutex 更轻量,并且支持同步调用,开发者可以按需在他们之间做出选择。感兴趣的开发者可以阅读一下。 + +## 工具 + +### [Apple Docs MCP - Apple 开发者文档 MCP](https://github.com/kimsungwhee/apple-docs-mcp) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个名为 Apple Docs MCP 的开源项目,提供一个 Model Context Protocol(MCP)服务器,专门用于让 AI 助理(如 Claude、Cursor、VS Code 中的 MCP 客户端等)能够通过自然语言查询访问 Apple 官方开发者文档:包括 iOS/macOS/watchOS/tvOS/visionOS 的框架 API、Sample Code、WWDC 视频内容等。如果你是 iOS/macOS 开发者,尤其需要查询最新 iOS 26 / SwiftUI、UIKit、AlarmKit 等 API,并希望 AI 助理能实时且正确地生成示例代码,这个工具可以极大简化流程。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#345-2025.08.04.md b/Reports/2025/#345-2025.08.04.md new file mode 100644 index 000000000..c4db79cd8 --- /dev/null +++ b/Reports/2025/#345-2025.08.04.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #345 | 2025-08-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/345.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect 中的年龄分级现已更新](https://developer.apple.com/cn/news/?id=ks775ehf) + +苹果在 iOS 26 及以后的商店中更新了更细化的年龄分级,在现有的 4+ 和 9+ 分级的基础上,更新后的年龄分级系统新增了三个分级:13+、16+ 和 18+。苹果已经向开发者发送了邮件提醒需要完成新的年龄分级调查问卷。大家可以按需填写更新分级。 + +分级的截止日期为 2026 年 1 月 13 日。 + +## 新手推荐 + +### 🐎 [Deciding between 'let' and 'var' for Swift struct properties](https://www.swiftbysundell.com/articles/let-vs-var-for-swift-struct-properties/) + +[@阿权](https://github.com/bqlin):文章围绕 Swift 结构体中 let 与 var 的最佳实践与注意事项展开,内容如下: + +1. 结构体的可变性规则 + 1. 可变性遵循“整体不可变则部分也不可变”规则(即使属性使用 var 声明)。 + 2. var 声明的实例仅 var 属性可变,let 属性始终不可变。 +2. let 的使用场景 + 1. 唯一 id 属性:一旦创建就不应改变,始终确保实例全局唯一的场景。 + 2. 依赖初始化的属性:值初始化完成后,后续无需改变的场景。 + 3. 声明为 let,表达了本质不可变的语义,避免了意外修改,也保证了数据一致性。 +3. var 的使用场景 + 1. 状态属性:需随业务逻辑动态更新。 + 2. 依赖属性:值需依赖外部条件刷新。 +4. 语义表达 + 1. 两者的使用应更多考虑语义的表达,使其自文档性,let 暗示着永久不可变,var 暗示着可动态调整。 + 2. 应管控 var 的使用,可提升代码的可预测性。 + +合理使用 let 与 var 能提升代码安全性、可读性和可维护性,也是 Swift 结构体设计的核心原则。 + +### 🐎 [New Watch](https://david-smith.org/blog/2025/07/22/new-watch/) + +[@Kyle-Ye](https://github.com/Kyle-Ye):一篇 watchOS UI 设计语言变迁的实践记录与设计取舍思考,推荐给关注 watchOS 适配与视觉一致性的开发者。 + +## 文章 + +### 🐕 [A Peek into My Debugging Process (With Real Examples)](https://www.polpiella.dev/how-i-fix-bugs-in-my-apps/) +[@Smallfly](https://github.com/iostalks):这篇文章通过三个真实案例,分享了 iOS 开发者在实际项目中调试应用的完整流程,涵盖崩溃、性能回归与意外系统提示三类常见问题。核心调试策略包括: + +- **崩溃排查**:结合崩溃日志(含 SwiftUI/AppKit 内部调用栈)、Diagnostics 工具定位网络失败上下文,用 Proxyman 模拟请求失败复现问题,最终通过调整 UI 布局(`HStack` 改 `overlay`)解决。 +- **性能优化**:利用 Xcode Instruments 的 Time Profiler 发现串行网络请求,通过 Swift 结构化并发(`async let` 并行任务)提升加载效率。 +- **系统提示溯源**:通过注释初始化代码、本地克隆第三方库,定位到 `ProcessInfo().hostName` 调用触发网络权限提示,最终通过库代码替换修复。 + +文章强调「调试时间主要花在定位而非修复」,系统掌握工具(崩溃日志、Proxyman、Instruments)与方法(二分排查、上下文分析)是提升效率的关键,为开发者提供了可复用的调试实践参考。 + +### 🐕 [ChatGPT in Xcode 26: there ’ s a hidden prompt!](https://www.swiftwithvincent.com/blog/chatgpt-in-xcode-26-theres-a-hidden-prompt) +[@AidenRao](https://weibo.com/AidenRao):Xcode 26 内置了 ChatGPT 功能,并在对话开始前注入一个隐藏提示词,用于优化 AI 编程助手的输出质量与安全性。了解提示的内容可以让我们更好地理解 ChatGPT 可以访问哪些信息以及苹果给出了什么上下文。 + +### 🐕 [Combine and Swift Concurrency: A threading risk](https://www.avanderlee.com/concurrency/combine-and-swift-concurrency-a-threading-risk/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章探讨了从 Combine 迁移到 Swift Concurrency 过程中的线程安全风险。 + +**核心问题:** 作者在 RocketSim 项目升级到 Swift 6.2 严格并发模式后发现,使用 `Combine` 观察通知并调用 `@MainActor` 标记的方法时,当通知从非主线程发出会导致崩溃。 + +**关键风险:** `Combine` 的 `sink` 闭包缺乏编译时线程安全检查,而直接使用 `NotificationCenter` 的 `addObserver` 方法则会在编译时报错。这种隐蔽性使得问题只在运行时暴露。 + +**解决方案:** 推荐迁移到 `Swift Concurrency` 的 `for await` 语法观察通知,获得编译时安全保障。对于必须保留的 `Combine` 管道,建议在 `sink` 内使用 `Task` 包装或通过 `receive(on:)` 指定执行队列。 + +总结:`Combine` 与 `Swift Concurrency` 混用存在隐性线程风险,应优先迁移到纯 `Swift Concurrency` 方案。 + +### 🐎 [My 10 Tips for Using Claude Code](https://samwize.com/2025/07/08/my-10-tips-for-using-claude-code/) + +[@david-clang](https://github.com/david-clang):这篇文章总结了作者使用 Claude Code 的 10 个高效技巧,推荐给想提升 Claude 使用效率的开发者。包括自定义 Slash 命令、自动生成 commit 信息等加快开发效率的技巧,还有使用 ccusage 统计工具去监控 token 成本的技巧。 + +## 代码 + +### [Foundation Models Framework Example](https://github.com/rudrankriyam/Foundation-Models-Framework-Example) + +[@zhangferry](zhangferry.com):该仓库是 Foundation Models 框架的示例演示,除了基本能力:基础聊天、结构化数据生成、流式响应、Tools 调用的示例,还提供了基于这些能力打造的几个示例应用:语音相关的 AI 应用、健康数据分析的 AI 应用、Pokemon 分析的 AI 应用,作者还把常用的 Tools 封装成了一个 [Tools](https://github.com/rudrankriyam/FoundationModelsTools) 库。 + +Foundation Models 的优势在于本地执行、隐私保证、原生 API,一切看似很美好,但使用前别忘了这些限制:系统版本 26+ 且设备支持 Apple Intelligence。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [北京 / 深圳] 抖音基础技术 - 代码分析方向 - iOS 资深研发工程师 +- [上海] BiliBili - 移动端开发实习生(社区生态)- iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#346-2025.08.11.md b/Reports/2025/#346-2025.08.11.md new file mode 100644 index 000000000..18eee0603 --- /dev/null +++ b/Reports/2025/#346-2025.08.11.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #346 | 2025-08-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/346.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Uncertain ](https://nshipster.com/uncertainty/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们描述了原生确定的 Bool 值无法精确表达一些概率出现的场景,因此引入了 Uncertain 这样一个库。它将不确定性引入到了编码之中,它可以通过概率建模来描述一个事件的概率而非结果。这可以被用于 GPS 定位或者传感器噪声等含有不确定性的场景。实际使用时,开发者可以通过比对概率值来进行需要的逻辑开发。感兴趣的读者,可以阅读原文进一步了解。 + +### 🐢 [一个半月高强度 Claude Code 使用后感受](https://onevcat.com/2025/08/claude-code/) + +[@JonyFang](https://github.com/JonyFang): Claude Code 在"读懂代码→规划变更→实施改造→文档 / 测试"整链路提效明显,但必须用工程化流程与成本控制兜底。把它当"结对编程伙伴"和"高效审阅者",而不是自动合并器;产出视为草稿,经评审与测试落地更稳。 + +关键优势: +- 跨文件 / 长上下文理解强,能给出可执行的分步计划 +- 重构、迁移、批量机械化改动效率高 +- 文档 / 测试 / 变更摘要产出质量好,便于知识传递 +- 对话式协作体验顺滑,降低思维切换成本 + +主要痛点与对策: +- 成本易失控(重度 API/ 长上下文):设预算 / 配额与告警,精简上下文,结果缓存,订阅 +API 混合 +- 偶发幻觉 / 环境不匹配:在提示中明确版本 / 依赖,强制编译与测试,小步提交 + 代码评审 +- 长会话漂移:阶段性重置,会话内先对齐"当前共识",用固定提示模板 +- 合规与隐私:最小化 / 脱敏,优先企业版或私有部署,审计与密钥扫描 + +适用场景:原型与探索、跨文件重构 / 迁移、批量替换 / 格式化、补齐测试与文档、代码走查与交接 + +回避场景(尽量不让其直接改动): +- 安全 / 核心关键路径:鉴权与权限、加密与密钥、支付 / 交易、隐私合规、一致性与并发、性能临界路径、底层 FFI(可让其做威胁建模 / 测试清单 / 审阅) +- 强环境耦合构建:工具链与版本、依赖与构建系统、签名与发布、架构 /SDK 差异、链接与符号、脚本与环境变量(可让其做日志总结 / 排查清单 / 最小复现) + +与其他工具对比:跨文件理解与规划普遍强于补全型 / 纯 IDE 聊天;但即时补全流畅度与深度 IDE 集成,部分竞品更占优 + +实施建议: +- 工作流:先"读项目→列计划→小步提交 / 分 PR ",以测试 /CI 护栏把关 +- 提示工程:固定模板(项目约束 / 版本 / 风格 / 完成定义),限制改动范围与风险级别 +- 质量保障:单测优先、属性测试 / 回归套件、灰度发布与回滚预案 + +成本策略:设用量监控与告警;合并同类任务批处理;订阅与 API 按场景取舍;重度场景定期复盘性价比(作者实测重度使用可达数千美金级别) + +适合人群:需要频繁跨文件改造与知识传递的团队 / 个人;维护大型代码库或做重构 / 迁移 / 文档化的工程师 + +### 🐕 [@ViewConfigurable — A better way to build SwiftUI components](https://medium.com/grindr-engineering/tl-dr-swiftui-makes-customizing-views-feel-effortless-until-you-build-your-own-reusable-4a3a0cd0e288) + +[@AidenRao](https://weibo.com/AidenRao):如果你想将自定义组件有类似 SwiftUI 的语法,需要针对每一个配置去创建一个新的函数,用于实现链式调用。作者开发了一个名为 @ViewConfigurable 的宏,该宏将根据它在 ViewConfiguration 中看到的变量名自动生成这些链式调用函数,这也会让你的代码文件变的很简洁。 + +## 设计 + +### 🐢 [Designing for the Eye](https://www.nubero.ch/blog/015/) + +[@阿权](https://github.com/bqlin):本文围绕 "视觉错觉矫正" 展开,探讨其在排版与建筑中的应用,内容如下: + +1. 视觉错觉的普遍性 + - 以穆勒・莱尔错觉为例,说明视觉错觉对所有人(无论文化背景)的影响一致,甚至适用于动物与触觉感知。 + - 保罗・雷纳在《排版艺术》中指出:视觉艺术应以 "视觉呈现" 为基准,而非严格的测量数据—— 因为人类感知存在共性偏差。 +2. 排版中的视觉矫正 + - 以字体 "Futura" 为例,说明字体需通过微调来对抗视觉错觉:如字母 "O" 并非完美圆形,而是略宽于高,水平线条稍细于垂直线条,以避免 "蛋形" 错觉。 + - 字母设计需考虑整体协调:如 FF Tisa 的 "O" 上伸部分超出参考线,以平衡与其他字母的视觉重量,避免显得过小。 +3. 建筑中的视觉矫正 + - 以帕特农神庙为例,古希腊建筑师通过系统性调整抵消视觉偏差: + - 柱身 "鼓肚"(entasis):柱子中间微凸,避免因收分导致的 "纤细感"; + - 地基弯曲:柱基呈凸形,防止视觉上的 "塌陷"; + - 柱子倾斜:所有柱子微微内倾,避免 "外倒" 错觉。 + - 这些调整让建筑 "看起来协调",而非追求几何完美,赋予其生命力。 +4. 深层意义:反对平庸,追求美与文化 + - 视觉矫正的本质是对 "视觉真实" 的尊重,体现了对细节与美的极致追求。 + - 对比现代 " Excel 思维" 主导的平庸设计(如冰冷的混凝土建筑),强调这种对微妙之处的关注是人性与文化的体现。 + - 引用乔布斯的观点:人类进步依赖于传播 "精华",让更多人理解美的微妙——这也是希腊人建造神庙、设计师打磨字体的根本原因。 + +文章最终呼吁:拒绝平庸,珍视那些让生活值得的 "美与文化"。 + +## 课程 + +### [Metal Shaders for SwiftUI](https://www.metal.graphics/) + +[@BluesJiang](https://github.com/bluesjiang): 这个是一个在 SwiftUI 框架上如何使用自定义的 Shader 来实现高级渲染效果的课程,包含了渲染相关的基础知识,也包含了 SwiftUI 如何兼容使用 Metal Shader 的相关知识。不算是通识的知识,但是对于那些使用 SwiftUI 作为主力框架,并且需要非常特殊的渲染效果的应用,这门课程是可以去了解一下的。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#347-2025.08.18.md b/Reports/2025/#347-2025.08.18.md new file mode 100644 index 000000000..61a68065f --- /dev/null +++ b/Reports/2025/#347-2025.08.18.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #347 | 2025-08-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/347.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [万字长文解码如何玩转Prompt(附实践应用)](https://mp.weixin.qq.com/s/ad6y-pCe1_PV7iNA7Uh1bg) + +[@zhanggferry](zhangferry.com):这是一篇来自淘宝团队,讲解提示词工程(PE)非常全面的文章,包含业界各类优秀方法论,当你苦于 AI 「不听话」时可以从这里获取灵感。除了提示词设计的七个核心原则,还可以结合你的应用场景,考虑使用这六大高级技巧: + +* 思维链:提供「推理过程 + 答案」范例,激发 LLM 深度逻辑思考 +* 零样本思维链:无需范例,仅追加 “让我们一步一步地思考”,触发 LLM 分步推理 +* 自我一致性:调高模型温度,多次独立解答同一问题,按 “少数服从多数” 选最终答案 +* ReAct(思考与行动):以 “思考→行动→观察” 循环,让 LLM 调用外部工具(API、搜索引擎等) +* 生成知识提示:先让 LLM 生成问题相关背景知识,再结合知识回答原问题 +* 结构化提示:用 XML、JSON、YAML 等严格格式定义提示词,消除歧义 + + +### 🐕 [@isolated(any)](https://nshipster.com/isolated-any/) +[@Smallfly](https://github.com/iostalks):在 Swift 并发模型逐渐完善的过程中,@isolated(any) 作为一个相对低调却关键的特性,正在为 API 设计与任务调度提供新的可能性。 + +这篇文章系统地阐释了 @isolated(any) 的设计动机、语义价值以及在实际 API 中的应用方式。作者通过对比 GCD 与 Swift Concurrency,结合异步函数和 actor 隔离的案例,清晰展示了该属性如何让调度系统基于隔离信息做出更合理的决策。 + +对于大多数开发者而言,@isolated(any) 在日常编码中可能并不直接显现;但若你正在编写并发 API、涉及跨 actor 调度,或希望深入理解 Swift 并发体系的演进方向,这篇文章将为你提供扎实的理论支撑与实践启发。 + +### 🐎 [Flutter 3.35 发布,快来看看有什么更新吧](https://mp.weixin.qq.com/s/PPnSmA3XmyS3cZ_m7zgpdw) + +[@david-clang](https://github.com/david-clang):这次更新除了常规的控件更新和性能优化外,还有两点值得关注下: + +1. **多窗口支持**:在 Engine 层已实现在 Windows 和 macOS 中创建和更新窗口的基础逻辑 ( [#168728](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.amrom.workers.dev%2Fflutter%2Fflutter%2Fpull%2F168728 "https://github.com/flutter/flutter/pull/168728") ),后续版本将更新 Linux 系统,并引入实验性 API 以支持多窗口功能。 + - 虽然官方还没提供多窗口 Demo 来展示 API 的使用,但社区已有人提交 Windows Demo 的[PR](https://github.com/flutter/flutter/pull/173715),也可以通过 [Multi Window](https://github.com/orgs/flutter/projects/39/views/1) 了解官方的进度。 + +2. **Dart & Flutter MCP**:Dart 和 Flutter MCP Server 正式 stable 发布,主要是增强了 AI 编码助手的 Dart 和 Flutter 上下文,Dart 和 Flutter MCP Server 充当桥梁,可以让 AI 通过 Dart 和 Flutter 工具链访问项目的更多上下文: + - 修复运行时错误 :检查实时 Widget 树,识别 Flutter RenderFlex 溢出,并自动应用正确的修复。 + - 管理依赖项 :在 pub.dev 上找到针对特定任务的最佳包,将其添加到 `pubspec.yaml` ,然后运行 `pub get`。 + - 编写和纠正代码 :为新功能生成样板,然后自行纠正其在此过程中引入的任何分析错误。 + +## 代码 + +### 🐕 [swiftlang/swift-subprocess: Subprocess is a cross-platform package for spawning processes in Swift.](https://github.com/swiftlang/swift-subprocess) + +[@Barney](https://github.com/BarneyZhaoooo):`Swift Subprocess` 是 Apple 官方提供的一个用于在 `Swift` 中执行外部进程的现代化库。它提供了类型安全、结构化并发的 `API` 来启动和管理子进程,支持灵活的输入输出重定向、环境变量配置和进程控制。相比传统的 `Process/NSTask API`,它采用了 `Swift` 并发模型,让异步执行和错误处理更加优雅。该库是 `Swift` 生态系统中处理外部命令执行的标准解决方案。 + +### 🐎 [Define the scroll edge effect style of a scroll view for Liquid Glass](https://www.createwithswift.com/define-the-scroll-edge-effect-style-of-a-scroll-view-for-liquid-glass/) + +[@AidenRao](https://weibo.com/AidenRao):在 OS 26 的液态玻璃适配中,需要借助 OS 26 中引入的 [`scrollEdgeEffectStyle(_:for:)`](https://developer.apple.com/documentation/swiftui/view/scrolledgeeffectstyle\(_:for:\)) 方法,去控制滚动视图在边缘区域的样式,尤其是在与安全区域或系统 UI(如标签栏)重叠部分的视觉体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#348-2025.08.25.md b/Reports/2025/#348-2025.08.25.md new file mode 100644 index 000000000..287a4bbce --- /dev/null +++ b/Reports/2025/#348-2025.08.25.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #348 | 2025-08-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/348.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [High Level Anatomy of a Camera Capturing Session](https://mfaani.com/posts/ios/swiftui-camera-learnings/) + +[@AidenRao](https://weibo.com/AidenRao):这边文章用比较简单易懂的话,介绍苹果的相机从拍摄到 Swift 中展示的完整流程。文章不长,比较适合做个相机原理了解。 + +## 文章 + +### 🌟 🐕 [从 DisplayList 到 Transaction: SwiftUI 调试实战](https://kyleye.top/posts/swiftui-debug-analysis) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何通过 SwiftUI 中的相关环境变量,使用 DisplayList 输出分析视图渲染问题,通过符号断点和汇编调试深入分析 SwiftUI 内部机制,并使用 AttributeGraph 等调试工具进行问题定位。 + +### 🐕 [Faster Equatable and Hashable conformances with Identifiable](https://erkek.in/faster-equatable-and-hashable-conformances-with-identifiable) + +[@Smallfly](https://github.com/iostalks):这篇文章聚焦 Swift 中 `Equatable` 与 `Hashable` 协议的性能优化,揭示了编译器自动合成实现的潜在瓶颈,并提出结合 `Identifiable` 协议的改进方案。核心内容包括: + +- 问题分析:默认合成的 `Equatable`/`Hashable` 会逐成员比较或哈希,对含大集合(如 `[User]`)或嵌套结构的类型,复杂度达 O(N),在 SwiftUI 视图更新、`Set` 操作中易成性能瓶颈。 +- 优化方案:利用 `Identifiable` 的 `id` 属性(如 `UUID`),仅基于唯一标识实现 `Equatable` 和 `Hashable`,将操作复杂度降至 O(1)。 +- 数据验证:基准测试显示,含 1000+ 员工的 `Company` 类型,`Identifiable` 方案的 `Equatable` 快 3 倍,`Hashable` 快 3 万倍。 + +文章结合编译器源码与 SwiftUI 实践,为性能敏感场景提供了可落地的优化思路。 + +### 🐢 [What's New in UIKit](https://sebvidal.com/blog/whats-new-in-uikit-26/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章详细总结了 iOS 26 中 UIKit 的全面更新。尽管 UIKit 不再是 WWDC 的主角,但今年仍获得了大量新特性。 +主要更新概况: + • `Liquid Glass` 设计语言:新增 `UIGlassEffect`、`UIButton.Configuration` 的玻璃按钮样式,以及 UIBarButtonItem 的共享背景支持 + • 导航栏增强:`UINavigationItem` 新增 `subtitle`、`largeTitle`、`attributedTitle` 等属性,支持更丰富的标题展示 + • 分割视图改进:`UISplitViewController` 支持新的 `inspector` 列,提供类似 `macOS` 的检查器面板 + • 标签栏配件:`UITabAccessory` 允许在标签栏上方添加浮动工具栏,支持折叠展开动画 + • HDR 色彩支持:`UIColor` 新增 HDR 初始化方法,`UIColorPickerViewController` 支持曝光调节 + • 角落配置 API:`UICornerConfiguration` 提供统一的圆角设置方案,支持容器同心圆角 + • 自然文本选择:`UITextView` 支持混合左右文字的自然选择,`selectedRanges` 替代 selectedRange + • 主菜单系统:`UIMainMenuSystem` 为 `iPadOS` 提供 `macOS` 风格的菜单栏 + • 观察者模式集成:`UIView` 和 `UIViewController` 原生支持 `Swift Observation` 框架 + • 滑块增强:`UISlider` 新增刻度配置和无拖柄样式 +整体而言,iOS 26 的 `UIKit` 更新聚焦于视觉现代化、跨平台一致性和开发便利性的提升。 + +### 🐕 [SwiftUI for Mac 2025](https://troz.net/post/2025/swiftui-mac-2025/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章总结了 SwiftUI 在 macOS 26 上的多项改进,主要亮点包括: + +- **统一图标格式**:Xcode 26 新增 Icon Composer,可用 SVG 分层生成跨平台图标,并向下兼容旧系统。 +- **Liquid Glass 风格**:按钮、滑块、切换等控件拥有玻璃质感与动态反馈,UI 更现代。 +- **原生 WebView**:SwiftUI 首次内置 WebView,无需桥接即可加载网页并追踪导航事件。 +- **列表性能优化**:List 在处理上万条数据时依然流畅,适合大数据量展示。 + +整体来看,SwiftUI 在 Mac 上的易用性与表现力进一步提升,对想要打造现代化界面的开发者非常有参考价值。 + +### 🐎 [Git 2.51 support push/pull stash](https://github.blog/open-source/git/highlights-from-git-2-51/) + +[@david-clang](https://github.com/david-clang):过去 git stash 难以在不同机器之间迁移,Git 在 8 月 18 日发布的 2.51.0 版本支持 push/pull stash,实现跨机器共享 stash。但要在 GUI 工具上应用该特性,还要再等等,目前 Fork 支持的 Git 版本是 2.45.2。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#349-2025.09.01.md b/Reports/2025/#349-2025.09.01.md new file mode 100644 index 000000000..3faf33e0e --- /dev/null +++ b/Reports/2025/#349-2025.09.01.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #349 | 2025-09-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/349.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Why I'm Not Using Xcode 26's AI Chat Integration (And What Could Change My Mind)](https://www.fline.dev/why-im-not-using-xcode-26s-ai-chat-integration-and-what-could-change-my-mind/) + +[@阿权](https://github.com/bqlin):文章者结合自身开发体验,分析了 Xcode 26 中 AI 集成的不足,并建议 Apple 补齐(作者也是恨铁不成钢啊!): + +1. 请求队列:AI 功能会阻塞输入,无法 “边等待边规划”,打断开发思路。 +2. 上下文工程支持:不支持输入上下文文档,需反复解释编码规则,难以调教。 +3. 构建验证能力:无法自行构建、读取错误日志,频繁依赖人工操作,打断开发节奏。 +4. Git 集成:无法搜索历史、对比版本、自动提交,无法利用代码历史辅助开发(如恢复旧代码、更新文档)。 +5. 终端与 CLI 访问:无法通过终端运行自定义的 CLI 工具,简化多任务工作流。 +6. 项目文件限制:无法打开多仓库文件夹,适配复杂项目结构的能力差。 +7. 网页搜索与文档访问:无法获取最新 API / 提案信息,需手动查找,降低信息获取效率。 + +作者认为 Xcode AI 目前更像个 “功能展示”(有但难用),而非真正的生产力工具,核心问题是未围绕 “ AI 驱动开发” 的工作流设计(如频繁的人工干预、缺少自动化能力)。 + +为此,作者也是放弃了 Xcode 转向了 Cursor + Claude Code。 + +### 🐎 [Working with partially generated content in Xcode previews](https://www.artemnovichkov.com/blog/working-with-partially-generated-content-in-xcode-previews) + +[@DylanYang](https://github.com/Dylan19Yang):iOS 26 有了新的 Foundation Models 框架支持开发者通过系统端侧的模型来生成一些数据,本文作者在此之上探索了如何让 Xcode Preview 功能和这些端生成的数据结构进行交互预览。预览 SwiftUI 的静态布局的话我们可以通过代码构造对应的数据结构来 mock 一个实现,此外也可以通过 json 的方式构造一个 GeneratedContent 作为端生成数据结构的初始化参数。如果需要验证流式输出对于 UI 布局的影响,则可以借助 AsyncThrowingStream 来模拟模型生成的场景。 + +### 🐢 [From GPT-2 to gpt-oss: Analyzing the Architectural Advances And How They Stack Up Against Qwen3](https://sebastianraschka.com/blog/2025/from-gpt-2-to-gpt-oss.html) + +[@阿权](https://github.com/bqlin):本文围绕 OpenAI 新发布的开放权重模型 gpt-oss(20B/120B)展开,对比了从 GPT-2 的架构演进,并与 Qwen3 的特性进行对比,最后总结其实用价值和局限。内容可概括为: + +从 GPT-2 到 gpt-oss 的架构演进: + +| 演进点 | 旧设计(GPT-2) | 新设计(gpt-oss) | 收益 | +| :----------- | :---------------- | :-------------------------- | :--------------------------------- | +| 正则化 | Dropout | 无 Dropout | 单轮训练场景无过拟合风险,提升效率 | +| 位置编码 | 绝对位置编码 | RoPE(旋转位置编码) | 支持更长上下文,减少参数 | +| 激活函数 | GELU + 2 层前馈 | SwiGLU + 3 层门控前馈 | 降低计算成本,增强表达能力 | +| 前馈模块 | 单前馈模块 | MoE(混合专家模型) | 平衡模型容量与推理效率 | +| 注意力机制 | MHA(多头注意力) | GQA(分组查询注意力) | 减少显存与计算开销 | +| 长上下文优化 | 无 | 滑动窗口注意力(128 token) | 进一步降低长文本推理成本 | +| 归一化层 | LayerNorm | RMSNorm | 简化计算,提升 GPU 训练效率 | +| 推理控制 | 无 | 推理强度可调(低 / 中 / 高) | 平衡成本与准确率 | + +gpt-oss 与 Qwen3 模型差异较小,在一些特性上各有千秋: + +| 维度 | gpt-oss-20B | Qwen3 30B-A3B | +| :----------- | :----------------------------------------------------------- | :--------------------------------------------------- | +| 架构权衡 | 更宽(嵌入维度 2880)、少量大型专家(32 个) | 更深(48 个 Transformer 块)、大量小型专家(128 个) | +| 长上下文处理 | 滑动窗口(13.1 万 token),但设计了 Attention Bias、Attention Sinks | 纯 GQA 支持更长上下文(26.2 万 token) | + +实用价值与局限: + +- 优势:MXFP4 优化适配单 GPU(20B 需 16GB 显存,120B 需 80GB 显存),推理强度可调,性能接近闭源模型; +- 局限:幻觉率较高,无训练代码 / 数据集(仅开源权重与推理代码),未提供基础模型; +- 未来潜力:随着工具集成成熟,可通过调用外部资源(如搜索引擎)弥补知识遗忘,进一步释放推理能力。 + +总体而言,gpt-oss 的发布丰富了开源 LLM 生态,为需要本地部署、高推理能力的场景提供了新选择,也为研究 Transformer 架构演进提供了重要参考。 + +注意:尽管 gpt-oss 名称中,oss 为 Open-source Software,但官方明确它只是开放权重(Open-weight)模型,仅提供模型权重与推理代码,而非完全开源。 + +### 🐕 [GPT-5 Thinking System Prompts Leak](https://github.com/asgeirtj/system_prompts_leaks/blob/main/OpenAI/gpt-5-thinking.md) + +[@Barney](https://github.com/BarneyZhaoooo):这份提示词让我们看到 GPT-5 Thinking 模型的内部运作机制。核心内容包括: + • **知识边界**:模型知识截止 2024 年 6 月,当前时间设定为 2025 年 8 月,具备 Web 搜索、Python 分析、图像生成等多种工具集成能力 + • **交互规范**:采用三通道架构(analysis、commentary、final),支持富文本 UI 组件(图片轮播、产品卡片、图表),强制要求立即完成任务不可推诿 + • **安全机制**:严格的事实核查要求(需引用来源),时效性信息强制网络验证,设有 1-10 级详细度控制参数 +为理解大语言模型的提示工程和安全设计提供了珍贵的第一手资料,对 AI 应用开发者极具参考价值。 + +### 🐕 [Corner concentricity in SwiftUI on iOS 26](https://nilcoalescing.com/blog/ConcentricRectangleInSwiftUI/) + +[@AidenRao](https://weibo.com/AidenRao):iOS 26 的同心圆角(Corner Concentricity)是苹果在 WWDC 2025 上强调的一项重要设计理念和视觉特性。同心圆角的核心思想是让嵌套的 UI 元素具有和谐一致的圆角,即使它们的大小或层级不同,其圆角的视觉“圆心”也尽可能保持一致,从而营造出统一、精致且富有纵深感的界面效果。 + +SwiftUI 引入了 `ConcentricRectangle` 这个新的 API,帮助开发者更高效地在复杂布局中实现完美的同心圆角效果,让界面设计更加统一与精致。 + +### 🐕 [MNN LLM Chat iOS 流式输出优化实践](https://mp.weixin.qq.com/s/m5J5nLZiPd_yB0y-byyjCg) + +[@JonyFang](https://github.com/JonyFang): 本文针对 iOS 应用中部署大语言模型(LLM)时出现的文字流式输出卡顿问题,提出了一套高效的三层优化方案:通过智能流缓冲解决模型输出与 UI 更新的频率不匹配,利用 UI 更新批处理与节流降低主线程压力,并借助打字机动画渲染增强视觉流畅性。这一方案提升了本地 LLM 应用的交互体验,适合开发高性能 AI 聊天应用的团队参考实践。其开源实现:[MNN GitHub 项目 - https://github.com/alibaba/MNN](https://github.com/alibaba/MNN)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#350-2025.09.08.md b/Reports/2025/#350-2025.09.08.md new file mode 100644 index 000000000..d4ce4c90b --- /dev/null +++ b/Reports/2025/#350-2025.09.08.md @@ -0,0 +1,84 @@ +# 老司机 iOS 周报 #350 | 2025-09-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/350.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [What's New in the Lambda V2 Runtime (Beta)](https://swifttoolkit.dev/posts/lambda-v2) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Lambda V2 Runtime 是 AWS Lambda Swift 运行时的重大升级,核心改进是使用 Swift 结构化并发重写了内部实现。新版本引入了更灵活的执行模型,开发者可以控制 `main` 函数入口,支持后台执行(`LambdaWithBackgroundProcessingHandler`)和流式响应(`StreamingLambdaHandler`)等高级特性。同时提供了统一的服务生命周期管理机制,让 Lambda 函数能够优雅地处理初始化和清理工作。对于需要在 AWS Lambda 上运行 Swift 代码的开发者来说,V2 运行时带来了更强大的控制能力和更好的性能表现,值得关注并适时迁移。 + +### 🐎 [Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer](https://mp.weixin.qq.com/s/ceDt69ue5aV4wGwaGIKmAQ) + +[@Crazy](https://github.com/jiyan135960):骨架图是 app 中经常用来等待网络加载的一种方式,这种方式可以更友好的让用户知道 app 的状态。Skeletonizer 可以让使用者快速的完成骨架图的功能开发,只需把布局包裹在 Skeletonizer 外层,开启 enabled: true 即可得到骨架屏动画。简单来说 skeletonizer 就是通过自定义 PaintingContext 拦截处理 child 的渲染,让原 UI 直接转化为骨架,而不是手写一份骨架版 UI。还可以通过配置来实现更精细的控制骨架化逻辑,比如跳过、合并等。但是越复杂的界面实现起来也就越困难,很多时候需要自己来实现骨架图。这篇文章主要是给大家一个思路,这种实现方案不仅可以用于骨架图,也可以用来其他的功能开发。 + +### 🐕 [果味儿幽灵 -- Xcode 新 AI 助手深度解析](https://mp.weixin.qq.com/s/TzM7MpYCSDrkUuT9eiSFrw) +[@Smallfly](https://github.com/iostalks):这篇文章深度拆解了 Xcode 26 全新 AI 助手的技术内核,从源码到行为策略揭示其「苹果味儿」的设计逻辑。核心内容包括: + +- **架构设计**:采用 Planner-Executor 模型,planner 负责意图分类与方案规划,executor 调用 `edit_file` 等工具执行代码修改,确保行为确定性。 +- **策略驱动**:通过外部 `.idechatprompttemplate` 文件定义「苹果优先」规则,强制使用 Swift Concurrency、Swift Testing 等技术,甚至要求回答「苹果新特性」前必须调用 `search_additional_documentation` 检索内部文档。 +- **扩展潜力**:prompts 外置、工具动态加载的设计,为开发者定制助手提供可能——修改文本模板或注入自定义工具即可调整其「灵魂」。 +- **对比价值**:与 Cursor、Claude Code 等工具对比,突出 Xcode AI 在 IDE 深度集成、企业合规上的优势。 + +文章结合框架源码与实践案例,为开发者理解这一「执拗」助手的行为逻辑,甚至是二次定制提供了关键视角。 + +### 🐎 [iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持](https://mp.weixin.qq.com/s/cYKke432bBzpg365Ia9y7Q) + +[@david-clang](https://github.com/david-clang):Apple 在 iOS 26 中禁止 Debug 时 `mprotect` 的 `RX` 权限,将导致真机无法在 Debug Mode 编译成功的[错误](https://github.com/flutter/flutter/issues/163984),Flutter 之前采取的 hack 方案会导致容易出现 `Timed out *** to update` 错误,现在的[方案](https://github.com/flutter/flutter/pull/173443/)是在  iOS 17+ 和 Xcode 26+ 上利用 `devicectl` 和 `lldb` 突破 `RX` 权限限制, 完成了全新 LLDB 调试的适配迁移。 + +### 🐎 [What makes Claude Code so damn good (and how to recreate that magic in your agent)!?](https://minusx.ai/blog/decoding-claude-code/) + +[@zhangferry](zhangferry.com):在编程领域为什么总感觉 Claude Code 比其他 Agent 要强不少?除了模型本身的差异,更重要的是对 Agent 的设计逻辑上,本文罗列了几点值得借鉴的 Agent 设计原则。 + +1. 控制逻辑设计 + +* 只保留一个主循环,最多增加一个处理分支。过多分支路径下既容易出错,还不容易调试 +* 一些简单工作比如读文件、总结记录等交给小模型处理 + +2. Prompts 设计 + +* 要有一个整体的配置文件(类似 claude.md)以记录用户偏好,比如跳过某些文件夹,使用特定的库。来自 MinusX 的实践,在 AI 首次遇到一些不了解的专有名词时,会自动提醒要不要补充信息到该配置文件。 +* 一些标记或者示例,可以使用 XML 标签或者 Markdown 语法,以强化提醒 + +3. Tools 设计 + +* 在内容搜索时使用 jq、find 这类轻量工具而不是 RAG 这种重工具 +* 给工具分类,低级工具(bash 命令、读文件)、中级工具(grep、glob)、高级工具(网页搜索等 MCP),每个工具都注明其适用场景 +* 让 AI 自己管理 todo list。长任务里,AI 容易忘事,就让它自己写待办、随时看,还能中途改,避免做到一半 “跑偏” + +4. 可控性设计 + +* 语气和风格限制,使得 AI 回答更简洁 +* 对于重要的规则,使用这些关键字 `IMPORTANT`,`NEVER` 会很有效 +* 「什么时候该做什么,不该做什么」不易过多,因为他们容易冲突,处理逻辑的关键步骤需补充一些启发式的方法和处理策略 + +## 代码 + +### [awesome-nano-banana](https://github.com/JimmyLv/awesome-nano-banana) 和 [awesome-gpt4o-images](https://github.com/jamez-bondos/awesome-gpt4o-images) + +[@EyreFree](https://github.com/EyreFree):当下 AI 生图技术发展迅猛,Nano Banana 和 GPT-4o 备受关注。Nano Banana 基于谷歌 Gemini 2.5 Flash Image 架构,解决了角色一致性等难题,能深度理解物理逻辑,支持对话式编辑,在商业、营销及个人创作等领域应用广泛。GPT-4o 是 OpenAI 的多模态大模型,风格多样,构图真实,便于再编辑且响应迅速,常用于广告、艺术、设计等场景。相关的 [JimmyLv/awesome-nano-banana](https://github.com/JimmyLv/awesome-nano-banana) 和 [jamez-bondos/awesome-gpt4o-images](https://github.com/jamez-bondos/awesome-gpt4o-images) 仓库,收集了大量图像案例与提示词,为探索 AI 生图技术提供了丰富资源。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#351-2025.09.15.md b/Reports/2025/#351-2025.09.15.md new file mode 100644 index 000000000..2201c1934 --- /dev/null +++ b/Reports/2025/#351-2025.09.15.md @@ -0,0 +1,56 @@ +# 老司机 iOS 周报 #351 | 2025-09-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/351.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Memory Integrity Enforcement: A complete vision for memory safety in Apple devices](https://security.apple.com/blog/memory-integrity-enforcement/) + +[@Damien](https://github.com/ZengyiMa):本文章是 Apple 推出的 Memory Integrity Enforcement(MIE)技术,结合自研芯片与系统级安全机制,为 iPhone 17 系列提供业界首个全时开启的内存安全保护,无需用户感知即可防御缓冲区溢出、释放后使用等漏洞。该功能基于增强版 Arm 内存标记扩展(EMTE),配合安全内存分配器与标签保密技术,显著增加间谍软件等高级攻击的开发成本,Apple 称之为“消费级操作系统内存安全史上最大升级”。 + +## 文章 + +### 🐎 [SwiftUI WebView](https://troz.net/post/2025/swiftui-webview/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们介绍了 Swift UI 中新引入的 WebView 组件。它有非常简单的初始化方式,同时也兼具了很多我们在使用 WKWebview 时经常会用到的功能,如页面加载各个时机的回调、自定义的 scheme handler、js 注入等。作者提供了一个完善的 demo 来展示这些能力。感兴趣的读者可以阅读下本文。 + +### 🐎 [Debugging Swift Concurrency: “ Am I on the Main Actor? ”](https://www.swiftyplace.com/blog/debugging-swift-concurrency) + +[@JonyFang](https://github.com/JonyFang): Swift Concurrency 调试推荐做思维上的转变:从线程思维转向 Actor 思维,关注"我在哪个 Actor 上"而非"我在哪个线程上"。文中描述了 `MainActor.assertIsolated()` 和 `MainActor.preconditionIsolated()` 在 Debug 和 Release 模式下的差异用法。整体在推荐拥抱 Swift 6 的并发安全模型,让 Actor 成为开发过程中思考并发的基础单元。 + +### 🐎 [Building a design system at Genius Scan](https://www.swiftbysundell.com/articles/building-a-design-system-at-genius-scan/) + +[@david-clang](https://github.com/david-clang):文章详细介绍了如何利用 SwiftUI 的组合思想和环境机制,为应用构建灵活的设计系统。核心是通过创建可复用的基础组件(如 `Row`),并利用 `ViewBuilder` 和 `Environment` 实现样式配置与定制,从而高效解决 UI 一致性与代码复用问题。 + +### 🐕 [Four Corners: the first game in Catalog written in Swift](https://news.play.date/news/four-corners-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):Playdate 游戏《Four Corners》被开发者 Steven Chipman 用 Swift 重写,成为 Catalog 中首款 Swift 游戏。此举旨在探索 Swift 在 Playdate 上的性能潜力。Chipman 熟悉 Swift,选择重写此游戏是因为它相对简单且存在性能瓶颈。尽管遇到了缺少部分 API 和 Foundation 库的挑战,以及调试困难,但 PlaydateKit 库极大地简化了开发。Chipman 认为 Swift 的优势(如 C 级性能和易用性)胜过这些不便,并计划未来继续使用 Swift 开发 Playdate 游戏。他还因此重启了《Four Corners》的 iOS 版本。 + +### 🐎 [Implementing a Refractive Glass Shader in Metal](https://medium.com/@victorbaro/implementing-a-refractive-glass-shader-in-metal-3f97974fbc24) + +[@BluesJiang](https://github.com/BluesJiang):这篇文章使用 Metal Shader 来自己尝试实现类似苹果 Liquid Glass 的效果,介绍了玻璃效果的各个组成部分,已经相关的算法。同时也演示了算法中的各个参数是如何影响最终的效果的。推荐有自定义液态玻璃效果的需求或者是想了解相关的实现方式的开发者阅读。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#352-2025.09.22.md b/Reports/2025/#352-2025.09.22.md new file mode 100644 index 000000000..9f8f9d1e9 --- /dev/null +++ b/Reports/2025/#352-2025.09.22.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #352 | 2025-09-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/352.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Swift 6.2 正式发布](https://www.swift.org/blog/swift-6.2-released/) + +[@kemchenj](https://kemchenj.github.io/):随着 Swift 语言本身走向成熟,每年的更新慢慢的已经不是集中在语言功能上,投入了更多的精力到工具链和生态建设上。 + +#### 更加平易近人的 Concurrency + +- 默认使用 `@MainActor`,减少显式的 isolation 标记 +- 更加直观的 `async` 函数,默认在 caller 的上下文里执行,让 `class` 类型里可以用更简洁直观的方式去实现没有数据竞争的逻辑 +- 新增 `@concurrent` 函数注解,把任务派发到全局任务池 + +前两个功能都是可以手动开启和关闭的,由于前面两个功能开启后,非 actor 环境下的 `async` 函数全部都会派发到 `@MainActor` 执行,导致主线程负载变大,所以新增 `@concurrent` 可以制定任务派发到全局线程。这几套组合拳下来大大加强了 Concurrency 的易用性。 + +#### 安全的系统级编程功能 + +- `InlineArray`:固定大小的内联数组 +- `Span`:可以理解为类型安全的 Buffer 类型 +- 嵌入式 Swift:新增全套 `String` / `InlineArray` / `Span` API +- C++ 互操作:可以通过 header 标注混合使用两个语言里的 `Span` 的类型 + +#### 工具链 + +- VSCode 插件更新 +- 更加细化的编译警告控制 +- 更快的 Macro 编译速度(通过下载预编译的 swift-syntax 包) +- 优化 async 调试功能的体验和稳定性 + +#### 核心库更新 + +- Subprocess:一套全新的 Swift 原生进程接口 +- Foundation:NotificationCenter 新增一套类型安全,拥抱 Concurrency 的接口 +- Observation:提供更加易用的 async sequence 接口 +- swift-testing:新增 API 提高测试代码的表达能力 + +更多详细信息请查看原文。 + +## 文章 + +### 🌟 🐢 [KMP on iOS 深度工程化:模块化、并发编译与 98% 增量构建加速](https://mp.weixin.qq.com/s/wOnyjYcka99eFJz8BWlu4Q) + +[@JonyFang](https://github.com/): 本文主要介绍了 Bilibili KMP 在 iOS 工程化的一些深度改造,达成模块化、并发编译与 98% 增量构建加速的目标。主要通过对 Kotlin/Native 编译管线的深度拆解与重构,系统性地解决了其在模块化、编译并发和增量构建方面的核心瓶颈。 + +**在构建系统与编译速度上** :实现了 `Parallel Compilation`,将每个 Kotlin 模块独立编译为 `.a` 文件,在一些日常的底层修改的场景下最终产物编译耗时降低 98% 。这充分释放了 Bazel 的高并发优势,结合可靠的 `remote cache` 机制达到 Never clean build 的预期。 + +**在编码与跨语言交互上**:摆脱了 KMP 默认的“大一统”框架模式。通过为每个 Kotlin 模块生成独立的 `Clang module` ,并以 `@ObjCExport` 注解精确控制导出,实现了真正的模块化。 + +**在调试与工程化上**:通过修复 `source-map` 路径和实现可靠的 `implementation_deps` ,保证了跨语言调试的稳定性和构建的确定性,解决了社区方案中的常见痛点。 + +也推荐几篇前几期的相关阅读: +- [探讨跨平台技术与跨平台 UI 框架及 Kotlin Multiplatform 在 bilibili 的实践](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247499203&idx=1&sn=67aea00aa5c15999f97791311938bc53&scene=21&poc_token=HLpTz2ijWQWLwFf6XFfk8Q_WpxxZDQY6efKAoW3r) +- [工程化视角的 Kotlin Multiplatform 核心解读及优化](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247499744&idx=1&sn=f3c7bff956a066c30b70b5be1236a308&scene=21&poc_token=HNFTz2ij1E8hZViL6RNPunbfKHVS25LeC66WMyXt) +- [B 站在 KMP 跨平台的业务实践之路](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247502999&idx=1&sn=9213bf3505748c329053a5b583450a18&scene=21&poc_token=HOdTz2ijemHOj_WW4N95gPA12ZTRq-q99qX9m5aI) + + +### 🐎 [Automating Github Action Workflows For Swift](https://elegantchaos.com/2025/08/28/action-builder.html) + +[@Damien](https://github.com/ZengyiMa):作者重启搁置的 ActionBuilder 项目,通过扫描 Package.swift 实现零配置生成 GitHub Actions tests.yml,借 Swiftly 自动识别 Swift 版本并调度 Linux/macOS runner,对 iOS 等 Apple 平台则调用 Xcode 构建且已适配 Swift 6.0-6.2,未来将以轻量 CLI 取代插件,可直接嵌入 Xcode build phase 随编译自动更新工作流。 + +### 🐕 [认知负荷才是关键](https://github.com/zakirullin/cognitive-load/blob/main/README.zh-cn.md) + +[@zhangferry](zhangferry.com):编程领域有很多指导性的理论知识,但这些业界的实践,为什么并非总是有效呢?基于这个问题本文引出认知负荷这个概念:认知负荷是指开发者为了完成一项任务需要动多少脑子。从人的视角出发,以是否便于理解来衡量代码好坏,并给出了以下 4 个降低认知负荷的原则: + +* 模块设计:不应一味的强调小方法,小模块,这会导致过多的接口和代码关联,增加认知负荷。深方法,深模块,一定程度把复杂度限定在特定范围,整体维护成本更低。 + +* 架构选择:不应为体现技术水平采用过于复杂的架构,易懂、易理解的架构才更合适。文中还建议在架构评审时可以让初级开发者参与,以识别过于复杂的设计。 + +* 抽象和代码组织:不应过于追求 DRY(不要重复自己),而大量使用设计模式,微服务等,少量的重复比不必要的依赖更好。 + +* 心智模型:传统推崇的心智模型(领域驱动设计 DDD)有其优势,但副作用是会引入很多主观理解,这个基础之上开发的代码往往会有更高的认知负荷。好的代码应该便于理解,而不是追求优雅和复杂。 + +延伸的几种观念,可能只看名称你就能知道个大概了:「可能是时候停止推荐《代码整洁之道》」、「小型函数的弊端」、「为什么我讨厌“框架”」、「设计牺牲」 + +### 🐢 [阿权的开发经验小集](https://juejin.cn/post/7550466215790886927) + +[@阿权](https://github.com/bqlin):阿权的日常开发小集,记录了日常开发中踩过的大小坑,内容主要涵盖 Git、iOS、Swift、Xcode 等方面问题的总结。按需搜索,说不定有意外的惊喜。 + + +### 🐕 [iOS26 Runtime Changes:Concurrent mutation of nonatomic properties](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5148) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):对于 NSObject 的 property 是 nonatomic 的对象类型时,多线程的 set/get 会存在线程安全问题(非对象一样存在问题,只是不会崩溃),一个简单的修改方案是改为 atomic,注意这个只对一般对象有效。如果是 NSMutableDictionary 等容器对象,还需要考虑对其容器内内容的修改也要注意线程安全,一般得加锁解决;更极端需要多个属性同时保持同步则也得加锁。问题不仅在 property 中存在,全局变量也一样存在问题。具体可以参考我们推荐过的 [头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患](https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg) 。 + +在 iOS 26 以前,一般概率发生的崩溃崩溃的栈顶也在 objc_retain/objc_release 中;在 iOS 26 及之后,则如果发生这种线程安全问题,栈顶函数不变的情况下,会有明确的 EXC_BAD_ACCESS(KERN_INVALID_ADDRESS) 地址为 0x400000000000bad0 让这种情况更容易被辨识。 + +当然这也会带来一定的副作用,由于实现方式是通过 objc_storeStrong 方法中插入汇编,实现在调用 objc_retain 前,将 0x400000000000bad0 写入 x0 指向的地址 ,再正常调用 objc_retain 方法(正常 objc_retain 只接收一个参数,因此只需要 x0 即可)。因此原本偶现的问题,概率是会被放大的(以前即使有问题,但也有概率不崩溃),因此 iOS 26 的崩溃率对大部分应用来说会上升。稳定性同学要面临年末指标上涨的压力了,毕竟 iOS 26 的覆盖率会快速提升。 + +但从更长的视角来看,在 iOS 26 暴露了更多问题后,开发者修复后,后续的新版本对低 OS 的用户也带来体验的提升,所以总体我还是偏正常得看待这个 feature 的,等于苹果开启了对一类问题的线上 TSan ,并且对性能的影响微乎其微。短期的阵痛后带来的是更长期的体验提升。美中不足的就是如果这项 feature 能像 malloc 的一些开关(malloc stack logging 等),能让开发者自主控制按一定比例开启就更好了,能有更多时间修复以及控制对升级到 iOS 26 用户的影响。 + +> 更具体的一些细节可以看链接。 + +### 🐕 [How to disable Liquid Glass](https://www.swiftwithvincent.com/blog/how-to-disable-liquid-glass) + +[@Cooper Chen](https://github.com/cjlcooper):在 iOS 26 中,苹果推出了全新的 Liquid Glass 设计系统,为界面带来了更透明、流动的视觉体验。但如果你的 App 还没做好适配,用户可能会遇到界面错乱的问题。作者在文章中给出了一个简洁的解决方案:通过在 `Info.plist` 中新增键值 `UIDesignRequiresCompatibility = YES`,就能让应用暂时保持旧版设计,避免因 Liquid Glass 引发的兼容性 bug。不过要注意,这只是临时方案,苹果计划在 iOS 27 移除该选项。也就是说,开发者需要尽快着手适配 Liquid Glass,以确保用户体验的连贯性和未来的稳定性。对于想稳妥过渡到新系统的团队来说,这是一个既务实又必须关注的技巧。 + +## 设计 + +### 🐕 [marioaguzman Design Guidelines layout](https://marioaguzman.github.io/design/layoutguidelines/) [marioaguzman Design Guidelines toolbar ](https://marioaguzman.github.io/design/toolbarguidelines/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这两篇文章系统阐述了 macOS 应用在窗口布局和工具栏设计上的核心规范与实践原则:在窗口布局上,需要遵循中心均衡、对齐、留白和视觉平衡的原则,合理安排常规、小型和迷你控件的位置与间距,并通过空白、分隔线或分组框组织控件,确保界面简洁一致;在工具栏设计上,应基于用户的心智模型挑选并排序常用功能,合理区分全局与界面项,正确处理侧边栏和检查器的切换,注意标题、副标题、溢出优先级与居中项的使用,同时结合不同样式(统一、紧凑、扩展、偏好)以及底部栏、附加栏和系统内置特殊控件,实现美观、直观且高效的用户体验。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#353-2025.09.29.md b/Reports/2025/#353-2025.09.29.md new file mode 100644 index 000000000..3c889ce56 --- /dev/null +++ b/Reports/2025/#353-2025.09.29.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #353 | 2025-09-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/353.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [We Need to Talk About Observation](https://jaredsinclair.com/2025/09/10/observation.html) + +[@Smallfly](https://github.com/iostalks):这篇文章深度探讨了 Swift 观察机制的新旧范式更迭,从 `ObservableObject` + `Combine` 的旧时代到 `@Observable` 宏 + `Observations` 结构体的新生态,揭示了迁移过程中的关键挑战与设计考量。核心内容包括: + +- **旧范式的价值**:回顾 `@Published` + `Combine` 在对象间观察(如 `UserCoordinator` 与 `SyncEngine`)的简洁性——自动管理订阅生命周期、支持跨对象响应,为复杂业务逻辑提供低耦合解决方案。 +- **新范式的突破与局限**:分析 `@Observable` 宏在 SwiftUI 集成(属性访问优化、嵌套支持)的优势,同时指出 `withObservationTracking`(单次触发需递归调用)与 `Observations` 结构体(任务生命周期管理复杂)在非 UI 场景的不足——订阅取消需手动管理 `Task`、对象弱引用易出错。 +- **迁移建议**:强调选择方案时需超越 UI 层考量,关注业务逻辑中对象间观察的实际需求,避免因新特性的「表面简洁」忽略生命周期管理的潜在风险。 + +文章以开发者视角对比新旧机制的工程实践差异,为理解 Swift 观察体系演进提供了务实的参考。 + +### 🐕 [Xcode Migrations: From Stone Age to AI Mastery](https://medium.com/qonto-way/xcode-migrations-from-stone-age-to-ai-mastery-d2590657e809) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讲述了 Qonto 团队如何将 Xcode 升级从三周噩梦转变为一天自动化流程。 +**背景:** 60+ iOS 工程师团队面临 Xcode 升级瘫痪开发流程的问题,依赖管理冲突和构建失败频发。 +**核心改进:** +* **架构优化**:移除 CocoaPods,统一使用 Swift Package Manager +* **自动化监控**:Swift 构建的 Xcode Release Checker,CI 监控版本发布并 Slack 通知 +* **沟通策略**:建立迁移门户和可视化时间线,团队理解度从 33% 提升至 90% +* **CLI 工具**:Swift 自动化迁移流程,包括分支创建、构建清理、版本更新等 +* **AI 集成**:构建 Swift MCP 工具和 Xcode Migrator AI 助手,提供 24/7 技术支持 + +⠀**效果:** 迁移时间从 21+ 天缩短至 5 天(75% 减少),60+ 工程师零工作中断。通过持续改进理念,将最大痛点转化为竞争优势,目标进一步缩短至 1 小时。 + +### 🐢 [iOS Rendering Documentation](https://github.com/EthanArbuckle/ios-rendering-docs/blob/main/README.md) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这份文档深入剖析了 iOS 渲染系统的底层架构,详细阐述了从 UIView 到 CALayer、CAContext 再到 FBSScene 的完整渲染管道。文档特别解释了 Front Board Scene (FBS) 的工作机制以及 CAContext 的 contextID 如何用于跨进程 IPC 通信。内容涵盖了层级合成模型、场景管理、渲染同步、动画协调等核心概念,为理解 iOS 图形系统提供了前所未有的技术深度。对于需要进行系统级渲染研究、性能优化或底层拦截开发的高级 iOS 开发者来说,这是一份极其宝贵的参考资料。 + +### 🐎 [Should you opt-in to Swift 6.2 ’ s Main Actor isolation?](https://www.donnywals.com/should-you-opt-in-to-swift-6-2s-main-actor-isolation/) + +[@DylanYang](https://github.com/Dylan19Yang):Xcode26 为工程带来了新的 actor 隔离默认配置值,允许全局的代码默认运行在 main actor 上。作者通过一些 demo 讲述了启动此配置后能帮助我们简化大量的标记 @MainActor 的代码,降低了并发代码的复杂度。同时作者建议大部分情况下可以默认开启此配置,并通过 @concurrent 标记来让特定代码去后台线程运行。感兴趣的开发者可以阅读本文详细了解下开关带来的实际影响。 + +### 🐎 [Flutter 官方 LLM 动态 UI 库 flutter_genui 发布,让 App UI 自己生成 UI](https://mp.weixin.qq.com/s/zrmuFMvcQDPUyun9c_N_Iw) + +[@Crazy](https://github.com/jiyan135960):现今在开发者领域 AI 已经进入了日常开发的方方面面,AI 生成 UI 也是大模型落地的一个方面,Flutter 官方更是开发了一个可以利用大模型动态生成 UI 的库,该库用“受控、可组合、可回传状态”的运行时 UI 替代文本,显著提升 AI 交互质量,并且与主流 LLM 框架的顺滑对接。但是更新也更加频繁,UI 的更新消耗也是很大的。该库主要的五个概念分别为 :UiAgent、Widget Catalog、AiClient、GenUiManager、GenUiSurface。关于具体的生成,可以看文章中的实例与图片演示。文章中提到的 Filebase 与 Gemini,都是由 Google 开发的,对国内开发者都不是很友好。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#354-2025.10.13.md b/Reports/2025/#354-2025.10.13.md new file mode 100644 index 000000000..b43358cd9 --- /dev/null +++ b/Reports/2025/#354-2025.10.13.md @@ -0,0 +1,66 @@ +# 老司机 iOS 周报 #354 | 2025-10-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/354.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Understanding Deflate](https://jjrscott.com/to-deflate-or-not/) + +[@xiaofei86](https://github.com/xiaofei86):本文通过手工解码一个 gzip 文件,简单探究了其压缩算法 Deflate 的工作机制,Deflate 结合了 LZ77 算法与 Huffman 编码,通过用 “复制指令” 替代重复片段实现无损压缩。作者以字符串 "TOBEORNOTTOBEORTOBEORNOT" 为例,先解析 gzip 文件头尾结构,再根据 Deflate 规范逐位还原压缩块内容,实现了从 24 字节到 16 字节的压缩。感兴趣的同学可以阅读更多文章了解 ~ + +## 文章 + +### 🐢 [Code along with the Foundation Models framework](https://developer.apple.com/videos/play/meet-with-apple/205/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Apple 在 WWDC 2025 推出的 **Foundation Models 框架**,展示了如何在 iOS 与 macOS 应用中直接调用系统内置的大语言模型,实现真正的 **on-device AI**。通过一个“旅行行程生成器”的示例,作者带你一步步完成从文本生成到结构化输出的全过程,深入展示 Apple Intelligence 的开发潜力。 + +主要亮点包括: + +- 隐私与安全:模型完全在设备上运行,无需上传数据或调用云端接口。 +- 结构化输出:利用 `@Generable` 让模型直接生成 Swift 类型的数据,而非普通文本。 +- 提示优化技巧:通过 instructions、示例(one-shot)提升输出质量与稳定性。 +- 流式响应:实时展示生成过程,让用户体验更自然流畅。 +- 工具调用(Tool Calling):让模型能主动调用外部函数或服务,融合实时数据与智能生成。 + +这篇文章不仅是一份技术指南,更是 Apple 对 AI 未来方向的实践展示。 +它强调 **隐私优先、系统原生、开发高效** 的理念,是每位希望深入了解 Apple Intelligence 的开发者必读之作。 + + +### 🐎 [Enabling enhanced security for your app](https://developer.apple.com/documentation/Xcode/enabling-enhanced-security-for-your-app) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了如何在 Xcode 中为应用启用增强安全性的方法,包括启用地址空间布局随机化(ASLR)、栈保护、堆保护、整数溢出检查和缓冲区溢出检查等编译器安全功能,以防御常见漏洞并提升应用抗攻击能力。 + + +### 🐕 [How to install Xcode 26's Metal Toolchain on CI/CD](https://www.polpiella.dev/metal-toolchain-ci-cd/) + +[@Barney](https://github.com/BarneyZhaoooo):我来帮您获取并总结这篇文章的内容。这篇文章介绍了 Xcode 26 不再默认包含 Metal 工具链的问题及解决方案。在本地开发时可通过 Xcode 偏好设置安装,但在 CI/CD 环境(包括 Xcode Cloud)中需要使用 xcodebuild 命令行工具手动下载和安装。文章提供了具体的脚本代码,建议在 Xcode Cloud 中作为 post clone 脚本运行。 + +## 工具 + +### [swift-profile-recorder](https://swiftpackageindex.com/apple/swift-profile-recorder) +[@Smallfly](https://github.com/iostalks):Swift Profile Recorder 是一款「进程内」采样分析器,专为受限容器环境而生:不需要 CAP_SYS_PTRACE,就能在 Linux 与 macOS 上抓取 on-CPU 与 off-CPU 样本,定位真实的性能瓶颈。你只需以 Swift 包集成并启用内置服务器,即可用一次 `curl` 拿到已符号化的 Linux perf 格式数据,直接拖到 Speedscope / Firefox Profiler 或用 FlameGraph 生成火焰图。集成轻量、开销可控,特别适合线上 Kubernetes/Docker 场景的故障排查与持续优化。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#355-2025.10.20.md b/Reports/2025/#355-2025.10.20.md new file mode 100644 index 000000000..ed911ebf9 --- /dev/null +++ b/Reports/2025/#355-2025.10.20.md @@ -0,0 +1,76 @@ +# 老司机 iOS 周报 #355 | 2025-10-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/355.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [使用 @_private(sourceFile:) 测试 Swift 私有成员](https://kyleye.top/posts/swift-private-imports/) + +[@阿权](https://github.com/bqlin):私有成员一直是单元测试的难题,以往的做法要么公开其成员,要么封装供测试的接口,本文提出可以用 `@_private(sourceFile:)` 测试私有成员。该标识是非公开 API,是编译器专用的接口,可绕过访问控制。不过前提需要为目标模块添加编译标志 `-enable-private-imports`,允许其私有成员被外部测试访问,并需用条件编译宏包裹,以防后续编译器更新导致 API 不可用。 + +通过这种方式,可以在完全不修改原有接口的前提下自由地编写单元测试代码。 + +### [Building 17 Agentic AI Patterns and Their Role in Large-Scale AI Systems](https://levelup.gitconnected.com/building-17-agentic-ai-patterns-and-their-role-in-large-scale-ai-systems-f4915b5615ce) + +[@EyreFree](https://github.com/EyreFree):本文聚焦大规模 AI 系统构建,提出 17 种智能体架构及应用场景,含多智能体系统、集成决策、思维树(ToT)等。以 LangChain、LangGraph、LangSmith 为工具栈,详细解析各架构实现流程,如反思架构通过生成 - 批判 - 优化提升输出质量,ReAct 架构借 “思考 - 行动 - 观察” 循环解决多步骤问题,PEV 架构增验证环节应对工具失效。还介绍组合架构思路,强调不同架构协同可实现复杂任务,且附 GitHub 代码库供实践,为大规模 AI 系统开发提供全面参考,在做 AI 相关开发的同学可以看看。 + +### 🐎 [iOS 26 你的 property 崩了吗?](https://mp.weixin.qq.com/s/6jxpWDq4JWTpKmmCx3S3XA) + +[@Kyle-Ye](https://github.com/Kyle-Ye): iOS 26 Runtime 在 `objc_storeStrong` 实现中引入了哨兵值机制(0x400000000000bad0),主动暴露 nonatomic 属性的并发访问问题。新实现在写入新值之前,会先向属性地址写入哨兵值,创建一个"危险窗口"。任何在此窗口期间的并发读写操作都会必然触发 EXC_BAD_ACCESS 崩溃,而不再依赖于对象引用计数等不确定因素。文章详细剖析了写写并发(objc_release 崩溃)和读写并发(objc_retain 崩溃)两种典型场景,并介绍了快手自研的 Ekko 安全气垫框架如何通过兜底 Mach 异常来进行崩溃止损。对于维护线上 App 稳定性的开发者来说,这个系统级变更影响全量版本,建议重点关注 nonatomic 属性的线程安全问题,必要时改用 atomic 或添加额外的安全气垫机制进行兜底。 + +### 🐕 [Build Your First 24/7 Agentic Loop](https://wezzard.com/post/2025/09/build-your-first-agentic-loop-9d22/) + +[@Cooper Chen](https://github.com/cjlcooper):如果你想了解“ AI Agent 是否能真正实现持续自主执行任务”,WeZZard 的文章与配套项目是极具价值的入门参考。 + +该文章提出了一个极简且可工程化复用的方法论: +**Contract(合同)+ Loop(循环)+ Runtime(运行时)**。借助高阶模型(如 Claude 4 或未来的 GPT-5),通过结构化 JSON 协议与工具调用,系统即可在评估者(Evaluator)与执行者(Executor)之间持续推进任务,实现 24/7 agentic 工作流。 + +配套开源仓库 [《agentic-loop-playground》](https://github.com/WeZZard/agentic-loop-playground)实现了一个完整示例: + +- 自动扫描并处理代码中的 `TODO/FIXME` +- evaluator 决策,executor 执行 +- 循环驱动任务直至完成 + +这是一种无需复杂框架即可落地的智能代理构建方式,非常适合开发者快速启动个人或团队级 Agent 流程。 + +### 🐕 [Understanding Live Activities: visual micro-storytelling](https://www.createwithswift.com/understanding-live-activities-visual-micro-storytelling/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章是关于 iOS 16 引入的 Live Activities(实时活动)功能的设计指南。 + +- **Live Activities 是**一种实时微界面,可以在锁屏、灵动岛等处显示应用动态更新。适用于有时间敏感、状态变化的任务,例如: + - **状态跟踪**:如外卖配送、出行导航。 + - **计时器**:如烹饪、停车计时。 + - **阶段进程**:如电商订单进度。 + - **实时更新**:如体育比赛得分。 +- **不适用情况**:静态信息(如天气温度)或非关键更新(如社交点赞),应使用通知或小组件。 + +Live Activities 的核心是帮助用户快速获取关键动态信息,减少频繁打开应用的需要。设计时应以用户需求为中心,避免滥用。 + +### 🐎 [iOS 17 + SwiftUI TextField 内存泄漏分析](https://kyleye.top/posts/swiftui-textfield-memory-leak/) + +[@DylanYang](https://github.com/Dylan19Yang):iOS 17 引入的 AutoFillUI 框架使得在使用 UITextField 时会发生不预期的内存泄漏,当 UITextField 成为第一响应者且用户离开视图时就会发生。由于在 SwfitUI 中 TextField 可以通过 .environmentObject() 保持对大型对象图的引用,因此在 SwiftUI 中内存泄漏的问题会更严重一点。对问题起因和绕过方式感兴趣的同学可以阅读本文作进一步了解。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#356-2025.10.27.md b/Reports/2025/#356-2025.10.27.md new file mode 100644 index 000000000..4b631910c --- /dev/null +++ b/Reports/2025/#356-2025.10.27.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #356 | 2025-10-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +> 行业相关的新闻、趣事、看法 + +##  Developer - 设计开发加速器 + +> 设计开发加速器相关活动 + +## 新手推荐 + +> 收集一些对新手友好且质量不错的文章 + +## 文章 + +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 + + +### 🐕 [Why a custom ViewModifier is often useless](https://www.swiftwithvincent.com/blog/why-a-custom-viewmodifier-is-often-useless) + +[@Barney](https://github.com/BarneyZhaoooo):文章主要阐述何时需要创建自定义 `ViewModifier`。作者指出,若只需封装不涉及 `@State` 或 `@Environment` 的修饰符,直接使用 `View` 扩展方法即可,无需创建 `ViewModifier` 结构体。仅当需要管理状态或使用属性包装器时,才必须创建 `ViewModifier` 以正确处理这些需求。简而言之,`ViewModifier` 并非总是必需的,应根据实际需求选择合适的实现方式。 + +### 🐎 [How to hide a view in a screenshot](https://www.swiftwithvincent.com/blog/how-to-hide-a-view-in-a-screenshot) + +[@david-clang](https://github.com/david-clang):作者利用 UITextField 在 isSecureTextEntry = true 时自带的“截图防泄露”机制,将需要隐藏的视图嵌入其安全子视图中,从而实现内容在截图与录屏时自动隐藏的效果,作者还用 UIViewRepresentable 封装出 .hideInScreenshot() 修饰符,让 SwiftUI 也能轻松实现防截图效果。 + +## 工具 + +> 开发过程中常用的工具,及一些新工具的介绍 + +## 代码 + +> 库,代码段,开源app + +## 书 + +> 比较不错的书的推荐和书评 + +## 音视频 + +> 比较不错的书的推荐和书评 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/assets/author/BluesJiang.jpeg b/assets/author/BluesJiang.jpeg new file mode 100644 index 000000000..012eba5e5 Binary files /dev/null and b/assets/author/BluesJiang.jpeg differ diff --git a/assets/author/CooperChen.png b/assets/author/CooperChen.png new file mode 100644 index 000000000..ca37d5552 Binary files /dev/null and b/assets/author/CooperChen.png differ diff --git a/assets/author/David.png b/assets/author/David.png new file mode 100644 index 000000000..8088fb19a Binary files /dev/null and b/assets/author/David.png differ diff --git a/assets/author/DylanYang.png b/assets/author/DylanYang.png new file mode 100644 index 000000000..09015f813 Binary files /dev/null and b/assets/author/DylanYang.png differ diff --git a/assets/author/Kyle-Ye.png b/assets/author/Kyle-Ye.png new file mode 100644 index 000000000..4db60d13a Binary files /dev/null and b/assets/author/Kyle-Ye.png differ diff --git a/assets/author/bq.png b/assets/author/bq.png new file mode 100644 index 000000000..253524785 Binary files /dev/null and b/assets/author/bq.png differ diff --git a/assets/author/jiyan135960.png b/assets/author/jiyan135960.png new file mode 100644 index 000000000..fc4cbb9e3 Binary files /dev/null and b/assets/author/jiyan135960.png differ diff --git a/assets/author/zoeGuo.png b/assets/author/zoeGuo.png new file mode 100644 index 000000000..67999d1ba Binary files /dev/null and b/assets/author/zoeGuo.png differ diff --git a/assets/weekly-header/247.png b/assets/weekly-header/247.png new file mode 100644 index 000000000..f78c99879 Binary files /dev/null and b/assets/weekly-header/247.png differ diff --git a/assets/weekly-header/248.jpg b/assets/weekly-header/248.jpg new file mode 100644 index 000000000..e60a5ce15 Binary files /dev/null and b/assets/weekly-header/248.jpg differ diff --git a/assets/weekly-header/249.png b/assets/weekly-header/249.png new file mode 100644 index 000000000..88987a7e5 Binary files /dev/null and b/assets/weekly-header/249.png differ diff --git a/assets/weekly-header/250.png b/assets/weekly-header/250.png new file mode 100644 index 000000000..838b191cd Binary files /dev/null and b/assets/weekly-header/250.png differ diff --git a/assets/weekly-header/251.png b/assets/weekly-header/251.png new file mode 100644 index 000000000..5dc929959 Binary files /dev/null and b/assets/weekly-header/251.png differ diff --git a/assets/weekly-header/252.png b/assets/weekly-header/252.png new file mode 100644 index 000000000..6117c6cf1 Binary files /dev/null and b/assets/weekly-header/252.png differ diff --git a/assets/weekly-header/253.png b/assets/weekly-header/253.png new file mode 100644 index 000000000..982579206 Binary files /dev/null and b/assets/weekly-header/253.png differ diff --git a/assets/weekly-header/254.png b/assets/weekly-header/254.png new file mode 100644 index 000000000..bb97c97d5 Binary files /dev/null and b/assets/weekly-header/254.png differ diff --git a/assets/weekly-header/255.png b/assets/weekly-header/255.png new file mode 100644 index 000000000..45184461b Binary files /dev/null and b/assets/weekly-header/255.png differ diff --git a/assets/weekly-header/256.png b/assets/weekly-header/256.png new file mode 100644 index 000000000..49f833653 Binary files /dev/null and b/assets/weekly-header/256.png differ diff --git a/assets/weekly-header/257.png b/assets/weekly-header/257.png new file mode 100644 index 000000000..49a9f6424 Binary files /dev/null and b/assets/weekly-header/257.png differ diff --git a/assets/weekly-header/258.png b/assets/weekly-header/258.png new file mode 100644 index 000000000..f1a0ad54a Binary files /dev/null and b/assets/weekly-header/258.png differ diff --git a/assets/weekly-header/259.png b/assets/weekly-header/259.png new file mode 100644 index 000000000..557dc925f Binary files /dev/null and b/assets/weekly-header/259.png differ diff --git a/assets/weekly-header/260.png b/assets/weekly-header/260.png new file mode 100644 index 000000000..469ec07c4 Binary files /dev/null and b/assets/weekly-header/260.png differ diff --git a/assets/weekly-header/261.png b/assets/weekly-header/261.png new file mode 100644 index 000000000..8943d46b9 Binary files /dev/null and b/assets/weekly-header/261.png differ diff --git a/assets/weekly-header/262.png b/assets/weekly-header/262.png new file mode 100644 index 000000000..6be9e8b00 Binary files /dev/null and b/assets/weekly-header/262.png differ diff --git a/assets/weekly-header/263.png b/assets/weekly-header/263.png new file mode 100644 index 000000000..e78b1a665 Binary files /dev/null and b/assets/weekly-header/263.png differ diff --git a/assets/weekly-header/264.png b/assets/weekly-header/264.png new file mode 100644 index 000000000..15d4e6473 Binary files /dev/null and b/assets/weekly-header/264.png differ diff --git a/assets/weekly-header/265.png b/assets/weekly-header/265.png new file mode 100644 index 000000000..0b0443b1a Binary files /dev/null and b/assets/weekly-header/265.png differ diff --git a/assets/weekly-header/266.jpg b/assets/weekly-header/266.jpg new file mode 100644 index 000000000..3084daa51 Binary files /dev/null and b/assets/weekly-header/266.jpg differ diff --git a/assets/weekly-header/267.jpg b/assets/weekly-header/267.jpg new file mode 100644 index 000000000..93f41d359 Binary files /dev/null and b/assets/weekly-header/267.jpg differ diff --git a/assets/weekly-header/268.jpg b/assets/weekly-header/268.jpg new file mode 100644 index 000000000..1439055d3 Binary files /dev/null and b/assets/weekly-header/268.jpg differ diff --git a/assets/weekly-header/269.jpg b/assets/weekly-header/269.jpg new file mode 100644 index 000000000..82457ca36 Binary files /dev/null and b/assets/weekly-header/269.jpg differ diff --git a/assets/weekly-header/270.jpg b/assets/weekly-header/270.jpg new file mode 100644 index 000000000..d28fa2f1f Binary files /dev/null and b/assets/weekly-header/270.jpg differ diff --git a/assets/weekly-header/271.jpg b/assets/weekly-header/271.jpg new file mode 100644 index 000000000..ffa28e54b Binary files /dev/null and b/assets/weekly-header/271.jpg differ diff --git a/assets/weekly-header/272.jpg b/assets/weekly-header/272.jpg new file mode 100644 index 000000000..f5e85d481 Binary files /dev/null and b/assets/weekly-header/272.jpg differ diff --git a/assets/weekly-header/273.jpg b/assets/weekly-header/273.jpg new file mode 100644 index 000000000..239928c04 Binary files /dev/null and b/assets/weekly-header/273.jpg differ diff --git a/assets/weekly-header/274.jpg b/assets/weekly-header/274.jpg new file mode 100644 index 000000000..7cf72d4ec Binary files /dev/null and b/assets/weekly-header/274.jpg differ diff --git a/assets/weekly-header/275.jpg b/assets/weekly-header/275.jpg new file mode 100644 index 000000000..94db58835 Binary files /dev/null and b/assets/weekly-header/275.jpg differ diff --git a/assets/weekly-header/276.jpg b/assets/weekly-header/276.jpg new file mode 100644 index 000000000..d6da4c89a Binary files /dev/null and b/assets/weekly-header/276.jpg differ diff --git a/assets/weekly-header/277.jpg b/assets/weekly-header/277.jpg new file mode 100644 index 000000000..ef7e00f00 Binary files /dev/null and b/assets/weekly-header/277.jpg differ diff --git a/assets/weekly-header/278.jpg b/assets/weekly-header/278.jpg new file mode 100644 index 000000000..690816b76 Binary files /dev/null and b/assets/weekly-header/278.jpg differ diff --git a/assets/weekly-header/279.jpg b/assets/weekly-header/279.jpg new file mode 100644 index 000000000..6186d672a Binary files /dev/null and b/assets/weekly-header/279.jpg differ diff --git a/assets/weekly-header/280.jpg b/assets/weekly-header/280.jpg new file mode 100644 index 000000000..a1a4fc4ff Binary files /dev/null and b/assets/weekly-header/280.jpg differ diff --git a/assets/weekly-header/281.jpg b/assets/weekly-header/281.jpg new file mode 100644 index 000000000..a7f090a07 Binary files /dev/null and b/assets/weekly-header/281.jpg differ diff --git a/assets/weekly-header/282.jpg b/assets/weekly-header/282.jpg new file mode 100644 index 000000000..f4e2c0f0e Binary files /dev/null and b/assets/weekly-header/282.jpg differ diff --git a/assets/weekly-header/283.jpg b/assets/weekly-header/283.jpg new file mode 100644 index 000000000..b43dd535c Binary files /dev/null and b/assets/weekly-header/283.jpg differ diff --git a/assets/weekly-header/284.jpg b/assets/weekly-header/284.jpg new file mode 100644 index 000000000..dc8f08a8a Binary files /dev/null and b/assets/weekly-header/284.jpg differ diff --git a/assets/weekly-header/285.jpg b/assets/weekly-header/285.jpg new file mode 100644 index 000000000..ac7a61dba Binary files /dev/null and b/assets/weekly-header/285.jpg differ diff --git a/assets/weekly-header/286.jpg b/assets/weekly-header/286.jpg new file mode 100644 index 000000000..2714a7784 Binary files /dev/null and b/assets/weekly-header/286.jpg differ diff --git a/assets/weekly-header/287.jpg b/assets/weekly-header/287.jpg new file mode 100644 index 000000000..f9a48647a Binary files /dev/null and b/assets/weekly-header/287.jpg differ diff --git a/assets/weekly-header/288.jpg b/assets/weekly-header/288.jpg new file mode 100644 index 000000000..b41d47e1f Binary files /dev/null and b/assets/weekly-header/288.jpg differ diff --git a/assets/weekly-header/289.jpg b/assets/weekly-header/289.jpg new file mode 100644 index 000000000..54b41fe11 Binary files /dev/null and b/assets/weekly-header/289.jpg differ diff --git a/assets/weekly-header/290.jpg b/assets/weekly-header/290.jpg new file mode 100644 index 000000000..18da7e552 Binary files /dev/null and b/assets/weekly-header/290.jpg differ diff --git a/assets/weekly-header/291.jpg b/assets/weekly-header/291.jpg new file mode 100644 index 000000000..567ed5f60 Binary files /dev/null and b/assets/weekly-header/291.jpg differ diff --git a/assets/weekly-header/292.jpg b/assets/weekly-header/292.jpg new file mode 100644 index 000000000..c8b71fff9 Binary files /dev/null and b/assets/weekly-header/292.jpg differ diff --git a/assets/weekly-header/293.jpg b/assets/weekly-header/293.jpg new file mode 100644 index 000000000..f570fefa4 Binary files /dev/null and b/assets/weekly-header/293.jpg differ diff --git a/assets/weekly-header/294.jpg b/assets/weekly-header/294.jpg new file mode 100644 index 000000000..174b5f3a3 Binary files /dev/null and b/assets/weekly-header/294.jpg differ diff --git a/assets/weekly-header/295.jpg b/assets/weekly-header/295.jpg new file mode 100644 index 000000000..b5db3f3f5 Binary files /dev/null and b/assets/weekly-header/295.jpg differ diff --git a/assets/weekly-header/296.jpg b/assets/weekly-header/296.jpg new file mode 100644 index 000000000..49c0a5b3a Binary files /dev/null and b/assets/weekly-header/296.jpg differ diff --git a/assets/weekly-header/297.jpg b/assets/weekly-header/297.jpg new file mode 100644 index 000000000..285529ed3 Binary files /dev/null and b/assets/weekly-header/297.jpg differ diff --git a/assets/weekly-header/298.jpg b/assets/weekly-header/298.jpg new file mode 100644 index 000000000..2c18d08d1 Binary files /dev/null and b/assets/weekly-header/298.jpg differ diff --git a/assets/weekly-header/299.jpg b/assets/weekly-header/299.jpg new file mode 100644 index 000000000..aa08057e2 Binary files /dev/null and b/assets/weekly-header/299.jpg differ diff --git a/assets/weekly-header/300.jpg b/assets/weekly-header/300.jpg new file mode 100644 index 000000000..7fb5a3808 Binary files /dev/null and b/assets/weekly-header/300.jpg differ diff --git a/assets/weekly-header/301.jpg b/assets/weekly-header/301.jpg new file mode 100644 index 000000000..ed99022d2 Binary files /dev/null and b/assets/weekly-header/301.jpg differ diff --git a/assets/weekly-header/302.jpg b/assets/weekly-header/302.jpg new file mode 100644 index 000000000..cfef34d4c Binary files /dev/null and b/assets/weekly-header/302.jpg differ diff --git a/assets/weekly-header/303.jpg b/assets/weekly-header/303.jpg new file mode 100644 index 000000000..ffd9fb972 Binary files /dev/null and b/assets/weekly-header/303.jpg differ diff --git a/assets/weekly-header/304.jpg b/assets/weekly-header/304.jpg new file mode 100644 index 000000000..028b52e6d Binary files /dev/null and b/assets/weekly-header/304.jpg differ diff --git a/assets/weekly-header/305.jpg b/assets/weekly-header/305.jpg new file mode 100644 index 000000000..df0602e7c Binary files /dev/null and b/assets/weekly-header/305.jpg differ diff --git a/assets/weekly-header/306.jpg b/assets/weekly-header/306.jpg new file mode 100644 index 000000000..e218bed09 Binary files /dev/null and b/assets/weekly-header/306.jpg differ diff --git a/assets/weekly-header/307.jpg b/assets/weekly-header/307.jpg new file mode 100644 index 000000000..4647ccbc4 Binary files /dev/null and b/assets/weekly-header/307.jpg differ diff --git a/assets/weekly-header/308.jpg b/assets/weekly-header/308.jpg new file mode 100644 index 000000000..59cdbd96e Binary files /dev/null and b/assets/weekly-header/308.jpg differ diff --git a/assets/weekly-header/309.jpg b/assets/weekly-header/309.jpg new file mode 100644 index 000000000..5b31c9cb4 Binary files /dev/null and b/assets/weekly-header/309.jpg differ diff --git a/assets/weekly-header/310.jpg b/assets/weekly-header/310.jpg new file mode 100644 index 000000000..3e56eac59 Binary files /dev/null and b/assets/weekly-header/310.jpg differ diff --git a/assets/weekly-header/311.jpg b/assets/weekly-header/311.jpg new file mode 100644 index 000000000..c937879f2 Binary files /dev/null and b/assets/weekly-header/311.jpg differ diff --git a/assets/weekly-header/312.jpg b/assets/weekly-header/312.jpg new file mode 100644 index 000000000..b34761f55 Binary files /dev/null and b/assets/weekly-header/312.jpg differ diff --git a/assets/weekly-header/313.jpg b/assets/weekly-header/313.jpg new file mode 100644 index 000000000..b888efbdf Binary files /dev/null and b/assets/weekly-header/313.jpg differ diff --git a/assets/weekly-header/314.jpg b/assets/weekly-header/314.jpg new file mode 100644 index 000000000..fb788ebb3 Binary files /dev/null and b/assets/weekly-header/314.jpg differ diff --git a/assets/weekly-header/315.jpg b/assets/weekly-header/315.jpg new file mode 100644 index 000000000..2f4e3b3df Binary files /dev/null and b/assets/weekly-header/315.jpg differ diff --git a/assets/weekly-header/316.jpg b/assets/weekly-header/316.jpg new file mode 100644 index 000000000..d5b89b777 Binary files /dev/null and b/assets/weekly-header/316.jpg differ diff --git a/assets/weekly-header/317.jpg b/assets/weekly-header/317.jpg new file mode 100644 index 000000000..45fa6c559 Binary files /dev/null and b/assets/weekly-header/317.jpg differ diff --git a/assets/weekly-header/318.jpg b/assets/weekly-header/318.jpg new file mode 100644 index 000000000..ee4c5b4ae Binary files /dev/null and b/assets/weekly-header/318.jpg differ diff --git a/assets/weekly-header/319.jpg b/assets/weekly-header/319.jpg new file mode 100644 index 000000000..e3c365859 Binary files /dev/null and b/assets/weekly-header/319.jpg differ diff --git a/assets/weekly-header/320.jpg b/assets/weekly-header/320.jpg new file mode 100644 index 000000000..809bef0d7 Binary files /dev/null and b/assets/weekly-header/320.jpg differ diff --git a/assets/weekly-header/321.jpg b/assets/weekly-header/321.jpg new file mode 100644 index 000000000..ed22f88b1 Binary files /dev/null and b/assets/weekly-header/321.jpg differ diff --git a/assets/weekly-header/322.jpg b/assets/weekly-header/322.jpg new file mode 100644 index 000000000..acd90bd2f Binary files /dev/null and b/assets/weekly-header/322.jpg differ diff --git a/assets/weekly-header/323.jpg b/assets/weekly-header/323.jpg new file mode 100644 index 000000000..b81ccd013 Binary files /dev/null and b/assets/weekly-header/323.jpg differ diff --git a/assets/weekly-header/324.jpg b/assets/weekly-header/324.jpg new file mode 100644 index 000000000..44f617d25 Binary files /dev/null and b/assets/weekly-header/324.jpg differ diff --git a/assets/weekly-header/325.jpg b/assets/weekly-header/325.jpg new file mode 100644 index 000000000..93afdf2c4 Binary files /dev/null and b/assets/weekly-header/325.jpg differ diff --git a/assets/weekly-header/326.jpg b/assets/weekly-header/326.jpg new file mode 100644 index 000000000..732180aea Binary files /dev/null and b/assets/weekly-header/326.jpg differ diff --git a/assets/weekly-header/327.jpg b/assets/weekly-header/327.jpg new file mode 100644 index 000000000..593fe8223 Binary files /dev/null and b/assets/weekly-header/327.jpg differ diff --git a/assets/weekly-header/328.jpg b/assets/weekly-header/328.jpg new file mode 100644 index 000000000..50ac028b5 Binary files /dev/null and b/assets/weekly-header/328.jpg differ diff --git a/assets/weekly-header/329.jpg b/assets/weekly-header/329.jpg new file mode 100644 index 000000000..8c2b6bc22 Binary files /dev/null and b/assets/weekly-header/329.jpg differ diff --git a/assets/weekly-header/330.jpg b/assets/weekly-header/330.jpg new file mode 100644 index 000000000..4474e7444 Binary files /dev/null and b/assets/weekly-header/330.jpg differ diff --git a/assets/weekly-header/331.jpg b/assets/weekly-header/331.jpg new file mode 100644 index 000000000..7fff179e4 Binary files /dev/null and b/assets/weekly-header/331.jpg differ diff --git a/assets/weekly-header/332.jpg b/assets/weekly-header/332.jpg new file mode 100644 index 000000000..b6ea59968 Binary files /dev/null and b/assets/weekly-header/332.jpg differ diff --git a/assets/weekly-header/333.jpg b/assets/weekly-header/333.jpg new file mode 100644 index 000000000..4b206a1d4 Binary files /dev/null and b/assets/weekly-header/333.jpg differ diff --git a/assets/weekly-header/334.jpg b/assets/weekly-header/334.jpg new file mode 100644 index 000000000..1e6ca69e1 Binary files /dev/null and b/assets/weekly-header/334.jpg differ diff --git a/assets/weekly-header/335.jpg b/assets/weekly-header/335.jpg new file mode 100644 index 000000000..86f00128a Binary files /dev/null and b/assets/weekly-header/335.jpg differ diff --git a/assets/weekly-header/336.jpg b/assets/weekly-header/336.jpg new file mode 100644 index 000000000..c895b1d64 Binary files /dev/null and b/assets/weekly-header/336.jpg differ diff --git a/assets/weekly-header/337.jpg b/assets/weekly-header/337.jpg new file mode 100644 index 000000000..0be4a141f Binary files /dev/null and b/assets/weekly-header/337.jpg differ diff --git a/assets/weekly-header/338.jpg b/assets/weekly-header/338.jpg new file mode 100644 index 000000000..bfc85bba4 Binary files /dev/null and b/assets/weekly-header/338.jpg differ diff --git a/assets/weekly-header/339.jpg b/assets/weekly-header/339.jpg new file mode 100644 index 000000000..9fe318572 Binary files /dev/null and b/assets/weekly-header/339.jpg differ diff --git a/assets/weekly-header/340.jpg b/assets/weekly-header/340.jpg new file mode 100644 index 000000000..ad8fb7b90 Binary files /dev/null and b/assets/weekly-header/340.jpg differ diff --git a/assets/weekly-header/341.jpg b/assets/weekly-header/341.jpg new file mode 100644 index 000000000..5e35e310f Binary files /dev/null and b/assets/weekly-header/341.jpg differ diff --git a/assets/weekly-header/342.jpg b/assets/weekly-header/342.jpg new file mode 100644 index 000000000..c8eef5c08 Binary files /dev/null and b/assets/weekly-header/342.jpg differ diff --git a/assets/weekly-header/343.jpg b/assets/weekly-header/343.jpg new file mode 100644 index 000000000..cf5dd8792 Binary files /dev/null and b/assets/weekly-header/343.jpg differ diff --git a/assets/weekly-header/344.jpg b/assets/weekly-header/344.jpg new file mode 100644 index 000000000..5c166bd56 Binary files /dev/null and b/assets/weekly-header/344.jpg differ diff --git a/assets/weekly-header/345.jpg b/assets/weekly-header/345.jpg new file mode 100644 index 000000000..45cfc0965 Binary files /dev/null and b/assets/weekly-header/345.jpg differ diff --git a/assets/weekly-header/346.jpg b/assets/weekly-header/346.jpg new file mode 100644 index 000000000..98d0d140d Binary files /dev/null and b/assets/weekly-header/346.jpg differ diff --git a/assets/weekly-header/347.jpg b/assets/weekly-header/347.jpg new file mode 100644 index 000000000..daac64e59 Binary files /dev/null and b/assets/weekly-header/347.jpg differ diff --git a/assets/weekly-header/348.jpg b/assets/weekly-header/348.jpg new file mode 100644 index 000000000..721b2bd4e Binary files /dev/null and b/assets/weekly-header/348.jpg differ diff --git a/assets/weekly-header/349.jpg b/assets/weekly-header/349.jpg new file mode 100644 index 000000000..284ceb65d Binary files /dev/null and b/assets/weekly-header/349.jpg differ diff --git a/assets/weekly-header/350.jpg b/assets/weekly-header/350.jpg new file mode 100644 index 000000000..f33e3c42b Binary files /dev/null and b/assets/weekly-header/350.jpg differ diff --git a/assets/weekly-header/351.jpg b/assets/weekly-header/351.jpg new file mode 100644 index 000000000..52b95b9dd Binary files /dev/null and b/assets/weekly-header/351.jpg differ diff --git a/assets/weekly-header/352.jpg b/assets/weekly-header/352.jpg new file mode 100644 index 000000000..0c9197d69 Binary files /dev/null and b/assets/weekly-header/352.jpg differ diff --git a/assets/weekly-header/353.jpg b/assets/weekly-header/353.jpg new file mode 100644 index 000000000..76f498d53 Binary files /dev/null and b/assets/weekly-header/353.jpg differ diff --git a/assets/weekly-header/354.jpg b/assets/weekly-header/354.jpg new file mode 100644 index 000000000..ac1727dff Binary files /dev/null and b/assets/weekly-header/354.jpg differ diff --git a/assets/weekly-header/355.jpg b/assets/weekly-header/355.jpg new file mode 100644 index 000000000..2f0514442 Binary files /dev/null and b/assets/weekly-header/355.jpg differ diff --git a/assets/weekly-header/356.jpg b/assets/weekly-header/356.jpg new file mode 100644 index 000000000..fcd5d2ca5 Binary files /dev/null and b/assets/weekly-header/356.jpg differ diff --git a/assets/weekly-header/357.jpg b/assets/weekly-header/357.jpg new file mode 100644 index 000000000..ede486ad2 Binary files /dev/null and b/assets/weekly-header/357.jpg differ