diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index c7623d1cf..000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.* linguist-language=Swift \ No newline at end of file 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/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" new file mode 100644 index 000000000..0ba1e2a95 --- /dev/null +++ "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" @@ -0,0 +1,63 @@ +# 老司机技术周报 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly-juejin.png?raw=true) + +老司机技术周报是一个由移动端技术爱好者组成的公益技术团体。经过近 4 年发展,编辑组已经聚集了 38 位 iOS 圈内一线开发者,成员来自各个城市,涵盖了互联网行业的各个头部企业。我们致力于在信息爆炸的时代将真正有价值的内容输送给读者,为社区发展注入一点活力,曾联合 SwiftGG 和知识小集等一起组织了近 4 年的《WWDC 内参》活动,GitHub、公众号和掘金等平台均拥有广大的读者群体,2018 年至今共发布周报 160 余期,各个渠道累计阅读量达 500 多万次,同时运营有总共超过 2500 多人的微信读者群。 + +## 周报 + +每周一期推荐优质内容的期刊是我们的核心内容,从 2018 年 1 月 1 号开始,至今已经发布 166 期。分发的平台不限制于 GitHub、公众号、微博、RSS、掘金和 CSDN 等。全平台累计阅读量达到 500 多万次,深受国内粉丝的喜爱,也与许多国内头部开发者保持着良好的关系。 + +## 线下沙龙 + +2021 年,我们组织了两场超百人规模的线下沙龙活动,活动均是免费参与,不仅邀请了国内外优秀开发者来做主题分享,并且为到场的开发者朋友准备了精美伴手礼和茶歇。 + +### WWDC21.T 沙龙 - 杭州场(7.3,阿里巴巴西溪园区) + +杭州场我们联合了阿里巴巴淘系技术团队共同主办了这次活动,总共放出 200 张免费门票,均是当天内售罄。现场实际到达 170 多位开发者朋友,我们进行了 4 场线下分享和 2 场线上分享。 + +![](https://uc334c8ab79b1c4b3d81b0fc923f.previews.dropboxusercontent.com/p/thumb/ABNZXEoLJWAh36QqNsDUd6vQooBZyJiXwtgECHBqM7top5xRs8gv32XTEaNgp8EUhzJxrp62Lv3XjQR7VI-n2IhWSnEaVuaOJ98DnS_gTvbQL3QZZlH41SQkRpDuucWB6Jaut8TKg453FTVGbpqrqNkdi_q8yq7GlF0rtRYHf7HrDKmZCsf4G2P8zwXbrQ90afvGnjR1ER3p_x-h_9LQklT2uarAzpr85wjYyP727wBrCQXzcNpSH6Gv57vvHDlKJRQeNKIFek2zMeXuZftmV0Vw1tm1hrpklVy-E0qldqL8OSc4vAqvCbsNlr30R8ljWyDQuRhWWwVN9MRI0pLGyHdLldkRkr8BXofzkHvUqZ_cT7bki-2NScLSMOJGx0TI_g1gROkqcdj4A42_A81Umac0hcXB83SvhvR0yGi4C7bpFA/p.jpeg?fv_content=true&size_mode=5) + +![](https://uce2dd3bb20b579695ded8aefdb0.previews.dropboxusercontent.com/p/thumb/ABPOBjVPXTGCOJQJ6_9-t1n7XjJ4mSZRz3vZ070M4KxJ3QbyzQkIBlqMsrvGNapyybQdiGzDliIUzXOCaF7O3tvJD9jcgiC1Fs4CR7JTEb3Qwtue5qwRVEguGDWEdgb_9lwIsm3ASr0H3KyfgWkGSNNtDoLPWDIgwmNZmqtSuUOwCpMsWO1UirZe6PQEFdsh1MdtRKZBsnQHUMjHnAds5OpdR3psNVcGeZrlXJlusTezUohD4vXtNXGLza7h1auMI_WP9c6RdBLM4jH7mcraSWouM_UxSuOLRViiqxvvEBozCSuHPDslyp4fj1NLHkVJWcVKyYoIT1UIJB7MU2NkAINNZl9IKrSiu-7OEEP0dAPYl9XXhmX0QfMBnNguUXuJMVjshY0LrYHXBeKu36nGzGPghRJ2kxafURqpjhXmfQsZkA/p.jpeg?fv_content=true&size_mode=5) + +![](https://uc26585f7d73e8bb22c06b641a1d.previews.dropboxusercontent.com/p/thumb/ABOiHH0KppG4K5wFbcf2CCmtgUKNpfxQopHCHiZHqGRhQhCiCawFKVxgHj1DDeI4uF3CejsnvGQhslkZLdqQrqy5sFTjaYlRuTEsUNo8lbT8Ag41gdSvPwsPHNLZq1OjHAMa7DEcRRX5wwvPME2Ke6nJU7WJ0zxFt5EBrJI_x2yaqrmuVksigjpkxN31u8SJdKVpbtD0oungrNgCj1eByLGzp0L9mMei0gm1Vrp7yzr1yYQWLIkMlNOesGNbwCQWlsCSA6Il7LQ0FgsR2Cu-V6oRq_iYDkDAWXfl9ekSuc31JzkbLEi5UqnEeLSY9HjdlsrVFcT4XkDLaSVzChM-im3EtxtBJSvSJrQO6blTg61lRULzBpTZ50uYI5cuFapf4vqV9HyPmJKH9oUc-SkZVSldXEsmSO0ZkX9lztOe_NnIqg/p.jpeg?size=2048x1536&size_mode=3) + +更多现场照片:https://www.dropbox.com/sh/oychqg41nwvrj6s/AAC1BJfCshRSWNtPhCbhwJRpa?dl=0 +分享主题与嘉宾介绍:https://mp.weixin.qq.com/s/7NnD0Co2Xd9WPk61yO1aHQ +录像及 slide(更新中):https://wudnh5f9ky.feishu.cn/drive/folder/fldcn6BBmquvtnUf7fKjKnaZBTf + +### WWDC21.T 沙龙 - 上海场(7.10,字节音乐上海部) + +上海场我们找到了字节音乐技术团队联合主办线下沙龙,总共放出了 160 张门票,几乎在半小时内就售罄了,并不断在后台收到读者朋友要求增加门票。现场实际到达约 120 多人。同样是 4 场线下分享(每个城市不同)和 2 场线上分享。 + +![](https://uc530b871cd4e8cd35aed9150cbb.previews.dropboxusercontent.com/p/thumb/ABPeyBLBfqMZawUbS713dhQGdX-jesGkfCJoJq2q4d1tROyFPjKMhjbMqMeSl2T8HOPPvvz9KgZbLAdhNIHeiKvUHDreBE1oJuN_Jqyp7QixlqBdqylp7owyjeQSvWtyy7JF_8UreTvfzWYpNUFVSbHUeMIKwFhAo61wH5ChUdqw25SuRYoC2O8qwd4fjH00EdXIWzmGIE5LAsg3x5kfY-Gddd8W-rNfUcwby1F323XFXW0Gq0X3oca-KBBjYTroPaB6Et0dYyext8LYcUGGq4bnxpbKotGjtWuJ4gzCPJfXG1BcNTJLxlBP7EC31XLSJN89x09SBEiAfZnnpWUgtizPghEujZR-I5ULBUbK5FZU8otUxSehdDKv2--2PH4oLGFBvvnXK2h6FddJlujCbGwjoLoQx34-X4m8UA6I6yu6e1KWrKZ_xY2NOLUqTuIy726jH2dBsBVzqG1bxvTfT9gn/p.jpeg?size=2048x1536&size_mode=3) + +![](https://uc301588ae5527d3969f4b8e2e4b.previews.dropboxusercontent.com/p/thumb/ABMOxBvq-Ix1GQWgUhrDJtZgpEfwAOsgXZc9-ah-CFNlScsrsYMRyKZSH4rKDjVjsEWO3_EJfZM_Z2zrNOX8hT4j3wIFpLMtsb_veke2UF1AkXAf6y-jPOJsn5W9Yq06gz_WHnjxe_yBz5XFRY8vObAucoWdUmm5jHYQAIY8SQk3Rt9dZ77db6rtxvJMFzYnKYlifhwTya5CBZPoEGoribhSoS4o9hEbsHg0Xhcc9P8YVF98Y6RPWpew2qX1mV1iR_5Bn1vEacJS7mXcPSqsVOClEl1L8fLz6U1PEr4WlKsnnOmAE-XlV84LLDAOtUTa26EpDuAZ7AUoEv-8h4Tbf1FrEyOeSEpTow-r5io63KbIN0qywLBsoUK9JTH1b4w468x1-SaZen-qhBcZ4bPyJz-D9A4QjEYu4AhdDb3FTS1K2XYozW8RLmJuHcXp-0RqUHYcvsXxSUOqpASwG6lX75JB/p.jpeg?size=2048x1536&size_mode=3) + +![](https://ucaf23691e0bc2191620b5ae26fa.previews.dropboxusercontent.com/p/thumb/ABOeh0JcG3l_Jlo05VbbgJcZ-CRJzZzcUiBgB3pfiU-F8cdA_ctmhK5c5leuHkXX88BF65b7AfAfnGYAUKQbP-BbtEVwscF6Bd3-UNf-IUIEjFDQtPN-VdqkeOID8HhyPy2bNb01RwGQ4AUgEHEP9NHEZs77nVCxPznlnB6aWGA90Nb2v9xaqVhXs1gsViVDQmBzKUD7_oJrawziHPrgR375U7-R6DZ-EFa9GhlPFdF0t5WzeghyFZbGQm8umMdnvb1CH75lSVeTnPolfgQoqBk-lLoj3LFPDaSbYIWFlcmpOPlZZmXo3PP3VNN-UcbPXNDDx9Iypl-3ut4dN85IdQFE8AlyTDYyPRnSAOyrUkwbd3LVXweEHhP2nOQ5DL_zh6hXaa_1dPkIdV306Cy6Y4khuNTw5aHw8m7nV_aQKIOa9e5oSxC7HxwTHHB3-WjXLjNrr8KuYZSEs9rCJBfp5m0d/p.jpeg?size=2048x1536&size_mode=3) + +分享主题与嘉宾介绍:https://mp.weixin.qq.com/s/-bRXpilEk4PRraOc7ZWELQ +录像及 slide(更新中):https://wudnh5f9ky.feishu.cn/drive/folder/fldcn6BBmquvtnUf7fKjKnaZBTf + +## WWDC 内参系列活动 + +从 2017 年开始,为了和社区开发者一起享受这场 iOS 圈的 WWDC 技术盛宴,老司机技术周报开始组织 WWDC 内参系列活动,累计已有上万的读者订阅。我们会组织业内的优秀开发者针对 WWDC 中的 Session 进行学习和实践,并将他们的学习成果写成技术文章分享出来。所有人都是基于兴趣出发来参与这个活动,因而早期内参的发布是完全免费的。但根据我们很长一段时间的读者反馈来看,免费发布这样的形式虽然说门槛低了,但同样导致了很多读者订阅之后并没有很认真地来看我们的内容。于是我们在最近几年的内参的发布策略调整为了设置一定的门槛价格,来引导读者来付费重视,而在发布一年后再免费发给读者。 + +WWDC 21 我们尝试了全新的创作者参与机制,由原来的邀请参与变为了公开募集,并引入多人审核机制来把控内容质量。今年总计吸引了 200 多名开发者共同参与到内参活动中,大家一起编写和审核文章内容,预计将产出超过 100 篇的高质量精华文章。现在正在活动宣传期,已经有超过 2400 多读者订阅。我们承诺内参活动所有所得收入,除了活动宣传的部分开销外,我们会按内容质量全部用于给参与者稿费,并且老司机技术周报也会单独拿经费给参与者赠送活动纪念品等。 + +- WWDC 17:https://xiaozhuanlan.com/wwdc17 +- WWDC 18(与掘金社区合作):https://juejin.cn/post/6844903618823340040 +- WWDC 18:https://xiaozhuanlan.com/wwdc18 +- WWDC 19:https://xiaozhuanlan.com/wwdc19 +- WWDC 20:https://xiaozhuanlan.com/wwdc20 +- WWDC 21:https://xiaozhuanlan.com/wwdc21 + +## 其他内容 + +除了周报、线下沙龙以及内参活动外,我们还会不定期地向业内的优秀开发者约稿,鼓励大家进行原创优秀博文;另外针对很多读者感兴趣的话题,我们也会不定期组织周报编辑一起热议,并将结果输出给社区。 + +## 渠道 + +GitHub:https://github.com/SwiftOldDriver/iOS-Weekly +RSS:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom +公众号、掘金等全网平台:老司机技术周报 diff --git "a/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" new file mode 100644 index 000000000..79e52fe93 --- /dev/null +++ "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" @@ -0,0 +1,79 @@ +# 老司机技术周报 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly-juejin.png?raw=true) + +## WWDC 内参 + +- WWDC 17:https://xiaozhuanlan.com/wwdc17 +- WWDC 18(与掘金社区合作):https://juejin.cn/post/6844903618823340040 +- WWDC 18:https://xiaozhuanlan.com/wwdc18 +- WWDC 19:https://xiaozhuanlan.com/wwdc19 +- WWDC 20:https://xiaozhuanlan.com/wwdc20 +- WWDC 21:https://xiaozhuanlan.com/wwdc21 + +## 技术沙龙 + +### [淘系技术](http://t.cn/A6IZpL06) + +淘宝工程渐进式拥抱 Swift +- 视频:https://mp.weixin.qq.com/s/67TM_ljN_OH96TroyUFGFA +- 文字版本:https://mp.weixin.qq.com/s/T8iwgSk1MiB3Xg9CGzgYbw +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/%E6%89%8B%E6%B7%98%E5%B7%A5%E7%A8%8B%E6%B8%90%E8%BF%9B%E5%BC%8F%E6%8B%A5%E6%8A%B1Swift%20-%20%E5%80%BE%E5%AF%92.pdf + +西瓜视频的 IAP 支付实践与 StoreKit 新特性 +- 视频:https://mp.weixin.qq.com/s/GWSBYEPB5bjjEAkxNEXWoQ +- 文字版本:https://mp.weixin.qq.com/s/XGj95MLg4HWU6dhuqGdEOg +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E2%BB%84%E7%93%9C%E8%A7%86%E9%A2%91%E7%9A%84IAP%E6%94%AF%E4%BB%98%E5%AE%9E%E8%B7%B5%20%E4%B8%8EStoreKit%E6%96%B0%E7%89%B9%E6%80%A7%20-%20%E9%BB%84%E9%AA%8B%E5%BF%97.pdf + +Flutter 混编工程的模块化架构设计实践 +- 视频:https://mp.weixin.qq.com/s/ciztZLEH-ZrDgAamjvZuOg +- 文字版本:https://mp.weixin.qq.com/s/A2gYRPJ0u8TVXZyMtEArlA +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Flutter%E6%B7%B7%E7%BC%96%E5%B7%A5%E7%A8%8B%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%AE%9E%E8%B7%B5-%20Jackie.pdf + +抖音智能创作如何做防劣化 +- 现场:https://mp.weixin.qq.com/s/PV9mcPZnPNY-OtUxKfraLQ +- 文字版本:https://mp.weixin.qq.com/s/_c3y9KnbKS6VnqTb0AKRWg +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E6%8A%96%E9%9F%B3%E5%88%9B%E4%BD%9C%E5%B7%A5%E5%85%B7%E9%98%B2%E5%8A%A3%E5%8C%96%E5%AE%9E%E8%B7%B5%20-%20Crespo.pdf + +### [字节音乐](http://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491558&idx=1&sn=4ca4f3a9c1eb31f5052272e2649cbd6f&chksm=eaa280edddd509fbe6af2f3fa7d5a2800c01d054257e0ef8ed63bb0705155c517d7bcfe5e19c&token=1167868960&lang=zh_CN#rd) + +Async and Await in Swift 5.5 +- 现场视频:https://mp.weixin.qq.com/s/Yu9eQywcPiZgNME4y5sXfw +- 文字整理版:https://mp.weixin.qq.com/s/DopuYyy479eSjgns3iaWaw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E9%BB%84%E6%99%BA%E6%9D%B0%20-%20Advanced%20Property%20Wrapper%20in%20Swift.pdf + +From Idea To Product +- 现场视频:https://mp.weixin.qq.com/s/tFpxHTnGY7DgDN60gWON3g +- 文字整理版:https://mp.weixin.qq.com/s/TZHrFOU65iG7QQwP8b96-w +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Roc%20Zhang%20-%20From%20Idea%20to%20Product.pdf + +Advanced Property Wrapper in Swift +- 现场视频:https://mp.weixin.qq.com/s/4drAztYJR3Cte1z5qVi_vg +- 文字整理版:https://mp.weixin.qq.com/s/psgRgIZlVDtIeQeDmUmXOw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E9%BB%84%E6%99%BA%E6%9D%B0%20-%20Advanced%20Property%20Wrapper%20in%20Swift.pdf + +基于 Bazel 的 iOS MonoRepo +- 文字整理版:https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E5%BC%A0%E5%BF%BB%E6%AD%A3%20-%20%E5%9F%BA%E4%BA%8E%20Bazel%E7%9A%84%20iOS%20MonoRepo%20%E5%AE%9E%E8%B7%B5.pdf + +### [得物技术](http://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247492047&idx=1&sn=dbdf8bb3f6cb8746fcaeb41ccfb40a60&chksm=eaa17ec4ddd6f7d2074a9caa01a24edfcd160c0e22c1e9bfb62f3e75721bbca55f81fbb6cd95&token=1167868960&lang=zh_CN#rd) + +得物 iOS 工程演进之路 +- 现场视频: + - 上 https://mp.weixin.qq.com/s/bl7DgIv5ICX7hBXF26Q2zA + - 下 https://mp.weixin.qq.com/s/o-gRZZzQBdP33EhFZh2_Ow +- 文字整理版:https://mp.weixin.qq.com/s/Lr6tDxacQKGZ19cKdmNg1w +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Casa%20-%20%E5%BE%97%E7%89%A9iOS%E5%B7%A5%E7%A8%8B%E6%BC%94%E8%BF%9B%E4%B9%8B%E8%B7%AF.pdf + +字节跳动移动研发工具链 - MBox +- 现场视频:https://mp.weixin.qq.com/s/-oGRc22gkk-HVHUA7hBVpg +- 文字整理版:https://mp.weixin.qq.com/s/OD2lYfA9tkdgEp4QGRtdog +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E6%9D%8E%E5%B0%A7%20-%20%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E7%A7%BB%E5%8A%A8%E7%A0%94%E5%8F%91%E5%B7%A5%E5%85%B7%E9%93%BEMBox.pdf + +基于 MNN 的端侧 AI 实践 +- 现场视频:https://mp.weixin.qq.com/s/I8Vq7h3ODnWt81NM13onmw +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/%E4%BA%94%E5%AD%90%E6%A3%8B%20-%20%E5%9F%BA%E4%BA%8E%20MNN%20%E7%9A%84%E7%AB%AF%E4%BE%A7%20AI%20%E5%AE%9E%E8%B7%B5.pdf + +视频特效揭秘 +- 现场视频:https://mp.weixin.qq.com/s/EGFi0A21tzB6XMlDimlFUQ +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/Matrix%20-%20%E8%A7%86%E9%A2%91%E7%89%B9%E6%95%88%E6%8F%AD%E7%A7%98.pdf diff --git a/README.md b/README.md index d53eb5763..2cc9916c7 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) 提出。 -## 支持我们:[WWDC20 内参](https://xiaozhuanlan.com/wwdc20) +## 支持我们:[WWDC24 内参](https://xiaozhuanlan.com/wwdc23) -一年一度的 WWDC 又来啦!今年一共会有 135 个 Sessions 内容,我们将集结老司机 iOS 周报、知识小集和SwiftGG 翻译组三大组织内的一线 iOS 工程师,为你深度解读 WWDC20 中那些值得关注的 Session。 +**WWDC24 内参** 目前已经更新了 21 篇内容,并且我们今年做出了一个重大改变,关注老司机技术公众号并回复 ``2024`` 可以免费领取,后续也会在公众号上定期推送对应内容。 + +**WWDC 内参** 系列是由「老司机技术」牵头组织的精品原创内容系列。已经做了几年了,口碑一直不错。和往年不同,今年几乎没有脱水稿了,得益于组建的审核团队和不断优化的创作流程,大家创作的内容都已经超越了视频本身的内容,非常有学习和参考意义。 + +> 双审核机制:一位审核从专业性角度看内容是否正确,另外一位审核从读者角度看知识是否正确引导。 ## 订阅周报 @@ -29,15 +33,15 @@ #### 轮值主编
- - - - - + + + + +
#### 现任编辑 @@ -55,15 +59,9 @@ - - - - - - @@ -76,9 +74,6 @@ - - - @@ -94,9 +89,6 @@ - - - @@ -109,9 +101,6 @@ - - - @@ -124,6 +113,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + #### 荣誉编辑 @@ -150,8 +170,26 @@ + + + + + + + + + + + + + + + +## 关于我们 + +老司机技术周报是一个由移动端技术爱好者组成的团体,致力于在信息爆炸的时代将真正有价值的内容输送给读者。我们曾联合 SwiftGG 和知识小集等一起组织了近 4 年的《WWDC 内参》活动,GitHub、公众号和掘金等平台均拥有广大的读者群体,2018 年至今共发布 180 余期,各个渠道累计周报的阅读量达 500 多万次。 ## 其他 @@ -159,8 +197,6 @@ ## 赞助者 -[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS开发辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在工作中能极大提升开发效率,Mac App Store免费下载! - **非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** ## 协议 diff --git a/Report template.md b/Report template.md index 59570ff2c..4f7ff3747 100644 --- a/Report template.md +++ b/Report template.md @@ -1,6 +1,6 @@ -# 老司机 iOS 周报 #1 | 2020-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) 提出。 @@ -9,6 +9,10 @@ > 行业相关的新闻、趣事、看法 +##  Developer - 设计开发加速器 + +> 设计开发加速器相关活动 + ## 新手推荐 > 收集一些对新手友好且质量不错的文章 @@ -33,25 +37,17 @@ > 比较不错的书的推荐和书评 -## 赞助者 - -虚位以待.. - -**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** - ## 内推 -老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 - -如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 -如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 - -当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) ## 关注我们 -我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) diff --git a/Reports/#1.md b/Reports/2018/#1.md similarity index 100% rename from Reports/#1.md rename to Reports/2018/#1.md diff --git a/Reports/#10.md b/Reports/2018/#10.md similarity index 100% rename from Reports/#10.md rename to Reports/2018/#10.md diff --git a/Reports/#11.md b/Reports/2018/#11.md similarity index 100% rename from Reports/#11.md rename to Reports/2018/#11.md diff --git a/Reports/#12-2018.03.25.md b/Reports/2018/#12-2018.03.25.md similarity index 100% rename from Reports/#12-2018.03.25.md rename to Reports/2018/#12-2018.03.25.md diff --git a/Reports/#13-2018.03.31.md b/Reports/2018/#13-2018.03.31.md similarity index 100% rename from Reports/#13-2018.03.31.md rename to Reports/2018/#13-2018.03.31.md diff --git a/Reports/#14-2018.04.09.md b/Reports/2018/#14-2018.04.09.md similarity index 100% rename from Reports/#14-2018.04.09.md rename to Reports/2018/#14-2018.04.09.md diff --git a/Reports/#15-2018.04.16.md b/Reports/2018/#15-2018.04.16.md similarity index 100% rename from Reports/#15-2018.04.16.md rename to Reports/2018/#15-2018.04.16.md diff --git a/Reports/#16-2018.04.21.md b/Reports/2018/#16-2018.04.21.md similarity index 100% rename from Reports/#16-2018.04.21.md rename to Reports/2018/#16-2018.04.21.md diff --git a/Reports/#17-2018.05.02.md b/Reports/2018/#17-2018.05.02.md similarity index 100% rename from Reports/#17-2018.05.02.md rename to Reports/2018/#17-2018.05.02.md diff --git a/Reports/#18-2018.05.07.md b/Reports/2018/#18-2018.05.07.md similarity index 100% rename from Reports/#18-2018.05.07.md rename to Reports/2018/#18-2018.05.07.md diff --git a/Reports/#19-2018.05.14.md b/Reports/2018/#19-2018.05.14.md similarity index 100% rename from Reports/#19-2018.05.14.md rename to Reports/2018/#19-2018.05.14.md diff --git a/Reports/#2.md b/Reports/2018/#2.md similarity index 100% rename from Reports/#2.md rename to Reports/2018/#2.md diff --git a/Reports/#20-2018.05.21.md b/Reports/2018/#20-2018.05.21.md similarity index 100% rename from Reports/#20-2018.05.21.md rename to Reports/2018/#20-2018.05.21.md diff --git a/Reports/#21-2018.05.28.md b/Reports/2018/#21-2018.05.28.md similarity index 100% rename from Reports/#21-2018.05.28.md rename to Reports/2018/#21-2018.05.28.md diff --git a/Reports/#22-2018.06.04.md b/Reports/2018/#22-2018.06.04.md similarity index 100% rename from Reports/#22-2018.06.04.md rename to Reports/2018/#22-2018.06.04.md diff --git a/Reports/#23-2018.06.18.md b/Reports/2018/#23-2018.06.18.md similarity index 100% rename from Reports/#23-2018.06.18.md rename to Reports/2018/#23-2018.06.18.md diff --git a/Reports/#24-2018.06.25.md b/Reports/2018/#24-2018.06.25.md similarity index 100% rename from Reports/#24-2018.06.25.md rename to Reports/2018/#24-2018.06.25.md diff --git a/Reports/#25-2018.07.02.md b/Reports/2018/#25-2018.07.02.md similarity index 100% rename from Reports/#25-2018.07.02.md rename to Reports/2018/#25-2018.07.02.md diff --git a/Reports/#26-2018.07.09.md b/Reports/2018/#26-2018.07.09.md similarity index 100% rename from Reports/#26-2018.07.09.md rename to Reports/2018/#26-2018.07.09.md diff --git a/Reports/#27-2018.07.16.md b/Reports/2018/#27-2018.07.16.md similarity index 100% rename from Reports/#27-2018.07.16.md rename to Reports/2018/#27-2018.07.16.md diff --git a/Reports/#28-2018.07.23.md b/Reports/2018/#28-2018.07.23.md similarity index 100% rename from Reports/#28-2018.07.23.md rename to Reports/2018/#28-2018.07.23.md diff --git a/Reports/#29-2018.07.30.md b/Reports/2018/#29-2018.07.30.md similarity index 100% rename from Reports/#29-2018.07.30.md rename to Reports/2018/#29-2018.07.30.md diff --git a/Reports/#3.md b/Reports/2018/#3.md similarity index 100% rename from Reports/#3.md rename to Reports/2018/#3.md diff --git a/Reports/#30-2018.08.06.md b/Reports/2018/#30-2018.08.06.md similarity index 100% rename from Reports/#30-2018.08.06.md rename to Reports/2018/#30-2018.08.06.md diff --git a/Reports/#31-2018.08.13.md b/Reports/2018/#31-2018.08.13.md similarity index 100% rename from Reports/#31-2018.08.13.md rename to Reports/2018/#31-2018.08.13.md diff --git a/Reports/#32-2018.08.20.md b/Reports/2018/#32-2018.08.20.md similarity index 100% rename from Reports/#32-2018.08.20.md rename to Reports/2018/#32-2018.08.20.md diff --git a/Reports/#33-2018.08.27.md b/Reports/2018/#33-2018.08.27.md similarity index 100% rename from Reports/#33-2018.08.27.md rename to Reports/2018/#33-2018.08.27.md diff --git a/Reports/#34-2018.09.03.md b/Reports/2018/#34-2018.09.03.md similarity index 100% rename from Reports/#34-2018.09.03.md rename to Reports/2018/#34-2018.09.03.md diff --git a/Reports/#35-2018.09.10.md b/Reports/2018/#35-2018.09.10.md similarity index 100% rename from Reports/#35-2018.09.10.md rename to Reports/2018/#35-2018.09.10.md diff --git a/Reports/#36-2018.09.17.md b/Reports/2018/#36-2018.09.17.md similarity index 100% rename from Reports/#36-2018.09.17.md rename to Reports/2018/#36-2018.09.17.md diff --git a/Reports/#37-2018.09.24.md b/Reports/2018/#37-2018.09.24.md similarity index 100% rename from Reports/#37-2018.09.24.md rename to Reports/2018/#37-2018.09.24.md diff --git a/Reports/#38-2018.10.08.md b/Reports/2018/#38-2018.10.08.md similarity index 100% rename from Reports/#38-2018.10.08.md rename to Reports/2018/#38-2018.10.08.md diff --git a/Reports/#39-2018.10.15.md b/Reports/2018/#39-2018.10.15.md similarity index 100% rename from Reports/#39-2018.10.15.md rename to Reports/2018/#39-2018.10.15.md diff --git a/Reports/#4.md b/Reports/2018/#4.md similarity index 100% rename from Reports/#4.md rename to Reports/2018/#4.md diff --git a/Reports/#40-2018.10.22.md b/Reports/2018/#40-2018.10.22.md similarity index 100% rename from Reports/#40-2018.10.22.md rename to Reports/2018/#40-2018.10.22.md diff --git a/Reports/#41-2018.10.29.md b/Reports/2018/#41-2018.10.29.md similarity index 100% rename from Reports/#41-2018.10.29.md rename to Reports/2018/#41-2018.10.29.md diff --git a/Reports/#42-2018.11.05.md b/Reports/2018/#42-2018.11.05.md similarity index 100% rename from Reports/#42-2018.11.05.md rename to Reports/2018/#42-2018.11.05.md diff --git a/Reports/#43-2018.11.12.md b/Reports/2018/#43-2018.11.12.md similarity index 100% rename from Reports/#43-2018.11.12.md rename to Reports/2018/#43-2018.11.12.md diff --git a/Reports/#44-2018.11.19.md b/Reports/2018/#44-2018.11.19.md similarity index 100% rename from Reports/#44-2018.11.19.md rename to Reports/2018/#44-2018.11.19.md diff --git a/Reports/#45-2018.11.26.md b/Reports/2018/#45-2018.11.26.md similarity index 100% rename from Reports/#45-2018.11.26.md rename to Reports/2018/#45-2018.11.26.md diff --git a/Reports/#46-2018.12.03.md b/Reports/2018/#46-2018.12.03.md similarity index 100% rename from Reports/#46-2018.12.03.md rename to Reports/2018/#46-2018.12.03.md diff --git a/Reports/#47-2018.12.10.md b/Reports/2018/#47-2018.12.10.md similarity index 100% rename from Reports/#47-2018.12.10.md rename to Reports/2018/#47-2018.12.10.md diff --git a/Reports/#48-2018.12.17.md b/Reports/2018/#48-2018.12.17.md similarity index 100% rename from Reports/#48-2018.12.17.md rename to Reports/2018/#48-2018.12.17.md diff --git a/Reports/#49-2018.12.24.md b/Reports/2018/#49-2018.12.24.md similarity index 100% rename from Reports/#49-2018.12.24.md rename to Reports/2018/#49-2018.12.24.md diff --git a/Reports/#5.md b/Reports/2018/#5.md similarity index 100% rename from Reports/#5.md rename to Reports/2018/#5.md diff --git a/Reports/#6.md b/Reports/2018/#6.md similarity index 100% rename from Reports/#6.md rename to Reports/2018/#6.md diff --git a/Reports/#7.md b/Reports/2018/#7.md similarity index 100% rename from Reports/#7.md rename to Reports/2018/#7.md diff --git a/Reports/#8.md b/Reports/2018/#8.md similarity index 100% rename from Reports/#8.md rename to Reports/2018/#8.md diff --git a/Reports/#9.md b/Reports/2018/#9.md similarity index 100% rename from Reports/#9.md rename to Reports/2018/#9.md diff --git a/Reports/2020/#133-2020.10.26.md b/Reports/2020/#133-2020.10.26.md index ddaf074d6..bbd1c86c0 100644 --- a/Reports/2020/#133-2020.10.26.md +++ b/Reports/2020/#133-2020.10.26.md @@ -41,7 +41,7 @@ [@xiaofei86](https://weibo.com/xuyafei86):在最近的 Swift 版本中,我们已经看到了一系列新的 attributes,如 @unknown,@propertyWrapper,@main 等。在这篇文章中,作者将带领我们了解一个少为人知的,但同样有用的旧有属性 @warn_unqualified_access。其在 Swift 2 中悄悄引入,用来帮助我们消除调用顶级函数、静态方法、实例方法时的歧义。感兴趣的同学可以详细阅读。 -### 🐕 [自研 iOS 热更新机制——OCPack 技术方案总结](https://juejin.im/post/6884833291740905480) +### 🐕 [自研 iOS 热更新机制——OCPack 技术方案总结](https://mp.weixin.qq.com/s/x7c5mHJINcWpGCuHPDNNPw) [@J_Knight_](https://github.com/knightsj):本文分享了一种在 iOS 平台上的 App 动态化技术方案:OCPack。OCPack 提供的工具链可以将 .m 文件生成 .bin 格式的 patch 文件,该文件可以在一个基于 Native 环境的虚拟栈机加载并执行,从而达到动态化更新的效果。作者从编译模块、汇编模块、加载模块和执行模块来分别讲解了 OCPack 方案的实现方式,同时也介绍了该方案的优势和未来的迭代计划。 diff --git a/Reports/2020/#135-2020.11.09.md b/Reports/2020/#135-2020.11.09.md index 3f0224daa..6fd51dcdb 100644 --- a/Reports/2020/#135-2020.11.09.md +++ b/Reports/2020/#135-2020.11.09.md @@ -55,7 +55,7 @@ cocoapods-imy-bin 特征: ## 工具 -### [ImportSanitizer](https://github.com/SketchK/import-sanitizer) +### [ImportSanitizer](https://github.com/SketchK/ImportSanitizer) 在 iOS 开发中,我们常常会看到各种引入头文件的方式,往往这些方式都可以正常编译和运行。但其实一些非标准的写法可能会导致项目的 `search path` 变得冗长,也有可能导致编译不过。ImportSanitizer 是一款能够帮助开发者自动修复工程头文件引用方式的 CLI 工具,它非常简单易用,想排查下工程头文件引入问题的同学可以使用试试。 diff --git a/Reports/2020/#137-2020.11.23.md b/Reports/2020/#137-2020.11.23.md index 789df51d4..fa1d63f8d 100644 --- a/Reports/2020/#137-2020.11.23.md +++ b/Reports/2020/#137-2020.11.23.md @@ -5,33 +5,66 @@ 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 +## WWDC20 + +本周在周报公众号上我们推送了 4 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [使用 Metal 技术驾驭 Apple 图形处理器](https://mp.weixin.qq.com/s/k-4xTRtKAjHuiRiTPiN0rw) +- [在 Apple Silicon 上优化你的 Metal 应用程序](https://mp.weixin.qq.com/s/rT8XcPUAvVdfXTleGw--jA) +- [iOS 性能优化: 如何让使用 XCode Debugger 优化 Metal App](https://mp.weixin.qq.com/s/HU7F6o-ratWC8ehfDIrORg) +- [国际化适配:使用 Xcode 构建助于本地化的布局](https://mp.weixin.qq.com/s/9iUNek72jZoqNJVLbPViVw) + ## 新闻 -> 行业相关的新闻、趣事、看法 +### [Apple 宣布推出 App Store 小型企业计划](https://www.apple.com.cn/newsroom/2020/11/apple-announces-app-store-small-business-program/) -## 新手推荐 +[@JonyFang](https://github.com/JonyFang):苹果宣布推出 App Store 小型企业计划,新计划针对每年营收 100 万美元以下的小型企业,将 App Store 佣金降至 15%,该计划将于 2021 年 1 月 1 日正式启动。 -> 收集一些对新手友好且质量不错的文章 +### [订阅优惠代码现已推出](https://developer.apple.com/cn/news/?id=g20wyc9c) + +[@Parsifal](https://github.com/ParsifalC):苹果对于自己的订阅服务新增的一项服务。优惠代码是一组独特的、由数字和字母构成的编码,用于为自动续期订阅提供折扣价格或免费优惠。使用 iOS 14 和 iPadOS 14 + 的用户可以在 App Store 或 App 内使用优惠代码兑换功能。 ## 文章 -> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 +### 🌟 🐕 [淘宝直播“一猜到底”——移动端实时语音识别技术方案及应用](https://mp.weixin.qq.com/s/jX7utUnk0BOnu7cVnjNe1w) -## 工具 +[@含笑饮砒霜](https://weibo.com/chinafishnews/):淘宝直播 App 在今年双十一推出了「一猜到底」的直播答题新玩法,这个游戏的核心是用户的报价能否快速且正确的被识别。庞大数量的用户同时进行语音请求对服务压力和服务质量都是非常大的挑战。本文详细讲述了阿里内部多个团队,是如何在通力协作下,利用端智能 [MNN](https://github.com/alibaba/MNN) 深度学习框架实现工业界首个用于直播的移动端语音识别的。 -> 开发过程中常用的工具,及一些新工具的介绍 +### 🐎 [新版 Mac 终于到货了!anandtech 最新 M1 芯片评测出炉](https://mp.weixin.qq.com/s/6RmvttZasIBDSki-ieENeg) -## 代码 +[@Parsifal](https://github.com/ParsifalC):过去一周关于苹果最火的话题无疑是围绕着搭载 M1 芯片的 MacBook 和 Mac Mini 系列。这是一篇很硬核和专业的评测文,测评结果显示,M1 的内存带宽优于苹果此前的 A14 芯片,CPU 单线程、多线程性能都非常优秀,GPU 足以称霸集显,甚至可以媲美独显。有媒体表示苹果自己都未曾想到 M1 会强悍至此,更有朋友调侃到有生之年也能见到 MacBook 开始讲性价比了,库克此时若喊出“还有谁!”想必也是底气十足~ + +### 🐕 [手淘双11最新实践:PopLayer 弹层领域研发模式升级](https://mp.weixin.qq.com/s/yYsWHv0kq7HK54e1kPBprw) + +[@老峰](https://www.github.com/gesantung):在精细化流量运营的今天,弹层作为一个可以带来高流量的强运营手段,已经从低频需求,变成了面向各类人群投放的高频需求,尤其在 2C 的研发需求中,我们经常会有各种活动弹窗紧急需求,但业务往往会遇到开发弹层难、慢,时间又很急的情况。 + +手淘技术团队在本文中分享了一套快速搭建+可视化+多端多场景通用的 PopLayer 解决方案,具体介绍了搭投模式业务背景,架构,整体设计,包括可视化 IDE、运行时解析引擎 、ServerLess 等相关建设,感兴趣的同学不容错过。 + +### 🐕 [UIView 动画降帧探究](https://juejin.cn/post/6896372391388119053) -> 库,代码段,开源app +[@EyreFree](https://www.github.com/EyreFree):众所周知,iOS App 的刷新频率越接近越 60 FPS 越好。但是另一方面,我们也知道动画渲染的过程中需要消耗大量的 GPU 资源,所以给动画降帧则可以给 GPU 减负,降低 GPU 使用率峰值。在动画不复杂但是数量很多的情况下,给动画降帧并不会影响动画效果,此时降帧就能累计节约大量的 GPU 性能。本文介绍了作者基于 UIView animation block + UIViewAnimationOptionPreferredFramesPerSecond30 属性进行动画降帧的方案,可以较少改动代码而实现降帧的目的,有相应需求的同学不要错过。 -## 书 +### 🐕 [实现 Native 异步回调 Flutter](http://yulingtianxia.com/blog/2020/10/25/Asynchronous-Callback-for-Flutter/) -> 比较不错的书的推荐和书评 +[@极速男孩](https://github.com/ztlyyznf001):Dart 和原生交互有多重选择,包括 channel ,阿里的 FlutterBoost,本文主要介绍了杨萧玉的 DartNative 是如何首先通过 DartFFI 和 libFFI 来实现 Native 和 dart 之间函数的绑定,然后通过 Port 相关的 API 来实现 OC 和 Dart 之间方法的相互调用,这样可以实现一些通过 channel 无法实现的,如 block, NSNotification 这类的方法。 + +## 代码 + +### [doesitarm](https://github.com/ThatGuySam/doesitarm) + +[@红纸](http://github.com/nianran):伴随着 M1 芯片的发布,Mac 软件适配也在同步进行,不少开发者协同整理了一份支持 ARM 架构的 APP 列表供大家参考。 ## 音视频 -> 比较不错的书的推荐和书评 +### 🌟 🐕 [Discover Metal enhancements for A14 Bionic - Tech Talks - Videos - Apple Developer](https://developer.apple.com/videos/play/tech-talks/10858) + +[@莲叔](http://aaaron7.github.io/):近期随着苹果新 air 的评测陆续放出来,M1 芯片可谓赚足的眼球。看回移动端,iPhone 12 系列的 A14 仿生芯片也有了非常强劲的升级。这个视频是苹果工程师分享的 A14 芯片中的 GPU 能力升级,非常值得一看。因为其中的技术不仅仅只是苹果一些新特性,更是代表了未来图形渲染技术的发展方向。 + +视频主要包含了四个部分:新的 shader 结构:重心坐标(barycentric coordinate)和形状 Id(primitive id), 新的纹理贴图模式,以及新的 SIMD batch 操作指令,新的 SIMD 矩阵乘法指令等。其中最有趣的是第一部分,我们都知道 Metal 相较于 OpenGL 最大的升级就是实现里的延迟渲染,让光照可以在 Fragment Shader 阶段之后来进行,以支撑更复杂的光线跟踪。通过 A14 新的 barycentric coordinate 和 primitive id 技术,可以让 Fragment Shader 产生 的 G-Buffer 进一步缩小为 Visibility Buffer,之后在光线跟踪的阶段重建出 Draw State 进行材质贴图和光照跟踪。相比之前的流程,大幅减少了复杂场景下的计算量。看下来感觉还是很激动人心的,喜欢渲染技术的同学不容错过。 + +### 🐢 [Explore Live GPU Profiling with Metal Counters](https://developer.apple.com/videos/play/tech-talks/10001) + +[@老驴](https://www.weibo.com/6090610445):在 macOS Big Sur 和 iOS 14 中,苹果新引入了 Metal Counters API 让开发者对 GPU 性能进行实时在线性能分析。此 API 提供了非常底层的运行时 GPU 性能信息,而这些数据在之前的版本中,都只能从 Xcode 或者 Instruments 中做离线分析。这对于开发者来说无疑是个非常大的改进,而善用这个 API 也可以更好的为你的 App 性能优化,给出更加精准的思路。 ## 赞助者 diff --git a/Reports/2020/#138-2020.11.30.md b/Reports/2020/#138-2020.11.30.md new file mode 100644 index 000000000..dd5c1e503 --- /dev/null +++ b/Reports/2020/#138-2020.11.30.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #138| 2020-11-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [端智能:使用 Create ML 打造图片和视频的风格转化模型](https://mp.weixin.qq.com/s/oIVvGleWyHi7X38uFULRjA) +- [端智能:用 Create ML 打造智能运动 App](https://mp.weixin.qq.com/s/pzbxLL03Sq3IXKQRCQohKg) + +## 新闻 + +### [App Store Connect 放假安排:12月23日-27日 ](https://developer.apple.com/cn/news/?id=83m4plrb) + +[@Parsifal](https://github.com/ParsifalC):请确保您的 App 为最新版本,以准备迎接假期。App Store Connect 在12月23日至27日(太平洋时间)期间不接受新 App 和 App 更新,因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。 + +## 文章 + +### 🌟 🐕 [iOS AOP 方案的对比与思考](https://mp.weixin.qq.com/s/5JhbX4McMifFpZ7NyztIQw) + +[@Damien](https://github.com/ZengyiMa):AOP 意为面向切面的编程方式,在不修改源代码的情况下,给程序动态统一添加功能的技术。本文详细的介绍了目前 iOS 的各项 AOP 方案(Method Swizzle, Aspects, MPSwizzler, ISA-swizzle KVO, Fishhook, Thunk, Clang 插桩)的原理实现、使用场景以及问题缺陷。让我们的工具箱又多出了一些可供选择,同时进一步加深对静态和动态语言的理解,也对程序从静态到动态整个过程理解更加深入。 + +### 🐕 [UME - 丰富的 Flutter 调试工具](https://mp.weixin.qq.com/s/9GjXB9Eu-OP3fIjdQWKklg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):鉴于在开发 Flutter 过程中遇到的一些问题,西瓜视频 Flutter 基础团队开发了一款调试工具包 UME,内部集成了丰富的调试工具, 包括但不限于如下功能: + +- Widget 信息:查看当前选中 widget 的大小、名称,文件路径以及代码所在行数 +- Widget层级:查看当前选中 widget 的树层级,以及它 renderObject 的详细 build 链 +- ShowCode: 查看到当前页面的页面代码 +- 内存泄露:检测 flutter 内存泄漏 +- 内存查看:查看当前 Dart VM 对象所占用情况 +- 对齐标尺:测量当前 widget 所在屏幕的一个坐标位置,开启吸附开关后可以自动吸附最近 widget +- 颜色吸管:查看到当前页面任何像素的颜色,方便调试 UI +- 网络调试:支持所有网络请求抓取,mock 响应内容等 +- Logger:展示使用 debugprint 函数打印的日志 +- Channel Monitor:查看所有的 channel 调用,包括方法名,时间,参数,返回结果 + +### 🐕 [What went wrong with the libdispatch. A tale of caution for the future of concurrency](https://tclementdev.com/posts/what_went_wrong_with_the_libdispatch.html) + +[@Leo](https://github.com/leomobiledeveloper):libdispatch 是 Apple 推出的帮助开发者利用好多核性能的底层框架,简洁的 block 相关的 API 让并发编程变得前所未有的容易。但很多情况下 libdispatch 被滥用,导致引起线程爆炸,代码调试困难等问题。本文作者讲述了自己使用 libdispatch 的痛点,分析了 swift 即将引入的并发相关特性的,文章条理清晰,能看出作者对并发编程有着独到的见解。 + +### 🐕 [MongoDB Realm 使用初体验 | 奇谈](https://mp.weixin.qq.com/s/HhhqkHtu9P1hib9L2Miyhg) + +Realm 是一个专门为移动端设计的数据库。主要特点是性能好,易使用。MongoDB 是一个流行的 NoSQL 数据库,主要是在服务器端使用。MongoDB 收购 Realm 半年后推出全新的 MongoDB Realm。移动端的数据库还是 Realm,本地的数据存取接口几乎保持一致。通过 Realm sync 这个程序把数据同步到 MongoDB Atlas 中。本文介绍了 MongoDB Realm 的基本功能和使用方法。 + +### 🐎 [DispatchSource: Detecting changes in files and folders in Swift](https://swiftrocks.com/dispatchsource-detecting-changes-in-files-and-folders-in-swift.html) + +[@四娘](https://kemchej.github.io/):GCD 里的 DispatchSource 家族包含了一系列监听系统事件的 API,例如 Mach 事件通知,文件变更通知等等。在这篇文章里,作者以实时日志浏览为例展示了这一套 API 的使用方式。 + +### 🐢 [端智能:理解 Vision 框架中的图片技术](https://mp.weixin.qq.com/s/L4VHrw0Hvu_ALlTRY7rBBA) 和 [How to display Vision bounding boxes](https://machinethink.net/blog/bounding-boxes/) + +[@EyreFree](https://github.com/EyreFree):Vision 是 Apple 2017 年和 Core ML 一起推出的、基于 Core ML 封装的图像识别库,它包含有人脸识别、机器学习图片分析、条形码识别、文字识别等基础功能。本次推荐的两篇文章对 Vision 的图片重点区域、图片分类、图片相似度、人脸识别技术等主要应用进行了介绍和演示,推荐大家都来看一下,说不定下次遇到的图形相关的业务就可以用它来实现了。 + +### 🐢 [一篇吃透 Dark Mode ,搞定“暗黑/深色”适配](https://mp.weixin.qq.com/s/02QmgMkmVcB8x7xVZJT_Bg) + +[@AidenRao](https://weibo.com/AidenRao):本文讲述 APP 中各组件适配 Dark Mode(暗黑模式 或 深色模式)的方式和注意事项,以及一些细节的处理建议。 +但更重要的,是让大家掌握适配暗黑模式的工作量。避免轻易开工,导致进退两难。 + +- 从“层级”、“颜色”两方面讲述 iOS 安卓适配方法。 +- 讲述 Dark 适配需要关注的细节:字色、图标、插图等 +- Dark 适配的难点:适配场景多,Dark 模式下无障碍阅读的适配,以及容易出现遗漏。 + +### 🐢 [移动端 UI 一致性解决方案](https://mp.weixin.qq.com/s/oq7ylltdRIdJuSlL7EIiNA) + +[@Parsifal](https://github.com/ParsifalC):大型 App 往往承接着来自不同团队的业务,可能各个业务组都有着自己的产品、设计和研发团队。随着版本的不断迭代,大型 App 在设计层面、研发层面、测试层面和产品层面均会面临着效率低、UI 体验不一致等问题。美团外卖团队分享了他们在移动端 UI 一致性解决方案上的探索。这是一套需要各个团队达成共识共同去维护的标准化组件,相比于完成这一套方案的建设,或许去推进各个业务团队接受并使用也是不小的挑战。 + +### 🐎 [Comparing iPhone OS 1.0 with iOS 14 using tree maps](https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/) + +[@Parsifal](https://github.com/ParsifalC):2007 年第一款 iPhone 发布至今,iPhone 的硬件在不断更新,软件也从 iPhone OS 1.0 到了 iOS 14。本文通过 tree map 带我们一览其中的结构变化过程。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2020/#139-2020.12.07.md b/Reports/2020/#139-2020.12.07.md new file mode 100644 index 000000000..e6bd479f3 --- /dev/null +++ b/Reports/2020/#139-2020.12.07.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #139 | 2020-12-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [用 Web 技术为 Safari 编写扩展](https://mp.weixin.qq.com/s/ZVqCmWUGsUIYLXmpgBTZMA) +- [通过更好的隐私保护与用户建立信任](https://mp.weixin.qq.com/s/rIULHMRCmhdwuI_p1TIukw) + +## 新手推荐 + +### 🐎 [UIStackView padding](https://sarunw.com/posts/uistackview-padding/) + +[@Damien](https://github.com/ZengyiMa): UIStackView 是 Apple 在 iOS9 推出流式布局容器库,它可以让我们高效的管理一行或一列视图的布局,在日常开发中往往有需要对 View 设置 Padding 的场景,相对比直接设置元素约束的方式,我们还可以使用 isLayoutMarginsRelativeArrangement 属性来提高我们布局效率,本文将会详细介绍 isLayoutMarginsRelativeArrangement 的妙用。 + +## 文章 + +### 🐎 [Swift protocols in SwiftUI](https://fivestars.blog/swiftui/swift-protocols.html) +[@zvving](https://github.com/zvving):协议(Protocols)是 Swift 语言的重要组成部分,在 SwiftUI 中亦有广泛应用,比如新增的协议 [View](https://developer.apple.com/documentation/swiftui/view)、[Shape](https://developer.apple.com/documentation/swiftui/shape) 等。 + +除此之外,标准库中基础协议 Equatable,Identifiable,Hashable 从最小化重绘、定位元素、尝试兼顾代码复用与传值等不同角度为 SwiftUI 带来高效布局能力。本文带你快速了解这部分内容。 + +### 🐕 [MacBook 升级 SSD 硬盘指北](https://juejin.cn/post/6901549087221514247) + +[@Parsifal](https://github.com/ParsifalC):用低磁盘容量的 MacBook 做 iOS 开发,最头疼的无疑是 Xcode 那膨胀地异常迅速的空间使用率。无论是 Xcode 自身大小,还是编译项目的缓存,又或是 device support 的 SDK,都会夸张地将你磁盘空间填满。这篇文章非常详细地总结了自己是如何动手升级老 MacBook SSD 的,是一篇手把手的教程帖。 + +### 🐎 [一种更优雅的 Flutter Dialog 解决方案](https://juejin.cn/post/6902331428072390663) + +[@Parsifal](https://github.com/ParsifalC):Flutter 提供的 dialog 存在必须传 BuildContext、无法透传事件和某些场景下的路由混乱等问题,为解决这些问题作者自定义了一个 Dialog Widget - [flutter_smart_dialog](https://github.com/CNAD666/flutter_smart_dialog),几个问题的解决方式值得参考借鉴。 + +## 工具 + +### [Xcode Releases](https://xcodereleases.com/) + +[@Parsifal](https://github.com/ParsifalC):一个汇总了所有 Xcode 版本信息的工具网站,比官网更加清晰,查询也更加方便快速。下载资源仍然是使用的苹果官方渠道,不必担心安全问题。 + +### [Swift Version](https://swiftversion.net/) + +[@Parsifal](https://github.com/ParsifalC):Swift 作为一款仍在持续进化中的语言,版本迭代也很频繁。这个网站汇总了所有 Swift 版本和 Xcode 版本的关联关系,有想了解相关版本历史需求的可以关注一下。 + +## 代码 + +### [ColorKit](https://github.com/Boris-Em/ColorKit) + +[@水水](https://www.xuyanlan.com): 这是一个关于 ‘Color’ 的库,它有一些非常实用的 Features : +- Dominant Colors : 获取一张图片的主色 +- Color Palette :调色板 +- Average Color : 获取一张图片的平均色 +- Color Difference (DeltaE):色差,颜色比较 +- Contrast Ratio:对比度 +- Color Space Conversions: 颜色空间转换 +还有更多很实用的特性,读者们可以尝试使用哦~ + +### [DiDiPrism](https://github.com/didi/DiDiPrism) + +[@老峰](https://github.com/GesanTung): DiDiPrism 是滴滴团队开源的一套专注于移动端操作行为的技术方案。具有零入侵,各端统一的操作行为指令,丰富灵活操作行为策略等特点,主要具有如下功能: +- 操作回放(视频回放 / 文字回放) +- 实时操作行为检测 +- 移动端埋点全流程,数据可视化(开源筹备中..) +还有更多功能,有类似需求的读者们可以借鉴参考使用 + +### [tumblr/kanvas-ios](https://github.com/tumblr/kanvas-ios) + +[@JonyFang](https://github.com/JonyFang):Kanvas 是 Tumblr 近期开源的一款工具库,主要用于添加特效、图形、文本、贴纸以及使用现有媒体或相机制作 GIF。在 Tumblr iOS 应用中,它被用作相机、媒体编辑器、GIF 制作器和媒体发布工具。 + +有类似需求的读者,可以借鉴参考使用哦~ + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2020/#140-2020.12.14.md b/Reports/2020/#140-2020.12.14.md new file mode 100644 index 000000000..f7e26f5d7 --- /dev/null +++ b/Reports/2020/#140-2020.12.14.md @@ -0,0 +1,83 @@ +# 老司机 iOS 周报 #140 | 2020-12-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 稳定性:如何在开发中规避安全风险](https://mp.weixin.qq.com/s/Khmpba8XBxbcf6Cq7zc5ZQ) +- [WKWebView 新变化:发掘 WKWebView 的神奇妙用](https://mp.weixin.qq.com/s/NcMo6uStNrdLJvVGfL1TNw) + +### [App 内购买项目现已支持「家人共享」功能](https://developer.apple.com/cn/news/?id=4zbvn7u9) + + [@享耳先森](https://github.com/iblacksun):现在,开发者可以为自动续期订阅和非消耗型内购买项目启用「家庭共享」功能,从而允许用户与最多 5 位其他家庭成员共享购买内容。 + +## 文章 + +### 🌟🚧🐕 [Uber 工程师亲述使用 Swift 重写 App 的(惨痛)经历](https://threadreaderapp.com/thread/1336890442768547845.html) + +[@四娘](https://kemchenj.github.io/):事情起源于 2016 年,那年 Trump 还不是总统,TK 还没有爆出丑闻,Uber 还在飞速增长,App 的架构也逐渐变得复杂和脆弱,由此产生的 Bug 让工程师团队疲于奔命,最终他们决定重写 App 的架构。 + +在 iOS 端,他们做了一个最“灾难性”的决定:**全面使用 Swift 进行重写**。当时的 Swift 还是 2.x 版本,Uber 的项目在那时敲下一段语句需要等 45 秒才会出现代码补齐,除此之外还有编译速度,启动速度和二进制大小的问题,过程中他们用了非常多的 hacky 的手段去处理,例如 struct 全部改成 class,编译产物重链接,编译 pass 重排等等。 + +希望大家看完这段经历之后可以对技术选型有更深刻的理解。 + +> 中文译版:[我在Uber亲历的最严重的工程灾难](https://mp.weixin.qq.com/s/T1RqYrCTOpQvkWdunoxqww) + +### 🌟🐕 [杀不掉的 App——CVE-2018-4340](https://mp.weixin.qq.com/s/tnupXwfR5EDhZif7t9vR1w) + + [@Leo](https://github.com/leomobiledeveloper):作者在 2018 年给 iOS 和 macOS 报了一个 WebKit 沙箱逃逸漏洞 CVE-2018-4310,苹果先后在 macOS 和 iOS13上修复了这个漏洞。本文详细讲述了这个漏洞的原理,以及如何在 iOS 上做一个杀不掉的 App,是一篇 iOS/macOS 上安全相关的高质量文章。 + +### 🌟🐕 [iOS Synchronized 底层分析](https://juejin.cn/post/6903421773232996365) + + [@Damien](https://github.com/ZengyiMa):Synchronized 是 iOS 开发中最常用的几种锁之一,想知道 Synchronize 的底层实现吗?本文会从 4 个具体问题出发,结合底层源码一步步为你揭开 Synchronize 的面纱,对想深挖的 iOS 底层开发者值得一读。 + +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 + +### 🐕 [My SwiftUI Pain: Creating Tappable Links in Text](https://medium.com/better-programming/swiftui-pain-links-in-text-b31319783c9e) + + [@EyreFree](https://github.com/EyreFree):SwiftUI 是苹果最新推出的声明式 UI 开发框架,借助它你可以在所有 Apple 平台上构建用户界面,很多开发者已经开始在个人项目甚至企业项目中使用这一技术。它很酷,但毕竟刚刚起步,很快一些开发者便会碰到一些坑或者问题,比如本文作者遇到的:如何优雅地在一段文本中给某些词语添加点击事件。作者分享了自己如何通过一步步的尝试最终得到了自己想要的效果,虽然最终效果看起来还不错,但他直言使用传统的 UIKit 与 AppKit 也许更方便,对 SwiftUI 感兴趣的朋友推荐一读。 + +### 🐎 [Xcode 12.3 盘点](https://mp.weixin.qq.com/s/F_47HZZn74Jjd1q99WDCHA) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Xcode 12.3 RC 版本解决的关于 xcodebuild,macOS 上的键鼠响应速度,文档查看器,Interface Builder,模拟器和 Swift 的几个问题。 + +## 工具 + +### [lowmad](https://github.com/bangerang/lowmad) + +[@老峰](https://github.com/GesanTung): 在开发调试中我们经常会使用 LLDB 命令 Debug,有时也有自定义 LLDB 命令的需求。lowmad 就是用于管理和生成 LLDB 脚本的命令行工具,它提供了简洁易用的命令来生成或安装脚本命令,另外作者开源了 [lldb_commands](https://github.com/bangerang/lldb_commands) 自定义 LLDB 命令,如 find_label、color、nudge 等,感兴趣的读者不妨来研究一哈。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2020/#141-2020.12.21.md b/Reports/2020/#141-2020.12.21.md new file mode 100644 index 000000000..87065fdad --- /dev/null +++ b/Reports/2020/#141-2020.12.21.md @@ -0,0 +1,149 @@ +# 老司机 iOS 周报 #141 | 2020-12-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 稳定性:编写会“失败”的测试](https://mp.weixin.qq.com/s/J2bZNxe5Xf9xL85ftIjG3g) +- [iOS 稳定性:更快地获得测试结果](https://mp.weixin.qq.com/s/iLmpcuFadWEekRqE3SM15w) + +## 新闻 + +### [苹果现已推出轻 App 码](https://developer.apple.com/cn/news/?id=4c7j45dp) + +[@Parsifal](https://github.com/ParsifalC):AppClip 是今年 WWDC 的一大亮点,现在苹果已经正式推出 AppClip 码,只需将 iPhone 靠近轻 App 码或用摄像头扫描该代码,即可打开您的轻 App 并快速完成需要的任务。 + +### [App Store 现已提供 App 的隐私标签](https://developer.apple.com/cn/news/?id=3wann9gh) + +[@Parsifal](https://github.com/ParsifalC):上个月苹果已经要求开发者必须在 12 月 8 号之前必须完善 App Store Connect 上的新隐私信息,而现在开发者所填写的隐私信息已经能够被 App Store 上浏览,帮助其了解该 app 的隐私保护做法。 + +## 新手推荐 + +### 🌟 🐎 [iOS | 事件传递及响应链](https://juejin.cn/post/6894518925514997767) + +[@J_Knight_](https://github.com/knightsj):本文图文并茂并结合代码介绍了 iOS 中的事件传递及响应链机制:确定第一响应者以及如何通过响应链来传递事件的过程。同时也推荐本文作者的另外一篇文章:[iOS | 响应链及手势识别](https://juejin.cn/post/6905914367171100680) :讲解了手势识别是如何通过响应链来传递事件的。 + +### 🐢 [iOS App Dev with SwiftUI Tutorials](https://developer.apple.com/tutorials/app-dev-training) + +[@Parsifal](https://github.com/ParsifalC):苹果官方推出的 iOS App 入门级教程,大约 4 个小时时间,让你体会如何用 SwiftUI 构建一个简单的 App。整个教程还是采用类似逐步闯关的形式进行,十分友好。 + +## 文章 + +### 🌟 🐕 [200 weeks of Swift](https://www.swiftbysundell.com/articles/200-weeks-of-swift/) + +[@zvving](https://github.com/zvving):[John Sundell](https://twitter.com/johnsundell) 是 Swift 开发者社区的知名创作者,他创建的 [Swift by Sundell](https://www.swiftbysundell.com/about/) 网站每周发布 Swift API 设计、访谈、最佳实践等优秀文章、播客。 + +不知不觉网站已经迎来第 200 期更新:作者在 Swift 学习过程中,常见问题的三处思考: + +- 更多使用值类型,除非需要共享可变状态 +- 用语义清晰的类型加强代码自注释 +- 面向协议编程也有代价,建议在不同方案中寻求平衡 + +[Swift by Sundell](https://www.swiftbysundell.com/about/) 网站有大量精彩内容,推荐 Swift 开发者订阅。 + +### 🌟 🐕 [都 2021 年了,你的动画还在用 setState ?](https://juejin.cn/post/6906670385941446670) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 中想要实现一个动画效果也是极其简单的,通过动画控制器,然后修改 State 即可。但这并非正确的姿势,本文通过 AnimatedBuilder 来实现动画,并解析其源码来分析为何如此,强烈推荐. + +### 🌟 🐢 [App 启动提速实践和一些想法](https://mp.weixin.qq.com/s/v2Ym9GPU4J8xCFFNYcpJhg) + +[@Leo](https://github.com/leomobiledeveloper):启动是门面,好的印象也有助于留存率提高。本文包含了 iOS 和 Android 的一些通用启动优化实践,作者从 H5 启动页、下载速度、线程调度、多线程模型等多个维度展开讲解,最后介绍了分析工具和自动化管控。一篇文章包含了 App 启动速度的方方面面,建议仔细阅读。 + +### 🐎 [No more [weak self], or the weird new future of delegation](https://olegdreyman.medium.com/no-more-weak-self-or-the-weird-new-future-of-delegation-f2a2745cd73) + +[@xiaofei86](https://weibo.com/xuyafei86):当我们使用闭包时总是要为了避免循环引用而使用 weak self。本文通过属性包装器将回调用带有泛型的类进行封装,使避免循环引用的职责由 API 的使用者转换到 API 的设计者身上。我们只需要将回调闭包用 @Delegate 标记就可让使用者避免使用 weak self,例如: +```swift +@Delegated var didUpdate: (String) -> Void + +textField.$didUpdate.delegate(to: self) { (self, text) in + self.label.text = text +} +``` +但由于 Swift 泛型的限制 1 个属性包装器只能处理固定数量的返回参数,所以作者同时编写了开源库 [Delegated](https://github.com/dreymonde/Delegated) 提供 @Delegate0、@Delegate1、@Delegate2 等多个属性包装器来支持不同参数数量的闭包。有兴趣的同学可以阅读原文了解。 + +### 🐕 [The future of SwiftUI navigation (?)](https://fivestars.blog/swiftui/programmatic-navigation.html) + +[@极速男孩](https://github.com/ztlyyznf001):SwiftUI 中没有了 ViewController 中 present 的方法,而是用了 NavigationLink 来替代。但是 NavigationLink 也存在着一些限制,比如在导航是向目标 view 传一个 dynamic 的值比较麻烦,然后 NavigationLink 声明的时候需要有一个 view 。这篇文章主要介绍了如何避免这些 NavigationLink 的限制。首先我们可以通过绑定一个状态或者一个 EmptyView 来解决 NavigationLink 需要一个 view 的问题。然后我们可以通过绑定一个对象的标识而不是 Bool 或者 Hashable 的值来解决向目标 view 中传值的问题。 + +### 🐕 [iOS 编译速度如何稳定提高 10 倍以上之一](https://juejin.cn/post/6903407900006449160) + +[@红纸](https://github.com/nianran):本文主要阐述了美柚团队在编译包上二进制化跟编译文件缓存上的探索。主要阐述了如下几种尝试方向: + +1. 利用 CCache 缓存优化编译产物,但是命中率低。 +2. cocoapods-binary 插件,在 pod install 的 pre_install hook 中拦截并在当前的 Pods 目录下打包二进制文件,本质上只是编译前移,还是会拖慢 pod install 速度。 +3. cocoapods-bin 双私有源,定制化两份源文件,一份源管理源代码、一份源管理静态库。具有原生 Cocoapods 的交互体验。 + +美柚团队在 cocoapods-bin 的基础上客制化 [cocoapods-imy-bin](https://github.com/MeetYouDevs/cocoapods-imy-bin) 插件。其插件具有以下特征点: + +1. 无入侵、无感知、不影响现有业务 +2. 支持 Swift 二进制化 +3. 支持 use_frameworks! +4. 轻量,不受耦合或组件化的影响 +5. 完全自动化,一键使用、无需手动操作,包含完整的 server 体系一条龙服务 +6. 含有二进制源码调试功能 + +> 由 [HapyCoder](https://github.com/HapyCoder) 推荐 + +### 🐎 [How expensive is DateFormatter](https://sarunw.com/posts/how-expensive-is-dateformatter/) + +[@水水](https://www.xuyanlan.com):相信大部分读者都知道创建 DateFormatter 的操作有非常昂贵的代价,但是大部分读者可能并不清楚到底它有多慢,哪个部分"贵",我们将在本文中一起找出答案。 + +### 🐕 [Apple Silicon(苹果芯片)从 DTK 到 M1 Mac 的入门总结](https://juejin.cn/post/6903091283204833287) + +[@老驴](https://www.weibo.com/6090610445):Apple 在今年 6 月的 WWDC 上正式宣告了从 Intel 到 Apple Silicon 为期两年的转变,这不仅仅是苹果产品的转变,更是整个行业从 x86 转向 ARM 的序章。本文的作者就帮你梳理了一下从开发者套件到 M1 芯片的最终产品的种种。 + +### 🐕 [M1 芯片有何不同?](https://mp.weixin.qq.com/s/Krmx_mYpDdRGKzN3zs3mYw) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍了 M1 芯片与其他芯片的不同之处、优秀的点及存在的问题。分别从如下几个方面进行了分析: + +- M1 芯片与 CPU 的关系 +- 苹果如何做到的统一内存架构(UMA) +- M1 用到了先进的 5 纳米制程&惊人的 160 亿个晶体管 +- M1 存在哪些问题 + +对于苹果来说,未来无疑将会长期进行大量的投入来对 M 系列芯片进行迭代,且其自有生态也保证了能够反哺 M 系列芯片的研发。也期待未来更为完善的 M 系列芯片。 + +### 🚧🐕 [Binary Size Woes](https://medium.com/nerd-for-tech/binary-size-woes-acb5d96f058a) + +[@四娘](https://kemchenj.github.io/):作为上一期 [Uber 工程师亲述使用 Swift 重写 App 的经历](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2020/%23140-2020.12.14.md#-uber-工程师亲述使用-swift-重写-app-的惨痛经历)的后续,有另外一位工程师出来介绍他们在缩减 Binary Size 方面做的努力,从与苹果的沟通,到工程方面的努力,包括编译参数的调优,追踪每一个 Pull Request 对于 Binary Size 的影响等等。 + +## 代码 + +### [Motion](https://github.com/b3ll/Motion) + +[@Damien](https://github.com/ZengyiMa):Motion 是一个完全用 Swift 编写的动画引擎,用于在 iOS,macOS 和 tvOS 进行动画和交互,并且完全支持 Apple 的 SIMD 特性。 Motion 可以轻松的创建动画(如弹簧,衰减等特性动画),也可以与手势识别相关的功能一起合作,以实现尽可能流畅和令人愉悦的交互。需要的做出精美的交互动画的同学值得尝试一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2020/#142-2020.12.28.md b/Reports/2020/#142-2020.12.28.md new file mode 100644 index 000000000..a25c4476e --- /dev/null +++ b/Reports/2020/#142-2020.12.28.md @@ -0,0 +1,120 @@ +# 老司机 iOS 周报 #142 | 2020-12-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [SiriKit 新变化:让 Intent 更强大](https://mp.weixin.qq.com/s/1CxDs8qHLzEHky6yWjdseQ) +- [iOS 稳定性:使用 XCTIssue 分析诊断测试失败问题](https://mp.weixin.qq.com/s/O-awF7t4jqJVPNdL-4jidA) + +## 文章 + +### 🌟 🐕 [2020 腾讯 Techo Park - Flutter 与大前端的革命](https://mp.weixin.qq.com/s/oflhVGs6lZBb--sOllMi8g) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 自发布到目前的 1.22 版本,已经走过了两年多的时间,这段时间以来,Flutter 一直都是跨端开发的风口浪尖,这个时候很多人不禁要问:那么未来还是么 ? 又该如何抉择 ?本文将给你这些问题的答案。 + +### 🌟 🐕 [arm64 objc_msgSend 源码解读](https://www.jianshu.com/p/1972010b88d7) + +[@Damien](https://github.com/ZengyiMa):objc_msgSend 方法是 Objective-C 的 Runtime 最核心的部分,你是否好奇底层的具体实现呢?本文的作者将会从汇编的角度把 objc_msgSend 的流程梳理一遍,包括 class 查找、缓存查找、缓存未命中的处理、taggedPointer 和 nil 处理。通过本文你会加深对象结构的布局认识以及对 arm64 汇编基础指令的学习也是一个很好的入门方式。 + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +### 🌟 🐕 [自定义 LLVM PASS 实现 函数耗时插桩统计](https://blog.0x1306a94.com/docs/llvm/ch01/01/) + +[@Leo](https://github.com/leomobiledeveloper):函数耗时分析对性能优化非常有用。目前常用的方法有两种:类似 Time Profiler 的堆栈采样分析和 hook objc_msgSend 的 OC 方法级别耗时分析。 + +耗时统计的本质是在函数头尾插入统计代码,能在运行时做当然也可以在编译期,这篇文章非常详细地讲解了如何在编译期间通过 LLVM PASS 实现函数耗时统计,不仅能覆盖 OC ,还能覆盖 C、C++ 等其他语言。 + +### 🐕 [HTTP/2 做错了什么?刚刚辉煌2年就要被弃用了!?](https://mp.weixin.qq.com/s/DLmg_SGGx0iyXepuhQB8pg) + +[@AidenRao](https://weibo.com/AidenRao):HTTP/2 的诞生,主要是通过多路复用技术,解决 HTTP/1.1 中的效率问题。但依旧存在很多不足,因为 HTTP/2 底层是采用 TCP 协议实现的,存在 TCP 队头阻塞,三次握手耗时过长问题。 + +所以,HTTP/2 推出没多久,业内就开始大力投入 HTTP/3 的研发与推广,HTTP/3 选择了一种新的技术方案,基于 UDP 协议改造的 QUIC (Quick UDP Internet Connections),作者会在后续的文章对 HTTP/3 进行详细介绍。 + +### 🐢 [What Every Computer Scientist Should Know About Floating-Point Arithmetic](https://floating-point-gui.de/) + +[@JonyFang](https://github.com/JonyFang):我们应该都写过类似这样的简单代码: +``` +0.1+0.2 +``` +与我们预期不同的是,它实际得到的结果是: +``` +0.30000000000000004 +``` +那么我们为什么会得到这个结果?如何处理这类问题?关于这类常见浮点数问题的解答,我们可以通过这个网站来找到答案。如果读者有兴趣,也可以提供更深入的解释,说明为什么浮点数必须如此工作以及可能还会出现其它哪些问题。 + +## 工具 + +### [Stringz iOS Apps Localization Editor](https://github.com/mohakapt/Stringz) + +[@Parsifal](https://github.com/ParsifalC):一款很好用的做 App 本地化的工具,UI 简明清晰,并且能自动识别工程内的所有本地化文件。 + +## 代码 + +### [CalendarKit](https://github.com/richardtop/CalendarKit) + +[@老驴](https://www.weibo.com/6090610445):日历,尤其是复杂的日历 UI 都是产品开发中费时费力的部分,很多时候,因为缩减开发周期,设计师也会选择跳过这部分转而使用原生的日历 App 来设计功能。这个 CalendarKit 就是由一位外国朋友开发维护的开源日历 UI 库,可以很方便的进行日历相关功能的集成。 + +> 由 [理查德·托普奇( Richard Topchii )](https://github.com/richardtop) 推荐 + +### [RealityUI](https://github.com/maxxfrazer/RealityUI) + +[@Parsifal](https://github.com/ParsifalC):如果你正在做 AR/VR 相关的开发,那么这个库一定对你很有帮助。RealityUI 提供了一系列的控件,让你可以像做 2D 应用一样开发 AR/VR 应用。 + +> 由 [XanderXu](https://github.com/XanderXu) 推荐,他长期研究 ARKit 相关技术,编写有 [ARKit Tips](https://xiaozhuanlan.com/u/xanderxu) 等多个专栏 + +## 音视频 + +### 🌟 🐕 [Apple tech-talks 10855 10856 10857](https://developer.apple.com/videos/play/tech-talks/10855) + +[@莲叔](https://github.com/aaaron7):Apple Developer 上推出的三个新的 Tech Talk,链接地址分别是: + +* [10855 Explore UI animation hitches and the render loop](https://developer.apple.com/videos/play/tech-talks/10855) +* [10856 Find and fix hitches in the commit phase](https://developer.apple.com/videos/play/tech-talks/10856) +* [10857 Demystify and eliminate hitches in the render phase](https://developer.apple.com/videos/play/tech-talks/10857) + +首先是第一讲,10855 介绍了在 iOS UI 开发中的 hitch(故障,卡顿) 的定义。 之后介绍了 iOS 渲染的 3-阶段模型。进一步阐述了 hitch 出现的原因和类型,最后还给出了衡量 hitch 对于用户体验影响的指标。 + +接下来的两讲分别讨论了如何解决 commit 阶段和渲染阶段的耗时: + +* 10856 首先介绍了 commit 阶段的定义, commit 阶段指的是当事件发生时, App 进程处理相关的 UI 更新到更新完成,提交到 Render 进程的时间。主要分为四个阶段: Layout、Display、Prepare、Commit。 Layout 和 Display 阶段往往就对应我们 View 的 layoutSubview 和 drawrect, 是最容易导致卡顿的点。之后,视频结合一个具体的案例来介绍了如何使用新的 instruments 来定位 commit 阶段的 hitch, 最后给出了一些最佳实践来避免耗时。 +* 10857 首先介绍了 render 阶段做的事情,然后引出了导致 render 阶段耗时的核心原因:离屏渲染。即 GPU 无法串行的执行所有绘制任务,而是需要中断主 pipeline 去先做一部分离屏渲染之后才能完成当前任务。之后介绍了如何使用 Xcode 的 View Hierarchy Debug 面板配合 Instrument 去找到当前介绍触发离屏渲染的元凶。最后,类似 10856, 本视频后续也给出了一些平时开发的最佳实践的建议。 + +这三讲的内容非常富有启发性,讲解 hitch 是一方面,更有价值的是借这个过程阐述了 iOS 的 UI 机制,让我们能够在做优化时候不仅能知其然,更能知其所以然。比如圆角、阴影到底为什么会影响帧率,Flutter 在 iOS 上对比原生的性能为什么相比 Android 差这么多这些问题,相信你看完都能有答案。 + +> 由 F010BE 推荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#143-2021.01.04.md b/Reports/2021/#143-2021.01.04.md new file mode 100644 index 000000000..50e53b48d --- /dev/null +++ b/Reports/2021/#143-2021.01.04.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #143 | 2021-01-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) 提出。 + +## 2021 + +[@Parsifal](https://github.com/ParsifalC):先说句迟到的新年快乐!2020 年终于过去了,崭新的一年也已经到来。在所有编辑的努力以及广大读者的支持下,很感恩周报又和大家一起度过一年。这是周报第 143 期,也是 2021 年的第 1 期,愿我们还能一起成长~ + +> 在朋友圈刷屏年终总结的时候,我们也做了个小活动 - [【请查收】你的 2020 年度 Github 报告](https://mp.weixin.qq.com/s/eBw4gS6-Y8ZYNReF3pbHng),感兴趣的读者可以参与下~另外,想加入周报读者群的朋友可以添加 iTDriverr 为好友。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [Sirikit 和 Shortcuts 的新特性](https://mp.weixin.qq.com/s/gw35JpL_JhGXIjVybxNM3Q) +- [SiriKit 新变化:评估优化 App 的语音交互](https://mp.weixin.qq.com/s/U9dgIg-cJn0kAWI4Uj7V7A) + +## 文章 + +### 🐕 [Flutter 中一行文字到屏幕上,渲染全过程!](https://mp.weixin.qq.com/s/RAM3GbJ_vjnC_JcgNrFKtg) + +[@极速男孩](https://github.com/ztlyyznf001):flutter 中除了我们熟悉的 StatelessWidget 和 StatefluWidget 两个 Widget 以外,还有InheritedWidget、 RenderObjectWidget 这种 Widget。 这篇文章主要通过一步步的解析源码中如何使用 RenderObjectWidget 中的 RenderParagraph 来将 RichText 渲染到屏幕中的。然后通过去自定义一个文本的组件来进一步了解如何使用 RenderObject 来渲染文字的。 + +### 🐢 [今日头条优化实践: iOS 包大小二进制优化](https://mp.weixin.qq.com/s/TnqAqpmuXsGFfpcSUqZ9GQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):苹果对 iOS App 大小有严格的限制,包括下载大小和可执行文件的大小。本文从背景知识和面临的实际问题出发,介绍了 `__TEXT` 段迁移技术及减少下载大小的原理,描述了我们在实践过程中遇到的问题,并从源码的角度详细分析了问题产生的根本原因以及解决方式,解答了相关疑问和上线后遇到的问题。需要注意的是,由于苹果在 iOS 13 已经对下载大小做了优化,所以本文方案无法再对 iOS 13 及更高系统的设备的下载大小进一步优化。 + +### 🐕 [百度App Objective-C/Swift 组件化混编之路(二)](https://mp.weixin.qq.com/s/xA3g0GdNvfKNgfvG6imEvw) + +[@JonyFang](https://github.com/JonyFang):本文主要以依赖管理工具 EasyBox 工具链为支撑,介绍百度 App 如何实现组件内的 Objective-C/Swift 混编、单侧、二进制发布和集成,以及组件间的依赖和引用。 + +对于开发者来说,不用去关心混编是如何实现的,只需要和正常开发一样,组件内引用所需的头文件(#import )或 module(@import ModuleXX),组件间在声明依赖后亦可直接引用头文件或 module ,EasyBox 工具链会根据源码文件或配置进行 module 化和 Xcode Build setting 相关的处理。 + +对于混编组件的二进制打包,开发者们也不用去关心如何处理编译产物,诸如 `*-Swift.h`、二进制架构、`*.swiftmodule`、`*.interface` 等,EasyBox 工具链打包命令 box package 会全权处理,降低开发者们的配置难度和协同成本。 + +### 🐎 [2020 年文章总汇](https://mp.weixin.qq.com/s/71z6vbkxjzk8SzJCmZeFlw) + +[@J_Knight_](https://github.com/knightsj):本文是一瓜技术公众号在2020年的文章汇总,同时也介绍了其他原创作者的信息以及分享的专题文章列表。而且在文章底部有一个关于读者喜爱的专题的投票,感兴趣的读者可以参与一下。 + +### 🐎 [使用 Swift 编写 CLI 工具的入门教程](https://mp.weixin.qq.com/s/V4IdsYUouKGr68ULyb88Qw) + +[@Damien](https://github.com/ZengyiMa):Swift 的推出提高了 iOS 的开发效率和体验,本文会介绍 Swift 在编写 CLI(command line tool) 方面的用途,文章会详细介绍开发 CLI 的方方面面,如 SPM 搭建开发框架、参数解析、单测的编写、工具安装等等。希望通过本文,读者们可以将 Swift 应用到更多方面。 + +### 🐕 [图解 Mach-O 中的 got](https://www.jianshu.com/p/55d82172a9f8) + +[@Leo](https://github.com/leomobiledeveloper):本文介绍了什么是 got、got 在 mach-o 中的位置、函数符号如何与 dyld_stub_binder 进行关联,以及如何一步步查找动态库符号的值。图文并茂,可让读者了解动态库符号的绑定原理。 + +> 推荐人:[silan-liu](https://github.com/silan-liu) + +### 🐕 [Thresh 今天正式开源,有望成为替代 RN 的一种长期方案](https://mp.weixin.qq.com/s/E2lhodazRZRVPUGafY92xA) + +[@Parsifal](https://github.com/ParsifalC):有点标题党的意思,不过文章还是值得一看。[Thresh](https://github.com/ymm-tech/thresh) 其实只是本篇文章的一部分,整篇文章内容围绕在「满帮团队在大前端效率提升实践的诸多尝试」上,包括基于 RN 封装的 MBRN,基于 Flutter 渲染的 Thresh 框架,本地 H5 方案,Android 端插件化方案,基于自定义 DSL 的搭建化框架 DaVinci,随着业务场景的多样化和业务需求迭代的高频性,这些方案可能是各个技术团队都会去摸索的。其中,Thresh 是利用 JSC + Flutter Engine 完成的动态化能力,这样也算曲线弥补了 Flutter 关闭 AOT 下的动态能力缺陷,而 Flutter 独立的渲染引擎也保持了多平台一致性的优势。至于值不值得,个人觉得还是见仁见智,结合团队实际情况来看。 + +## 工具 + +### [Downloader-for-Apple-Developers](https://github.com/vineetchoudhary/Downloader-for-Apple-Developers) + +现在 Xcode 已经达到 10+ GB ,这个软件利用 aria2 可以多线程下载高速 Xcode,对于经常下载 Xcode 失败的同学可以试试~ + +> 由 [iHTCboy](https://github.com/iHTCboy) 推荐 + +### [DevUtils-app](https://github.com/DevUtilsApp/DevUtils-app) + +[@Parsifal](https://github.com/ParsifalC):由 Swift 编写的一个聚合了许多开发过程中会用到的小工具的 Mac App,比如各种编码解码、JSON 格式化、时间戳转换等等。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#144-2021.01.11.md b/Reports/2021/#144-2021.01.11.md new file mode 100644 index 000000000..960c8a04e --- /dev/null +++ b/Reports/2021/#144-2021.01.11.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #144 | 2021-01-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [WWDC20 CoreImage 专题](https://mp.weixin.qq.com/s/azSk79UwWQaXY6vnZyifkA) +- [Mac Catalyst 的新功能](https://mp.weixin.qq.com/s/zlmsfTgUtJNKbBZxOgn8KQ) + +## 新闻 + +### [The 2020 State of the OCTO—VERSE](https://octoverse.github.com/) + +[@Parsifal](https://github.com/ParsifalC):GitHub 官方的 2020 年度报告,作为聚集了最多全球开发者的开源平台,GitHub 这次从社区、生产率以及安全三个方面,展示不同的数据来总结过去的 2020 年。 + +## 新手推荐 + +### 🐎 [the different types of self in Swift](https://www.jessesquires.com/blog/2020/12/28/the-different-types-of-self-in-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章简单的介绍了在 Swift 三种 self 的不同用法,包括 self. 前缀,.self 后缀和 self 类型。 + +## 文章 + +### 🌟 🐎 [从 Weex 到Web,性能逆势如何破局?](https://mp.weixin.qq.com/s/0EluripD7qNZtx7-aCstkw) + +[@Damien](https://github.com/ZengyiMa):今年双十一飞猪会场从前端渲染引擎从 Weex 回归到 WebView,在迁移变化的同时,同时性能指标上的优化也不能落下,飞猪团队为了极致的性能体验,使用了端侧预渲染、服务端渲染、页面快照、SPA 单页应用模式以及资源&数据预缓存等方案来进行极致的优化,同时取得的效果也是很惊艳的:日常会场首屏耗时环比降低 25%,较 618 以及国庆会场首屏耗时环比降低 20%。对 WebView 优化相关的同学推荐阅读此文,或许可以找到灵感。 + +### 🌟 🐎 [如何持续的自我提升](https://mp.weixin.qq.com/s/ibezFl5p62yDlb8HS6NyJw) + +[@J_Knight_](https://github.com/knightsj):本文作者结合自己的实际学习案例分享了 “如何自我学习/提升”的问题,整体的学习思路如下: +- 初识:被灌输知识的过程。 +- 思考:主动消化知识的过程。 +- 探索:手动进行研究的过程 +- 总结和超越:完成自我提升的过程 + +而且文章还提到了费曼学习法,感兴趣的读者可以阅读一下本文。 + +### 🌟 🐢 [Preventing Data Races in the Swift Concurrency Model](https://gist.github.com/DougGregor/10db898093ce33694139d1dcd7da3397) + +[@享耳先森](https://github.com/iblacksun):并发一直是现代语言的重要部分,根据 Swift Roadmap,预计 Swift 6.0 将推出基于协程的 async/await 模型及新的 Actor Isolation 并发模型,Swift 核心成员 Doug 写了一篇文章,介绍 Swift 加入了新的并发模型之后,有哪些方式可以避免数据竞争。 +> 参考: +- [Swift Concurrency Roadmap](https://forums.swift.org/t/swift-concurrency-roadmap/41611) +- [Protocol-based Actor Isolation: Draft #2](https://docs.google.com/document/d/1BEO6QwzcYCUhaGyA-WRoM_phRa7O7mGPNIMdSV4StEE/edit) + +### 🐕 [8 Common SwiftUI Mistakes - and how to fix them](https://www.hackingwithswift.com/articles/224/common-swiftui-mistakes-and-how-to-fix-them) + +[@zvving](https://github.com/zvving):SwiftUI 之于 UIKit,就像 objc 之于 swift:二者在设计思想、具体实现方面有诸多关联,却又是底层逻辑完全不同、『推倒重建』的两类事物。 + +带着 UIKit 已有经验去学习 SwiftUI,能快速上手的同时也会掉一些不易察觉的坑:细节不符合预期、实现冗余、写法错误而不自知……本文作者总结了 SwiftUI 新手常犯的 8 类错误,解决问题的同时,帮助你更好的理解 SwiftUI 的独特之处。 + +### 🐕 [更现代的 Swift API 设计](https://mp.weixin.qq.com/s/DhtYVLNq5IRu2eUEktXgJg) + +[@EyreFree](https://github.com/EyreFree):Swift 是一门简洁同时富有表现力的语言,这其中隐藏着众多的设计细节。本文通过提出一个 Struct 的语义问题,在寻找答案的过程中逐步引出 DynamicMemberLookup 应用、PropertyWrapper(WWDC19 的 PropertyDelegate) 的实现原理以及 SwiftUI DSL 中 PropertyWrapper 的应用,来一起看看更现代的 API 背后的设计过程。希望这些理念能帮助你用 Swift 在项目中设计出更现代、清晰度更高的 API。 + +### 🐕 [一文了解 Xcode 生成「静态库」和「动态库」 的流程](https://mp.weixin.qq.com/s/WH8emrMpLeVW-LfGwN09cw) + +[@JonyFang](https://github.com/JonyFang):本篇主要解答了 iOS App 的链接是由谁完成的。作者通过创建 Demo 来实践 Xcode 生成`静态库`和`动态库`的流程,过程中分析 [Report navigator](https://help.apple.com/xcode/mac/11.4/#/dev21d56ecd4) 页面中详细的 Build(构建)日志,得到的结论是: +- 只有在 `动态库` 的链接过程会依赖 `clang Driver`; +- 真正执行生成 `静态库` 与 `动态库` 的任务的是 `libtool` 和 `ld64`。 + +## 工具 + +### [iSimulator](https://github.com/wigl/iSimulator) + +[@红纸](https://github.com/nianran):iSimulator 是一款用于操控 Xcode 模拟器的 GUI 工具,其包含基础增删模拟器、展示应用安装列表、快捷导航应用的 Sandbox/Bundle 文件夹、APP 多模拟器同步装载等多种功能。还在烦恼找不到模拟器安装、文件夹路径的小伙伴可以尝试一下此工具。 + +## 代码 + + +### [滴滴DoKit For Flutter正式开源,功能及核心实现解读](https://mp.weixin.qq.com/s/QLwE-ehvp9dHW4QJmAWI9g) + +[@邦Ben](https://weibo.com/linwenbang):本文介绍了滴滴开源的 DoKit,DoKit 是一个针对 Flutter 的产研工具包,集成了各种丰富的小工具,UI、网络、内存、监控等等。本文也简单介绍了一下原理,但是实际实现方式还是仔细看代码更为确切。作为辅助类的工具,可以在调试方面提供到比较实时的反馈(例如测试找你反馈bug的时候,不用连个线去 debug 或者传日志一点点看),有需要可以一用。 + +- Github 地址: +https://github.com/didi/DoraemonKit/tree/master/Flutter + +- Pub 仓库地址: +https://pub.dev/packages/dokit + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#145-2021.01.18.md b/Reports/2021/#145-2021.01.18.md new file mode 100644 index 000000000..0ad6225aa --- /dev/null +++ b/Reports/2021/#145-2021.01.18.md @@ -0,0 +1,122 @@ +# 老司机 iOS 周报 #145 | 2021-01-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) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [RealityKit 的新变化:让构建的场景更逼真、趣味](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247488833&idx=1&sn=0ac21f58f9a4138df4f7b18b205880d9) +- [探索 ARKit 4](https://mp.weixin.qq.com/s/5fKY9q071JcBWK4GVwH0Vg) +- [美化 Mac Catalyst App](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247488690&idx=1&sn=e3a5a68b7782592583144fb8f3afb6e9&chksm=eaa28bb9ddd502afeb72166541a8975f6dc651e186ba8b6d6fee7ae60680e884617b58f11a89&scene=178&cur_album_id=1499758126315683840#rd) + +## 新闻 + +### 🌟 🐕 [Flutter 2021 RoadMap](https://github.com/flutter/flutter/wiki/Roadmap) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):按照国际惯例,最近 Flutter 官方放出了 2021 年的 Flutter RoadMap,透过这份 RoadMap 我们可以清晰的了解官方团队今年的工作,2021 年 Flutter 官方主要发力在以下几点: + +- 空安全 +- Android & iOS 资源下载优化,新特性支持,降低混合开发复杂度等 +- Web & Desktop +- 开发体验提升 +- 生态建设 +- 质量提升 +- 新功能开发 +- 版本发布节奏,全年 4 个稳定版本,每月一个 beta 版本 + +## 文章 + +### 🌟 🐕 [抖音品质建设 - iOS 安装包大小优化实践篇](https://mp.weixin.qq.com/s/LSP8kC09zjb-sDjgZaikbg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):包大小是 App 重要的基础体验指标之一,本文为大家介绍了抖音在优化安装包大小方向做的一些探索和尝试,包括: + +- AppStore 对安装包的限制沿革以及 App 花费精力优化 iOS 安装包将获得什么收益 +- 如何去分析一个安装包 +- 如何在线下准确把控安装包大小对 AppStore 上影响 +- 常见的一些包大小优化方式 +- 一些影响包大小的编码习惯 + +### 🐕 [Qcon 演讲实录 | XQUIC 与多路径传输技术 Multipath QUIC](https://mp.weixin.qq.com/s/3dnidnhCW-61PS5Stlb0Iw) + +[@老驴](https://www.weibo.com/6090610445):随着移动互联网的发展,传统 TCP 越来越难以满足新的移动互联网需求,于是增强型 UDP 越来越受到大家的注意,获得了高速发展。阿里团队的这篇文章介绍了基于 QUIC 标准的阿里自研版本 XQUIC 以及在此基础上的 Multipathh QUIC。虽然截止到发稿时,阿里尚未开源 XQUIC,但是其中的一些设计思路也值得借鉴。 + +### 🐕 [手机阿里端智能方案演进](https://mp.weixin.qq.com/s/oT5jQYQkQd-09ktFXS_OYg) + +[@莲叔](https://github.com/aaaron7):端智能可以说是最近两年移动端最具有未来感的技术方向。从苹果倾力打造的 CoreML 日趋成熟,到 Google 针对 TFLite 的持续优化以及推出类似 MediaPipe 这样的端侧 AI 框架,都代表这个方向并不是空穴来风的, 而是实打实的场景和业务赋能。端智能从场景上维度,一般分为两大类,首先是视觉图像类,主要通过人脸、手势、前后景分割等模型服务于拍摄、互动、相册等应用,已经日趋成熟,能力也越来越强。而另一类则是策略类,即是通过算法对端上的用户行为数据进行实时的挖掘和计算,来预测用户对于内容、功能的喜好或者耐受度,进而匹配相应的措施来引导用户。后一种还不算成熟,但阿里整体在后一种场景上已经有了比较多的探索与收获。 + +本篇文章围绕 1688 团队决策类场景的探索,介绍了决策类端智能工程化的核心组成部分,虽然没有讲太多技术细节,但对于端智能而言,方案和场景其实才是最核心也是最有价值的。强烈建议对于希望在业务中应用和落地端智能的团队参考。 + +### 🐕 [iOS 性能监控:Runloop 卡顿监控的坑](https://mp.weixin.qq.com/s/vMRQ0VuHLxpaY9oCNd5G8w) + +[@Leo](https://github.com/leomobiledeveloper):本文通过分析 __CFRunLoopDoObservers 函数 和 CFRunLoopAddObserver 函数的内部逻辑,分析了网络上广泛流传的 Runloop 卡顿监测方案 存在低可用性问题的原因,并给出了一份高可用的 Runloop 卡顿监测方案。 + +### 🐕 [Building On-Call Culture at GitHub](https://github.blog/2021-01-06-building-on-call-culture-at-github/) + +[@AidenRao](https://weibo.com/AidenRao):如何建立高效的 on-call 机制,GitHub 在 blog 分享了他们在这方面的经验。 + +- 推出新系统,将文件和服务进行关联,服务分配到团队。团队发生变化,文件所有权也更容易跟着变化。 +- 将所有警报进行拆分, 分配到各团队,清理不再需要的警报。 +- 做好生活与工作的平衡,不同时区的团队成员,一起进行 24 小时轮值。on-call 顾不过来时,团队成员也需要相互支持。 +- 没有 on-call 任务的时候,更新运行手册,调整嘈杂的警报,持续改善 on-call 体验。 + +### 🐕 [从 Mach-O 角度谈谈 Swift 和 OC 的存储差异](https://www.jianshu.com/p/ef0ff6ee6bc6) + +[@Damien](https://github.com/ZengyiMa):本文从二进制的角度初步介绍了 Swift 与 OC 的差异性,包括 Swift 在可执行文件中函数表的存储结构、函数的存储结构等,作者从动态调用开始引入思考,逐渐探索 Swift 的二进制存储。以及从最终的结论来证明 Swift 动态调用的局限性。对于 Swift 初学者有很强的学习价值。 + +### 🐎 [Keep private information out of your logs with Swift](https://olegdreyman.medium.com/keep-private-information-out-of-your-logs-with-swift-bbd2fbcd9a40) + +[@EyreFree](https://github.com/EyreFree):在实际的 App 开发 & 维护过程中,我们经常会遇到将用户的错误日志等数据上传到服务端来进行排查的场景,但在这些日志中可能会包含一些用户的敏感信息,绝大部分情况下我们排查软件错误不需要了解这些具体的用户隐私数据,本文介绍了在 Swift 中如何利用 `Property Wrapper` 将敏感数据从日志中排除,快来了解一下吧。 + +### 🐕 [ARM64 撬开逆向大门](https://mp.weixin.qq.com/s/8HQd6st7ZvUC5f4TZ1cBWg) + +ARM64 相比我们都不陌生,苹果较新的机型基本都是基于 ARM64 架构的。掌握一些 ARM64 的汇编只是对我们日常开发很有帮助,例如一些 crash 在系统库里面的,利用汇编调试会很有帮助。本文虽然开篇是针对安卓来说的,但文中关于 ARM64 汇编的介绍,以及一些指令的用法等其实也是通用的。 + +### 🐕 [Flutter 的性能分析、工程架构与细节处理](https://mp.weixin.qq.com/s/0R5UnVFlVbLKoV__s66HnA) + +[@邦Ben](https://weibo.com/linwenbang):有道智云技术团队将从性能、架构、适配等多个方面进行讲解实践过程中的一些实际问题,值得一看。其中还包括了 Flutter Web 的 Demo,Flutter Web Google 还在持续优化,这部分可以拭目以待。文章中也提及到了 `Flare` (动画制作工具)制作 Flutter 动画,如果对动画方面有需求的,也可以单独进行了解。 + +- Flare 网址:https://www.2dimensions.com + +### 🐎 [如何排查无法复现的系统内部 Crash?](https://juejin.cn/post/6916048281113985032) + +[@水水](https://www.xuyanlan.com): 作者从自身遇到的一个 Crash 出发,记录了从分析、假设、模拟复现、运行分析、修复 Crash 的一个过程。是非常好的一个 Crash 解决方法。希望能够给读者有所启发。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> **百度网盘 - 北京 - iOS/Android/Flutter/音视频 研发工程师** +> +> 百度网盘是行业 Top1 的云存储产品,已经为超过 7 亿用户提供云服务。一刻相册是「百度网盘」团队出品的云相册 App,经过一年多的发展,已经跃居相册行业 Top2。部门有完善的分享培训体系,有业务和技术挑战。目前,> 部门业务处在新的高速发展时期,长期大量招人,实习、应届、社招经验不限,职级不限,欢迎投递简历。 +> +> 简历发送至 xuyafei01@baidu.com,或者添加微信 xyf65803387 了解细节。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#146-2021.01.25.md b/Reports/2021/#146-2021.01.25.md new file mode 100644 index 000000000..e489816e5 --- /dev/null +++ b/Reports/2021/#146-2021.01.25.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #146 | 2020-01-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) 提出。 + + +## 文章 + +### 🌟 🐕 [离线 Hybrid 容器如何做到接近 100% 秒开?](https://mp.weixin.qq.com/s/inAFLg85TfmXOWXS50pEfg) + +[@JonyFang](https://github.com/JonyFang):普惠四轮出行业务技术团队针对 Hybrid 容器进行的技术升级,本篇主要的脉络如下: + +- 目前 Hybrid 容器遇到的问题 +- 问题分析及解决方案 +- 每个点的详细方案和线上效果 +- 整体优化后的线上效果 +- 后续规划和进一步探索 + +从发现问题、针对问题提出解决方案、到上线效果分析,整个实践的过程和思考,值得一看。 + +### 🌟 🐕 [非礼勿视!Objective-C 里的 eval](https://mp.weixin.qq.com/s/6dwi96sQ222KVsgbt4FW5A) + +[@AidenRao](https://weibo.com/AidenRao):本文从一个 CTF 题目展开,从官方文档结合反汇编分析,挖掘出语言和运行时鲜为人知却可能被滥用的机制。谁曾想到编译型的语言竟然也内置支持 eval(允许将输入的字符串变量当作代码动态执行)? + +### 🐎 [First stable release of SwiftWasm 5.3 is now available](https://forums.swift.org/t/first-stable-release-of-swiftwasm-5-3-is-now-available/41868/7) + +[@xiaofei86](https://weibo.com/xuyafei86):[WebAssembly](https://developer.mozilla.org/zh-CN/docs/WebAssembly) 是一种新的[低级语言](https://zh.wikipedia.org/zh-hans/低级语言)(机器代码或汇编语言),旨在让开发者能运用自己熟悉的编程语言编译,再藉虚拟机引擎在浏览器内运行。其开发团队来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。 + +2019 年 WebAssembly 被 W3C 推荐为 Web 的第四种语言,目前支持 C、C++、Rust、Go、Java、C#。现在,随着 SwiftWasm 5.3 第一个稳定版本现的发布,Swift 也被纳入 WebAssembly 的支持范围,这意味着您可以构建完全用 Swift 编写的浏览器应用程序。有兴趣在更多平台应用 Swift 的读者可以阅读原文详细了解。 + +### 🐕 [Flutter 高性能、多功能的全场景滚动容器,一定要看!](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247486656&idx=1&sn=81e14ac99be2d75b5842529b8c694244&chksm=fd54d8d1ca2351c7ffe5e981aba49443b6aae2642bda6ac7a8951eabddd8a4307adcb98f6991&scene=0&xtrack=1#rd) + +[@邦Ben](https://weibo.com/linwenbang):闲鱼技术设计了一套流式场景下通用的页面布局解决方案 PowerScrollView。主要为解决性能以及曝光等基础需求。性能优化方面从局部刷新,分帧渲染优化。从文章实践结果来说:有不错的优化,但是在低端机上上表现依旧需要继续优化。可惜方案还没有开源,这里大家做优化的话可以进行思路上的参考。 + +### 🐕 [HTTPS 温故知新](https://mp.weixin.qq.com/s?__biz=MzkzMjExMTAwMQ==&mid=2247488855&idx=1&sn=ad55f4338dd53b9f92ac0fa53b7df6f2&chksm=c261e2a1f5166bb79f77fa14b9cf987c9a7c5f3ec7b4bddf75807f06cf6bdda8d7ada71307a3&scene=178&cur_album_id=1501778677406203906#rd) + +[@水水](https://www.xuyanlan.com): 一缕殇流化隐半边冰霜的 HTTPS 温故知新系列文章,相信读者们肯定能感受到『温故』亦或 『知新』。 HTTPS 温故知新系列篇合集入口: https://halfrost.com/tag/https/ + +### 🐕 [让 Flutter 在鸿蒙系统上跑起来](https://mp.weixin.qq.com/s/vTWZRaxvsOS_VRjfh6l4FQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):鸿蒙系统 (HarmonyOS)是华为推出的一款分布式操作系统,那么如何在保证开发迭代效率的前提下,以相对低的成本将移动应用快速移植到鸿蒙平台上呢?美团外卖 MTFlutter 团队近期做了一次技术探索,成功地实现了 Flutter 对于鸿蒙系统的原生支持。 + +### 🐢 [百度App Objective-C/Swift 组件化混编之路(三)- 实践篇](https://mp.weixin.qq.com/s/-rBtXtkelcPQBMjQhwu07w) +本文是『百度App Objective-C/Swift 组件化混编之路』系列文章的第三篇,本文重点介绍了百度App 组件化 Objective-C/Swift 组件化混编改造实践,感兴趣的同学可以看下,建议先看阅读完前两篇文章: +[百度App Objective-C/Swift 组件化混编之路(一)](https://mp.weixin.qq.com/s?__biz=MzUxMzk2ODI1NQ==&mid=2247484177&idx=1&sn=df772d2134ad814bf0f8fafb883d8f77&chksm=f94c5201ce3bdb1787ea4f310de02b0a967983a8de3647034a2dc3c26c520fe493632aeb8be3&scene=21#wechat_redirect) +[百度App Objective-C/Swift 组件化混编之路(二)- 工程化](https://mp.weixin.qq.com/s?__biz=MzUxMzk2ODI1NQ==&mid=2247484191&idx=1&sn=b78cab8a22733e61e4a8b92e36f43ea5&scene=21#wechat_redirect) + +## 工具 + +### [swift-create-xcframework](https://github.com/unsignedapps/swift-create-xcframework) + +[@四娘](https://kemchenj.github.io/):基于 xcodebuild 封装的一个 CLI 工具,可以将 Swift Package 打包成 XCFramework: + +```shell +swift create-xcframework +``` + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#147-2021.02.01.md b/Reports/2021/#147-2021.02.01.md new file mode 100644 index 000000000..821e24c6e --- /dev/null +++ b/Reports/2021/#147-2021.02.01.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #147 | 2021-02-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) 提出。 +## 新闻 + +### 🌟 🐕 [AppTrackingTransparency 的要求即将生效](https://developer.apple.com/cn/news/?id=8rm6injj) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在初春发布的 iOS 14、iPadOS 14 和 Apple tvOS 14 更新版本中要求 APP 通过 AppTrackingTransparency 证的用户同意来获取广告标识符,在未征得同意的情况下,设备的广告标识符都为零。同时增加 app 的“私人点击测量”支持,来让用户可以测量网站的广告活动。 + + +## 文章 + + +### 🐢 🌟 [抖音品质建设 - iOS启动优化《实战篇》](https://mp.weixin.qq.com/s/ekXfFu4-rmZpHwzFuKiLXw) + +[@Leo](https://github.com/leomobiledeveloper):文章从启动监控,分析工具以及最佳实践三个角度详细介绍了抖音 iOS 客户端是如何做启动优化的。即包括了启动任务管控,预加载等常规方案,又介绍了动态库懒加载,background fetch 等非常规方案,推荐阅读。 + +### 🐕 🌟 [基于 Flutter 的移动中间件体系和音视频技术](https://mp.weixin.qq.com/s/9b4T9dU5PUaUSzwi32GSGQ) + +[@zvving](https://github.com/zvving):由 UC 团队为大家带来的 Flutter 引擎技术沙龙分享第三篇,从播放器视角分析如何拆分、共建 Flutter 业务,并总结在业务定制、播放性能、高效视频编辑部分的实践经验。有相关领域探索诉求的小伙伴不容错过。 + +### 🐕 [谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色(上)](https://mp.weixin.qq.com/s/PgdH8x8nrC9SRU6nMErH8Q) + +[@老驴](https://www.weibo.com/6090610445):iOS 开发者不可避免的就是写各色各样的 UI 了,而写 UI 又不能避免用到 UIKit 和 CoreAnimation 这两个 framework 了。只是平时大家也只是用 UIKit 和 CoreAnimation,很少会去深究背后是怎么工作的。这篇文章就很好的介绍了 iOS 渲染是怎么工作的。文章还有下部分,见参考链接。 + +参考链接: +[谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色(下)](https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng==&mid=2458325030&idx=2&sn=473e586bfde4b73d70fe0a57d66dfe28&chksm=870e1f3fb07996296305bafcc8a0801b0c57619635a3bc7a8e4b836e7fc6553e8b92879d3b78&cur_album_id=1700205981982343172&scene=189#rd) + +### 🐕 [WKWebView 请求拦截探索与实践](https://mp.weixin.qq.com/s/u1fzioTZFLUpDEhSzUMRug) + +[@JonyFang](https://github.com/JonyFang):想要达到 WebView 加载速度提升的技术方案之一是离线包技术,离线包技术中最关键的环节是拦截 WebView 发出的请求将资源映射到本地离线包。而对于 WKWebView 的请求拦截,iOS 原生并没有提供直接的请求拦截能力,本篇主要是围绕 WKWebView 的请求拦截进行展开。 + +网易云音乐大前端团队通过将 iOS 原生 `WKURLSchemeHandler` 与 `JavaScript` 脚本注入结合的方式,实现了 WKWebView 在离线加载、免流等业务中需要的请求拦截能力,解决了拦截过程中可能存在的重定向、请求体丢失、Cookie 不同步等问题,并能以页面为维度进行拦截隔离。 + + +对于体积较大的网页,离线包技术能够一定程度上明显的降低网络加载耗时的问题。 + +### 🐕 [听说你想写个虚拟机(一)?](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247484228&idx=1&sn=704addfc6b1e50c7dedf1ad61787358d&chksm=cf558c8cf822059a11e9062f73266ebc32562f2437a29c9a06ce4ff9d298b637b6b699edd20d&token=1309308849&lang=zh_CN#rd) + +[@老驴](https://www.weibo.com/6090610445):大部分开发者应该都或多或少用过虚拟机,但是也很少有人去深究过虚拟机是怎么工作的。这篇文章就带你从零开始写虚拟机,看懂这篇文章所需要的,只是一点基础的 C 语言知识。作者在文章最后也把代码放到了 Github 上,有兴趣的话可以来学习一下。 + +### 🐕 [关于 SwiftUI State 的一些细节](https://onevcat.com/2021/01/swiftui-state/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了作者在 State 的使用上发现的一个问题,并通过研究 State 的实现机制来给出了相应的解决方案。也同时类比了 StateObject、Binding 和 ObservedObject 在使用上的相同点和不同点。 + +### 🐢 [Core Animation 动画全析](https://juejin.cn/post/6920908515758309383#heading-41) + +[@AidenRao](https://weibo.com/AidenRao):《[iOS 核心动画高级技巧](https://zsisme.gitbooks.io/ios-/content/index.html)》是一本不错的书,文章作者对其总结的很精髓,并附上了很多自己的 demo,很适合做学习动画的阅读资料。 + +## 工具 + +### [Sloc Cloc and Code](https://github.com/boyter/scc) + +[@EyreFree](https://github.com/EyreFree):SCC 是一个非常快速精确的代码计数器,一个用 Go 开发的类似于 cloc、sloccount 和 tokei 的工具。用于计算许多编程语言中源代码的物理行、空行、注释行和物理行。 + +## 代码 + +### [SwiftUIKitView](https://github.com/AvdLee/SwiftUIKitView) + +[@四娘](https://kemchenj.github.io/):这个库让我们可以在 SwiftUI 很方便地直接使用 UIKit 的 View: + +```swift +import SwiftUI +import SwiftUIKitView + +struct SwiftUIwithUIKitView: View { + var body: some View { + NavigationView { + UILabel() // <- 这里可以使用任何 `UIKit` 的 view. + .swiftUIView(layout: .intrinsic) // <- 这个函数会返回一个 SwiftUI 的 `View`. + .set(\.text, to: "Hello, UIKit!") // <- 使用 KeyPath 来更新数据 + .set(\.backgroundColor, to: UIColor(named: "swiftlee_orange")) + .fixedSize() + .navigationTitle("Use UIKit in SwiftUI") + } + } +} +``` + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#148-2021.02.08.md b/Reports/2021/#148-2021.02.08.md new file mode 100644 index 000000000..b07ec1034 --- /dev/null +++ b/Reports/2021/#148-2021.02.08.md @@ -0,0 +1,156 @@ +# 老司机 iOS 周报 #148 | 2020-02-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) 提出。 + +## 通知 + +[@Parsifal](https://github.com/ParsifalC):这是春节前最后一期周报了,给大家拜个早年,我们节后再见! + +## 文章 + +### 🌟 🐕 [今日头条 iOS 安装包大小优化 - 新阶段、新实践](https://mp.weixin.qq.com/s/oyqAa8wKdioI5ZDG5LjkfA) + +[@Damien](https://github.com/ZengyiMa): 随着业务的发展,App 包大小也会水涨船高,为了更好的用户体验,减少用户等待时间,如何减少包大小是 App 各项优化指标中重要的一环。经过三年的发展,今日头条平台架构为我们带来更多的优化包大小手段: + +- 使用合适的资源压缩配置 +- 使用 RGB with palette 压缩图片 +- Assets.car 合并 +- 文本文件压缩 +- 使用 -Oz 编译参数 +- 使用链接时优化 LTO +- 修正 Exported Symbols 配置 +- 属性动态化 +- __TEXT 段迁移 +- 二进制段压缩 + +并且每项优化的收益也做了详尽的统计和分析。我们做 App 优化,需要静下心来做技术攻坚而且还需要具有数据意识,用数据来说话! + +### 🌟 🐕 [图解 fishhook 原理](https://mp.weixin.qq.com/s/dcQrR4knN0aGDPy2hsrgmg) + +[@老驴](https://www.weibo.com/6090610445):这是一篇目前非常不错的详解 fishhook 的文章,通过图文配合的方式来详细解释 fishhook 的原理。本文讲述 fishhook 所涉及到的最小知识点,完全抛开源码,旨在简单清晰,直击要害。以图代码,带你彻底弄清 fishhook 的原理。 + +### 🐕 [iOS 证书幕后原理](http://chuquan.me/2020/03/22/ios-certificate-principle/) + +[@AidenRao](https://weibo.com/AidenRao):非对称加密贯穿于 iOS 开发之中,在日常的 iOS 开发中,无论是新手还是老鸟,总是会遇到各种与证书、签名有关的问题。作者理清其中的原理,研究并整理出这篇文章。方便读者结合原理,更快的找到证书、签名有关问题的解决方案。 + +### 🐕 [听说你想写个虚拟机(二)?](https://mp.weixin.qq.com/s/m-gimtsk-cYQz-kQS-W26w) + +[@Leo](https://github.com/leomobiledeveloper):虚拟机的概念大家或多或少都听说过,但你是否想过如何实现一个虚拟机呢?“写个虚拟机的文章”是一个系列,这次推荐的是第二/三章节,第二章介绍了寄存器的定义、几个新指令的实现,第三章则从多个角度讲解了如何实现一个更贴近真实定义的虚拟机。第三章链接: + +- [听说你想写个虚拟机(三)?](https://mp.weixin.qq.com/s/GKYEGkDmTxxBmpd4cton5g) + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +### 🐕 [AVPlayer 實踐本地 Cache 功能大全](https://medium.com/zrealm-ios-dev/avplayer-%E5%AF%A6%E8%B8%90%E6%9C%AC%E5%9C%B0-cache-%E5%8A%9F%E8%83%BD%E5%A4%A7%E5%85%A8-6ce488898003) + +[@J_Knight_](https://github.com/knightsj):本文结合实际代码介绍了 AVPlayer 的缓存实现方案,该缓存方案能够实现的目标是: + +1. 本地缓存播放过的音乐,且在播放音乐前先尝试读取缓存 +2. 可以设置缓存上限,超过后该上限后则删除最旧的缓存 +3. 缓存处理不影响播放机制 + +而且在具体介绍方案之前也介绍了所需要的背景知识,如 HTTP Range,AVPlayer 处理 AVURLAsset 的方式等等。 + +### 🐕 [What’s new in Swift 5.4?](https://www.hackingwithswift.com/articles/228/whats-new-in-swift-5-4) + +[@老峰](https://github.com/gesantung): Swift 5.4,带来了一些巨大的编译改进,并大大提高了增量编译的速度,同时也包含不少新特性: + +- 改进的隐式成员语法 +- 函数中支持多个可变参数 +- Result builders +- 局部函数支持重载 +- Property wrappers 支持局部变量 + +Swift 5.4 已经在 Xcode 12.5 beta 版中发布,感兴趣的读者快来升级体验吧。 + +### 🐢 [Aion - 拥抱 Flutter 生态的动态化方案](https://mp.weixin.qq.com/s/mPkx9b07xCkokxxbGc7grA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 又一个 Flutter 动态化方案,目前业内对于 Flutter 动态化的探索可谓百花齐放了,大体上都是以下两种: + +- Web 跟 Flutter 的一个结合,就是前面说的利用 Web 生态 js 的高动态性跟 Flutter 本身的渲染流程去做结合,达到一个既能够满足高动态性 +- Simple VM,用 Dart 代码实现 Widget 视图界面,经过前端的编译生成 AST 产物,然后在编译阶段将 AST 产物转化成 JSON 的数据描述,JSON 文件下发到客户端,在 Dart 层对它做一次解析,来完成动态化 + +以上两种方案在对比原生 AOT 时,多多少少差了那么一点儿,UC 的同学对他们 Flutter 动态化的要求是:无限于接近于现有的 AOT 模式。所以有了这个新的方案:基于 Kernel ByteCode 解析。本文详细的分析和对比了多种方案的优缺点,来表明为何选择 KBC,文章也详细描述了该技术方案落地的过程中遇到的问题以及是如何解决的。 + +## 工具 + +### [tidevice](https://github.com/alibaba/taobao-iphone-device) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个支持运行在 Mac,Linux,Windows 上,能够用于与 iOS 设备进行通信,提供诸多功能的一个工具,包括: +- 截图 +- 获取手机信息 +- ipa 包的安装和卸载 +- 根据 bundleID 启动和停止应用 +- 列出安装应用信息 +- 模拟Xcode运行XCTest +- 获取指定应用性能(CPU,MEM,FPS) +- ... + +## 代码 + +### [Pulse: Structured Logging System](https://github.com/kean/Pulse) + +[@zvving](https://github.com/zvving):基于 [SwiftLog](https://github.com/apple/swift-log) 和 CoreData 实现的日志框架,使用 SwiftUI 为 iOS/macOS 双平台提供日志浏览功能,同时对网络日志提供更清晰的展示视图。 +库还在早期阶段,对日志及 SwiftUI 实现感兴趣的同学欢迎参考。 + +### [Twitter Text Editor](https://github.com/twitter/TwitterTextEditor) + +[@xiaofei86](https://weibo.com/xuyafei86/):Twitter 开源了一个独立的、灵活的、功能齐全的富文本编辑器。提供了一个健壮的文本属性更新逻辑、扩展的文本编辑事件,使用基于委托的便捷 API 安全的处理文本输入事件。 + +```swift +import TwitterTextEditor + +final class MyViewController: UIViewController { + override func viewDidLoad() { + super.viewDidLoad() + let textEditorView = TextEditorView() + textEditorView.text = "Meow" + textEditorView.textAttributesDelegate = self + } +} + +extension MyViewController: TextEditorViewTextAttributesDelegate { + func textEditorView(_ textEditorView: TextEditorView, + updateAttributedString attributedString: NSAttributedString, + completion: @escaping (NSAttributedString?) -> Void) { + + } +} +``` + +### [awesome-function-builders](https://github.com/carson-katri/awesome-function-builders) + +[@JonyFang](https://github.com/JonyFang):Swift 5.1 引入的特性 @functionBuilder,大大增强了 Swift 语言构建内置 DSL 的能力,`awesome-function-builders` 可以作为使用参考。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#149-2021.03.01.md b/Reports/2021/#149-2021.03.01.md new file mode 100644 index 000000000..69963f580 --- /dev/null +++ b/Reports/2021/#149-2021.03.01.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #149 | 2021-03-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) 提出。 + +## 文章 + +### 🌟 🐕 [一款可让大型 iOS 工程编译速度提升 50% 的工具](https://mp.weixin.qq.com/s/uBpkelG8q_xmskWPYyWONA) + +[@JonyFang](https://github.com/JonyFang):本文介绍了美团平台自研的一款 cocoapods 插件 `cocoapods-hmap-prebuilt`,该插件以 Header Map 技术为基础,进一步提升代码的编译速度,完善头文件的搜索机制,通过该插件可以大幅提升 iOS 工程代码的编译速度。文章前半部分主要介绍相关的原理,后面主要阐述在工程层面的实践,希望能给从事相关开发的同学带来一些帮助或者启发。 + +### 🐢 [Flutter 路由我定](https://juejin.cn/post/6932115520405635079) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 1.22 的版本更新了路由库, 目前最新的是 Navigator 2.0, 本文算是一个比较完整的 Flutter 路由科普文,对于 Flutter 路由不熟悉的同学,推荐仔细阅读. + +### 🐕 [Is Apple Banning Free Analytics SDKs?](https://steamclock.com/blog/2021/02/apple-tracking-analytics-sdks/) + +[@享耳先森](https://github.com/iblacksun):iOS 14.5 发布时间临近,新版系统中,如果 App 使用了 IDFA,系统将请求用户授权,本文探讨了新的隐私机制对 App 开发者及统计 SDK 开发者有哪些影响、以及该如何应对。 + +### 🚧 🐕 [Universal Links 新鮮事](https://medium.com/zrealm-ios-dev/universal-links-%E6%96%B0%E9%AE%AE%E4%BA%8B-12c5026da33d) + +[@红纸](https://github.com/nianran):Universal Links 在 iOS 14 开始使用 CDN 来更新配置文件,并且加入了新的调试模式(在 applinks:domain.com 中加入 ?mode=developer)来解决 CDN 带来的更新延迟问题。本文的后半文,详细的介绍了如何搭建一个简易的本地测试环境来调试配置文件。 + +### 🐕 [飞猪 Flutter 技术演进及业务改造实践](https://mp.weixin.qq.com/s/08EK76jn-zkqS9flbrAbRA) + +[@邦Ben](https://weibo.com/linwenbang):该文介绍了飞猪团队在 Flutter 上的探索以及落地实践效果。其中重点提及了 Web on Flutter 的尝试,大致流程为:h5 js 代码解析后运行对接 Flutter Render 机制,为了提高 web 显示效果。同时也介绍了 XRay 自动化测试,一套截图识别的自动化测试方案,最大的好处是和具体平台代码无关,跨端效果很好。这也是大部分业务自动化方案采用的方案,有兴趣的童鞋也可以多看下。 + +### 🐕 [听说你想写个虚拟机(四)?](https://mp.weixin.qq.com/s/LHHDlhbuAMe8J6T3SPSaVg) + +[@Leo](https://github.com/leomobiledeveloper):虚拟机的概念大家或多或少都听说过,但你是否想过如何实现一个虚拟机呢?“写个虚拟机”文章是一个系列,这次推荐的是第四五六章节,作者从一个最小虚拟机开始介绍,到完成 LC-3 这个更加贴近真实意义的虚拟机。一步步从简单,到复杂,由浅入深,慢慢掀开了虚拟机的神秘面纱。 + +- [听说你想写个虚拟机(五)?](https://mp.weixin.qq.com/s/wTrLJNFlCZOuuPfIOJV_tA) +- [听说你想写个虚拟机(六)?](https://mp.weixin.qq.com/s/ecBgY_fiGVVs5zOD7Z1vtQ) + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +## 代码 + +### [gRPC Swift 1.0.0](https://github.com/grpc/grpc-swift/releases/tag/1.0.0) + +[@EyreFree](https://github.com/EyreFree):gRPC 是一个高性能、开源和通用的 RPC 框架,它基于 HTTP/2 标准设计,带来了双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性,使得其在移动设备上表现更好、更省电和节省空间占用。本项目 grpc-swift 是它的 Swift 实现,在 4 天前发布了 1.0.0 正式版,可用于配合 Apple 官方的 [Swift Protobuf](https://github.com/apple/swift-protobuf) 一起使用。 + +### [stream-chat-swift](https://github.com/getstream/stream-chat-swift/) + +[@AidenRao](https://weibo.com/AidenRao):StreamChat SDK 附带有全部 UI(用户界面)组件,可在几分钟内实现 IM 应用程序的构建。这些组件可以在 iOS 和 macOS 之间无缝转换,只需在其行为上做出一些细微改变,就能实现每个平台所期待的用户体验,目前 SDK 已完全开源,非常适合学习 & 使用。 + +### 🐕 [EasySwiftHook](https://github.com/623637646/SwiftHook) +[@zvving](https://github.com/zvving):Swift 中 hook 手段有限,对于 Dynamic Dispatch Function 还是有一些『可乘之机』。EasySwiftHook 基于 libffi 以及 objc runtime,hook 代码相对易读,支持 NSObject、Pure Swift Class,兼容 KVO、deinit 等。虽然应用受限于动态分发场景,依旧是不错的学习材料。 + +> 来自 [Yanni Wang](https://github.com/623637646) 自荐 + +### [ScheduledNotificationsViewController](https://github.com/nicephoton/ScheduledNotificationsViewController) + +[@老峰](https://github.com/gesantung):ScheduledNotificationsViewController 是一个本地通知调试工具,接入简单,可以方便的调试本地通知。支持查看待发送,已发送通知列表;支持点击直接发送;支持深色模式。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#150-2021.03.08.md b/Reports/2021/#150-2021.03.08.md new file mode 100644 index 000000000..39ea002e6 --- /dev/null +++ b/Reports/2021/#150-2021.03.08.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #150 | 2021-03-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) 提出。 + +## 新闻 + +### 🐢 [Flutter 2 正式发布](https://mp.weixin.qq.com/s/tJe2ScLgKWFTybpBtDl2TA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 2 发布了,这次 Flutter 团队为大家带来了成吨的新功能以及更稳定的性能。通过 Flutter 2,你可以使用相同的代码库为五种操作系统构建原生应用: iOS、Android、Windows、macOS 和 Linux;以及为 Chrome、Firefox、Safari 和 Edge 等浏览器打造 web 体验。Flutter 甚至可以嵌入到汽车、电视和智能家电,为环境计算提供最普适、可移植的体验。小编汇总一些重大的功能,供大家速览: + +- Flutter web 支持,且达到了稳定版 +- Flutter 2 对于桌面、可折叠和嵌入式设备上的支持 +- Dart 健全的空安全稳定版 +- Flutter 多实例支持 +- 新工具: Flutter Fix +- 新 Widget: Autocomplete、ScaffoldMessenger 等 + +这波 Flutter 官方团队简直输出爆炸有木有, 所以小编另推荐几篇 Flutter 2 相关的文章辅助阅读: + +- [无限可能 | Flutter 2 重点更新一览](https://mp.weixin.qq.com/s/EzS3dtpZB_i9p358qqlBpg) +- [Flutter2.0重磅发布!带你一文打尽Flutter Engage](https://mp.weixin.qq.com/s/qy6ZdZmULOgwBEiqT4yGew) +- [What’s New in Flutter 2](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65) +- [【译】Flutter 2.0 正式版发布,全平台 Stable](https://mp.weixin.qq.com/s/rqf4tJR23Yzf3L3J5JY3Qw) + +## 文章 + +### 🌟 🐢 [从预编译的角度理解 Swift 与 Objective-C 及混编机制](https://mp.weixin.qq.com/s/gI9vL1KlHuMzMoWWf2tnIw) + +[@享耳先森](https://github.com/iblacksun):相信不少 iOSer 对于编译器如何将你的源码编译成可执行文件一直都是一知半解,本文从编译器预编译阶段的如何查找头文件开始,深入剖析项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。 + +### 🌟 🐢 [深入剖析 JavaScript 编译器/解释器引擎 QuickJS - 多了解些 JavaScript 语言](https://mp.weixin.qq.com/s/sKP1Svn8r8z_VEIlbUcxTg) + +[@JonyFang](https://github.com/JonyFang):本文着重介绍了 QuickJS。为了更有助于读者理解 QuickJS,作者在详细介绍和剖析 QuickJS 之前,先引入聊了聊 JavaScript 的背景及 QuickJS 作者的背景;在这之后,会针对 js 语言的一些特性来看这些特性在 QuickJS 是如何解释执行和优化的。相信本篇技术文能够帮助读者加深对 js 语言的理解。 + +### 🐕 [Hacking native ARM64 binaries to run on the iOS Simulator](https://bogo.wtf/arm64-to-sim.html) + +[@老驴](https://www.weibo.com/6090610445):现在有很多同学已经用上了 M1 的开发机了,但是在实际开发中会发现依赖的 SDK 并没有更新对 ARM Mac 原生支持,这会导致在模拟器里编译运行 App 的时候,会继续用 Rosetta 2 的方式来运行。本来就介绍了如何在不改动依赖 SDK 的情况下,在 M1 Mac 上以原生模式来跑。 + +### 🐢 [How Apple’s Upcoming Two-Step/Two-Factor Enforcement Could Affect Your fastlane Experience](https://www.joshholtz.com/blog/2021/02/17/apples-2fa-with-fastlane.html) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2021 年二月强制要求所有登录 App Store Connect 开通两步验证或者或者双重认证,这对我们常用的 CI 工具 fastlane 产生了一定的影响,本文主要讲述了这个新规定是如何对 fastlane 产生影响,并给出了一些解决方案和工具。 + +### 🐎 [XCFrameworks caveats](https://kean.blog/post/xcframeworks-caveats) + +[@Damien](https://github.com/ZengyiMa):XCFramework 是 Xcode11 中提出的一个新特性,是由 Xcode 创建的一个可分发的二进制包,它包含了 framework 或 library 的一个或多个变体,因此可以在多个平台上使用。本文作者通过为自己的项目制作 XCFrameworks 过程中所遇到的问题,并且给出对应的解决方案,通过文章,可以让大家在打包 XCFrameworks 少走很多弯路。 + +### 🐕 [在线教室 iOS 端声音问题综合解决方案](https://mp.weixin.qq.com/s/yFNb0zvPtEjHAtED7-jT0w) + +[@AidenRao](https://weibo.com/AidenRao):在线教室场景下,很多功能都需要播放声音,包括课中音视频直播、课后回放、webview 内嵌课件声音(包括音频、视频、音效)、课堂音频、课堂视频、课堂游戏声音、音效声音等。除此之外,教室内还包括很多需要声音录制的功能,包括连麦、跟读、集体发言、聊天语音输入、语音识别等。 + +教室内这些功能存在各种组合,且对 AVAudioSession 的设置要求存在差异,而 AVAudioSession 又是一个单例,如果没有一个统一管理的逻辑,很容易就出现设置混乱的问题。 + +文章通过底层原理的分析与实际项目经验,从代码规范、问题兜底、问题报警梳理出一套可行的解决方案。 + +### 🐕 [函数节流(Throttle)和防抖(Debounce)解析及其iOS实现](https://juejin.cn/post/6933952291142074376) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):对于部分 iOS 开发人员来说,函数节流(Throttle)和防抖((Debounce)这两个专业名词可能会比较陌生。对于连续调用的函数,尤其是触发频率密集、目标函数涉及大量计算时,恰当使用 Throttle 和 Debounce 可以有效提升性能及系统稳定性。作者详细阐述了 Throttle 和 Debounce 的概念及二者间的区别,同时封装开源库 [HWThrottle](https://github.com/HighwayLaw/HWThrottle),该库有以下特点: + +- 未使用任何 runtime API,全部由顶层 API 实现 +- 每个业务场景需要使用者自己定义一个实例对象,自行管理生命周期,旨在把对项目的影响控制在最小范围 +- 区分 Throttle 和 Debounce,提供 Leading 和 Trailing 选项 + +### [Apple M1X benchmark leak](https://www.cpu-monkey.com/en/compare_cpu-apple_m1x-1898-vs-apple_m1-1804) + +[@老驴](https://www.weibo.com/6090610445):在苹果发布 M1 之后,也有很多人在期待 M1X 和 M2。现在 M1X 的跑分已经出现在跑分网站上了,有一部分参数也已经泄露。目前看起来 M1X 是一颗 8 大核心 4 小核心的 12 核心处理器,单核性能和 M1 几乎一致,多核性能因为大核心数量翻番得到翻倍,TDP 保持在 35W。在这样的功耗表现下能和 Intel 11700K 多核性能几乎一致,算是非常夸张的了,要知道就算是 PL1,11700K 也要 125W,PL2 更是高达 251W。所以,M1X 的能耗比可以说是非常夸张了。 + +## 代码 + +### [AR_100Days](https://github.com/satoshi0212/AR_100Days) + +[@老峰](https://github.com/gesantung):WWDC2017 苹果发布了ARKit,基于它就可以实现 AR 比较强大的虚拟增强功能。作者 [Satoshi](https://github.com/satoshi0212) 以 Demo 的形式每天分享一种 AR 效果,目前已经更新 45 个,对 ARKit 感兴趣的读者可以参考学习。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#151-2021.03.15.md b/Reports/2021/#151-2021.03.15.md new file mode 100644 index 000000000..63d6f67e9 --- /dev/null +++ b/Reports/2021/#151-2021.03.15.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #151 | 2021-03-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) 提出。 + +## 文章 + +### 🌟 🐢 [内存管理设计精要](https://draveness.me//system-design-memory-management) + +在早些年的 iOS 开发中,当一个 App 的内存使用大于 20m 的时候,就会收到系统的 Memory Warning,所以过去开发应用时候,也会基于此做一些优化。虽然近几年随着新机型性能的不断提升,内存越来越大,早已不再受 20m 的限制, 但是,相比于磁盘,内存依然可以算相对稀缺的资源,如果 APP 对内存使用不当,哪怕运行在最新的机型也有可能瞬间 crash 掉。本文是深入研究系统设计方法的系列文章中的一篇,主要讲内存系统的设计精要,对于想要深入了解内存的概念,并更好地使用或者优化内存的管理,本文值得各位读者花时间详细阅读! + +### 🌟 🐕 [How Uber Deals with Large iOS App Size](https://eng.uber.com/how-uber-deals-with-large-ios-app-size/) + +[@xiaofei86](https://weibo.com/xuyafei86):根据 Uber 的统计,当 App 大小超过 AppStore 流量下载限制时,会导致应用程序安装减少 10%,注册减少 12%,首次预订减少 20%,从而导致收入损失。本文讲述 Uber 如何使用编译优化技术解决此问题,将 Uber App 的代码大小减少 23%,并使代码大小的增长率降低了 2 倍。 + +使用编译选项 [-Osize](https://swift.org/blog/osize/) 可以在模块内执行优化,编译器会通过 Function Outlining 来将重复代码片段重定向到单个实例实现压缩。但此优化对跨模块的代码则无能为力,这也将是本文的重点。 + +Uber 开发了自己的 iOS 构建流水线,新的流水线为每个模块生成 LLVM IR,而不是直接生成机器码。然后将所有 LLVM-IR 文件组合成一个大型 IR 文件并进行优化,再输入 [llc](https://llvm.org/docs/CommandGuide/llc.html) 生成机器码。这确保了在识别候选重复片段时,会利用最大相似性,从而实现跨模块的优化。在模块内部,LLVM 在识别时采用的贪心思想也不能实现最优解,Uber 也通过多轮识别的方式进行了优化。 + +本文的很多方案已经提交到 LLVM。另外,一篇描述 [论文](https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2021/02/cgo21main-p112-p-dbdebd6-49049-preprint.pdf) 细节的论文也发表在了 "International Symposium on Code Generation and Optimization",感兴趣的同学可以阅读了解。 + +### 🌟 🐢 [【译】SE-0296 Async/await](https://kemchenj.github.io/2021-03-06/) + +[@zvving](https://github.com/zvving):大家翘首以盼的 async/await 特性,终于要在 Swift 5.5 中落地。协程的引入,让我们可以使用同步风格的代码编写异步逻辑,告别回调地狱。 + +[Kemchenj](https://kemchenj.github.io/about) 为我们带来 [SE-0296](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md) 的译文:完整介绍引入 async/await 的动机、设计细节和权衡过程,推荐阅读。 + +### 🐎 [Crash 堆栈竟然无法解析?](https://mp.weixin.qq.com/s/tOdu6GJW-jdWcce1xYgcww) + +[@水水](https://www.xuyanlan.com):本文记录了一个由于对 pod 编译参数调整导致的 Crash 无法解析问题的解决和究因过程。到底是什么原因会导致 Crash 无法解析呢?感兴趣的读者可以一探究竟~ + +### 🐕 [闲鱼 UI 快速变形利器--擎天柱](https://mp.weixin.qq.com/s/QnUVFX6dJzDRac1SsjhSmA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):擎天柱系统是闲鱼的标签运营平台,以此实现闲鱼 UI 样式的快速配置和实验效果的快速验证。解决了各场景标签 UI 的管理分散、需求排期难、缺乏 AB 实验等一系列问题。目前,擎天柱系统已经在闲鱼首页、搜索页的 feeds 场景落地,取得了阶段性效果: + +- 推广场景覆盖和运营使用度,创建更多的个性化实验 +- 增加客户端卡片模版配置模块,完善 UI 体系 +- 打通算法平台,使得优质标签透出的更加智能化、个性化 + +### 🐢 [Molinillo 依赖校验](https://mp.weixin.qq.com/s/Kux4B4piqR43RLwiHRcHUQ) + +[@红纸](https://github.com/nianran):Molinillo 作为 CocoaPods 中核心的依赖解析工具。作者从解决依赖的入口函数 **Resolution::resolve** 入手,剖析了模块依赖 **state** 的变化、有向图的存储、依赖循环和冲突处理。文末,作者还介绍了 Molinillo 利用抽象类来解决不同平台接入的问题。 + +本文为[「CocoaPods 历险记」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA5MTM1NTc2Ng==&action=getalbum&album_id=1477103239887142918&scene=173&from_msgid=2458325057&from_itemidx=1&count=3#wechat_redirect)的系列文章的第 7 篇,非常推荐想要了解 CocoaPods 的同学阅读~ + +### 🐕 [如何监控 iOS 的启动耗时](https://mp.weixin.qq.com/s/mxQpsenciOu9Qw9q-VTNyg) + +[@JonyFang](https://github.com/JonyFang):APP 启动耗时的监控和优化一直是我们比较关注的问题,本文通过介绍 Render Loop 和 commit phase 的流程,分享了通过监控 ipc 通信机制监控启动耗时的解决方案。 + +## 代码 + +### [HotReloading](https://github.com/johnno1962/HotReloading) + +[@EyreFree](https://github.com/EyreFree):[InjectionIII](https://github.com/johnno1962/InjectionIII) 允许您在 iOS 模拟器中增量更新函数的实现以及类、结构或枚举的任何方法,而无需重新生成或重新启动应用程序。HotReloading 项目使 InjectionIII 的功能现在可以通过 SPM 直接引入到您的工程当中。无需下载应用程序,只需将此项目添加到您的项目中,并添加一个 `Run Script` 即可。 + +### [Swift for Tensorflow](https://github.com/tensorflow/swift) + +[@莲叔](https://github.com/aaaron7):Google 近期正式宣布 Swift for Tensorflow 项目将会被 archieve,也就是说暂停投入,基本上宣告了该项目的社会性死亡。虽然从项目主推者 chris lattner 在一年前离开 google 的时候就已经注定,当时[这篇帖子](https://news.ycombinator.com/item?id=22195335) 也预言了这一刻。但一年之后的现在,该来的来了后,仍然会让人唏嘘。虽然 S4TF 从诞生之日起就有了一定的关注,同时其背后的 idea 也非常创新地解决了当下以 Python 为主导的 AI 领域的一些痛点问题,虽然这两年从 Github 的 commit 记录上也能看出 S4TF 的团队一直在密集的迭代与优化,甚至从去年开始, GPUImage 的作者 Brad Larson 也加入了该团队并持续的投入到 high level api 以及 showcase model 的优化中,最终也没能改变这项技术没有被 AI 社区所接受。深究其背后的原因,其实太阳底下并无新事。社区对于技术语言、框架的接受度考量的核心指标或许并不是先进性,还包括历史包袱、程序员的偏好习惯、生态等等因素。这也就是 Python2 到 3 为什么这么难,JS 问题很多但依然是全球最流行的编程语言。这些现象背后多多少少都可以窥见端倪。 + +虽然最后生命力只有短短 2 年,但我仍然相信 S4TF 是非常具有冒险精神,非常大胆的一次尝试,其中众多的 compiler-oriented machine learning 技术不会死,会沉淀下来,或许在未来 5-10 年后,能够再次改变世界。 + +### [swift-benchmark](https://github.com/google/swift-benchmark) + +[@老峰](https://github.com/gesantung):[swift-benchmark](https://github.com/google/swift-benchmark) 是一个对代码段进行基准测试的库,有丰富的命令,可以方便的做单元测试性能测试等,类似于 [benchmark](https://github.com/google/benchmark)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#152-2021.03.22.md b/Reports/2021/#152-2021.03.22.md new file mode 100644 index 000000000..c7257ae9a --- /dev/null +++ b/Reports/2021/#152-2021.03.22.md @@ -0,0 +1,122 @@ +# 老司机 iOS 周报 #152 | 2021-03-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) 提出。 + +## 新闻 + +### [Swift 5.5 Release Process](https://forums.swift.org/t/swift-5-5-release-process/45644) + +[@享耳先森](https://github.com/iblacksun):Swift 社区释出了 Swift 5.5 的发布计划,这意味着随 WWDC21 发布的将是 5.5 而不是 6.0,不过好消息是大家期待已久的 [async/await](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md) 将随 5.5 一起发布。 + +## 新手推荐 + +### [Swift LibHunt - Discover popular and related Swift open-source projects](https://www.libhunt.com/l/swift) + +[@EyreFree](https://github.com/EyreFree):LibHunt 是一个跟踪开源项目和软件库的网站,在这里你可以找到最受欢迎的开源库和他们的同类型工具,提供了多种统计口径和筛选方式,除了 Swift 外也支持其他大部分主流编程语言。 + +> [@Parsifal](https://github.com/ParsifalC):前阵子不时地看到读者群或者公众号后台都有朋友在问想看一些优秀的开源库,希望这个网站能帮你筛选到合适的。 + +## 文章 + +### 🐕 [Swift 5.4 新特性](https://mp.weixin.qq.com/s/p6oeWwcgJJFqP2NgYaJXYw) + +[@四娘](https://kemchenj.github.io):之前我们介绍过 Hacking Swift 写的 [What's New in Swift 5.4](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2021/%23148-2021.02.08.md#-whats-new-in-swift-54),最近知识小集翻译了中文版。 + +按照往年的时间安排,包含 Swift 5.4 的 Xcode 12.5 大概会在这个月的月底发布,之前还没看过的朋友可以趁这个机会提前了解一下 Swift 5.4 的新特性。 + +### 🐎 [从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗](https://mp.weixin.qq.com/s/Y1AHFN1kJ9kCjXdFOnUviA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):NSUserDefaults 是 iOS 开发者常用的持久化工具,通常用于存储少量的数据。经过文中的测试,发现 NSUserDefaults 有以下 3 个特性: +- 多线程安全 +- 内存级别缓存 +- 写操作会触发 xpc 通信 + +根据这三个特性,得出适合选择 NSUserDefaults 作为数据持久化的场景如下: +- 少量数据存储 +- 偶尔修改 +- 多线程安全 + +### 🌟 🐢 [clang 源码导读系列 6 篇](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxMzk0OTg5MQ==&action=getalbum&album_id=1773549418412064769&scene=173&from_msgid=2247485042&from_itemidx=2&count=3#wechat_redirect) + +[@JonyFang](https://github.com/JonyFang):clang 源码导读系列,共分为 6 篇。依次简介下每篇的概要内容: + +1. clang 源码导读(1)- clang 入门 + - 梳理了不同场景下 clang 的含义; + - 引出三个基础知识点:诊断、`llvm:Triple`、`ToolChain`; +2. clang 源码导读(2): clang driver 流程简介 + - 结合实例,介绍 `clang driver` 流程; +3. clang 源码导读(3): clang driver 参数解析 + - 通过分析 `DriverOptTable` 的生成机制分析 `Driver::ParseArgStrings` 内部流程; + - 对 `clang driver` 的参数解析流程做了简析; +4. clang 源码导读(4): clang driver 构建 Actions + - 通过对 `BuildUniversalActions` 方法的源码分析,介绍了 clang driver 构建 Actions 的流程; +5. clang 源码导读(5): clang driver 构建 Jobs + - 对 `clang driver` 的构建 Jobs 流程进行详细的讲解,如介绍了 `clang drive` 是如何通过合并多个 JobAction 来避免反复的硬盘读写操作和文件生成/解析操作; +6. clang 源码导读(6): clang driver 执行命令 + - 本篇通过分析源码的方式,对 `clang driver` 的执行命令涉及的流程进行完整的分析; + +`clang driver` 这一层虽未涉及到真正的编译,但作为整个编译过程的驱动,以 pipline 形式抽象了各个环节的输入输出,解决了参数解析翻译、任务封装及执行等过程,满足了我们各种各样的使用需求。**clang 源码导读系列** 会带着读者了解 `clang driver`,对后续了解编译的全过程会有所帮助。 + +### 🐢 [Flutter 正在被悄悄放弃吗?](https://mp.weixin.qq.com/s/hDjbMSPNz_D5JeEBMEJZCA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自诞生之日起,从来都稳坐风口浪尖,关注与争议一直伴随其身。近几年,诸多互联网大厂投入实践,尝到了 Flutter 带来的甜头,但随着深入落地,Flutter 的性能问题为人诟病。这是一篇访谈文,一起来听听咸鱼负责人宗心和百度贴吧端负责人的看法,我想读者会有新的见解. + + +### 🐕 [iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践](https://mp.weixin.qq.com/s/cEfIZGtUojKKbhIfUyhTMw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了字节跳动 APM 中台团队自研的一套专门用于定位生产环境中的卡死崩溃的解决方案。文章首先介绍了当前 iOS 卡死崩溃监控的痛点,然后图文并茂地介绍该方案的思路和具体实现: + +- 卡顿监控原理 +- 如何判定卡顿为一次卡死 +- 如何确定卡死时间的阈值 +- 如何检测到用户一次卡死的时间 +- 如何解决主线程调用栈可能有误报的问题 + +最后还提供了通过本方案上线后总结出来的一些典型问题和最佳实践。 + +### 🐎 [Be careful with Obj-C bridging in Swift?](https://swiftrocks.com/be-careful-with-objc-bridging-in-swift) + +[@Damien](https://github.com/ZengyiMa):由于 Apple 平台历史问题的存在,Swift 与 Objective-C 进行桥接一直是 Swift 开发的重要组成部分,今天要说的是我们常用的 as 转换符在 Swift 使用中需要注意的地方,也许在不经意中会造成一些隐藏的异常崩溃,来一起探索 Swift 于 Objective-C 转换中发生的事情吧。 + +## 工具 + +### 🌟 [github1s](https://github.com/conwnet/github1s) + +[@Parsifal](https://github.com/ParsifalC):这个工具基于 VSCode 的浏览器版本,使得我们可以只用一个浏览器便可以方便地浏览和编码任意 GitHub Repo,你只需要将仓库链接的 `GitHub` 域名改为 `GitHub1s` 即可立即体验。比如 `https://github.com/microsoft/vscode` 变为 `https://github1s.com/microsoft/vscode`。 + +### [FVM 愉快的切换 Flutter 版本,强烈推荐!](https://juejin.cn/post/6919469825547272205) + +[@邦Ben](https://weibo.com/linwenbang):Flutter SDK 的安装很简单,下载下来解压就基本可用了。但是当你想进行一些不同版本的调研,或者 beta 版本的尝鲜,或者多个项目之间来回切换,那你就需要一个 SDK 管理工具了,FVM 则满足这个需求。和 NVM, RVM 一样的作用,切换 Flutter SDK。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#153-2021.03.29.md b/Reports/2021/#153-2021.03.29.md new file mode 100644 index 000000000..e38ddf075 --- /dev/null +++ b/Reports/2021/#153-2021.03.29.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #153 | 2021-03-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) 提出。 + +## 文章 + +### 🌟 🐢 [IGListKit 源码解析系列 5 篇](https://dirtmelon.github.io/posts/iglistkit-first/) + +[@JonyFang](https://github.com/JonyFang):IGListKit 源码解析系列,共分为 5 篇。依次简介下每篇的概要内容: + +1. IGListKit - 开篇 + - 对比简介 UICollectionView/UITableView; + - 引出 IGListKit 的主要特征; +2. IGListKit 的基石 - IGListSectionController + - 介绍 `IGListSectionController` 是如何和数据层进行绑定的; + - 介绍 IGListKit 是如何通过 `IGListSectionController` 来进行扩展以支持多种特性; +3. IGListKit 的管理者 - IGListAdapter + - `IGListAdapter` 作为 IGListKit 的适配器,对外提供相关的刷新接口及一些通用方法,对内负责管理 `IGListSectionController` 和 `UICollectionView`; +4. IGListKit 的数据处理 - Updater & Diff + - 介绍 `IGListAdapterUpdater` 提供的批量&全部刷新机制的原理; + - 描述 `IGListDiff` 的核心实现; +5. IGListKit - 完结篇 + - 介绍 `IGListCollectionViewLayout` 的实现; + - 总结了 IGListKit 的开发历程,及库作者的一些经验总结; + +### 🌟 🐕 [Flutter 2.0 下混合开发浅析](https://mp.weixin.qq.com/s/cX-PZZ1FqQm582JwVNm8Zg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 的混合开发大多借助 flutter_boost 等三方库来完成, Flutter 2.0 给了我们更多的选择: FlutterEngineGroup。本文详细讲解了 FlutterEngineGroup 下的混合开发,强烈推荐。 + +### 🐕 [Flutter Web 在美团外卖的实践](https://mp.weixin.qq.com/s/GjFC5_85pIk9EbKPJXZsXg) + +[@极速男孩](https://github.com/ztlyyznf001):Google 现在已经将 Flutter Web 合入了 master 和 stable 分支,并在 Flutter 2.0 做了进一步优化。本文主要介绍了美团外卖在 Flutter Web 的探索,在 Flutter Web 基建和 Flutter Web 中的性能优化 , CI/CD 的方面的尝试。 + +### 🐎 [全局开启 iOS / mac 的 WebView 调试](https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w) + +[@AidenRao](https://weibo.com/AidenRao):Safari 有一个内置的前端调试器,可以调试 MobileSafari 和 Xcode 编译运行的 APP。通过 hook webinspectord 服务的 SecTaskCopyValueForEntitlement 函数,使我们可以在 mac 和 iOS 上,调试系统内置的 App 或者 App Store 下载的应用里的 WebView。对于分析客户端的 XSS、JavaScript bridge 相关的安全漏洞非常实用。 + +### 🐢 [如何编写高性能的 Swift 代码](https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst) + +[@四娘](https://kemchenj.github.io):Swift 官方仓库里的一份性能优化指南,从编译器层面讲述如何编写高性能的代码,让我们了解什么样的代码可以让编译器更好地进行优化,什么样的代码会在 Swift 里产生额外的性能消耗,在哪些情况下我们可以通过改写这些代码来减少这些消耗。 + +### 🚧 🐕 [Frameworks: embed or not embed that's the question](https://holyswift.app/frameworks-embed-or-not-embed-thats-the-question) + +[@红纸](https://github.com/nianran):在工程中配置 Framework 时,经常能够看到一个选项 Embed or not。本文作者将静态库和动态库配合这两种选项,4 种实验结果分别做了对比如下。 + +- 动态库 + Embed:动态库将在运行时链接,并且会有独立的 Framework 文件夹,独立于 App 的二进制文件 +- 动态库 + Not Embed:App 会崩溃 +- 静态库 + Embed:代码将在编译时进行链接,会有独立的 Framework 文件夹 +- 静态库 + Not Embed:代码将在编译时进行链接,所有代码将会包含在 App 的二进制文件当中 + +此外,文末有一个 4 种集成方式包大小差异的简单对比,感兴趣的读者可以阅读一番。 + +### 🐎 [对于移动开发,人工智能的到来意味着什么?](https://mp.weixin.qq.com/s/Nt16lD-0KCpeC5ZEwxziQw) + +[@莲叔](https://github.com/aaaron7):端智能或许已经并不是移动开发领域的一个新鲜话题,各个公司和业务都开始逐步尝试并取得了一定的效果。如果你是一位对人工智能有兴趣但之前完全没有了解的移动开发,这篇文章可以指引你快速了解一个大概的全貌。文章首先从比较符合直觉的视角介绍了人工智能是什么,解决了什么问题,另外还给出了在移动开发目前的主流应用,是一份不错的入门介绍。 + +### 🐎 [iOS 基于 PGO 优化启动时间](https://juejin.cn/post/6942365945990447111) + +[@Leo](https://github.com/leomobiledeveloper):冷启动时候 Page In 会占据相当一部分耗时,Profile Guided Optimization (PGO)是一种简单易用的可以优化 Page In 数量,进而提高启动速度的技术,本文介绍了如何使用 PGO ,推荐阅读。 + +### 🐕 [SwiftUI 中的 Text 插值和本地化](https://onevcat.com/2021/03/swiftui-text-1/) +[@zvving](https://github.com/zvving):SwiftUI 致力于提供简洁灵活的视图描述方式。拿最『简单』的例子`Text("I am \(someUser.name)")` 来说,你是否好奇:为 Text 设定内容的同时,如何支持本地化,以及各种更复杂的业务场景? +喵神也有同样的疑问,并带来抽丝剥茧两篇文章:详细拆解 SwiftUI 中本地化&文本差值的实现方式。不妨细读,帮助你写出知其所以然的 Swift 代码。 +## 代码 + +### [isowords](https://github.com/pointfreeco/isowords) + +[@老峰](https://github.com/gesantung):isowords 是一款英语单词字谜游戏,作者客户端采用 SwiftUI、SceneKit 实现了模块化架构,服务端也以 SwiftNIO 实现,并且全部开源。对 SwiftUI、SceneKit、Swift for Server 感兴趣的同学欢迎学习参考。 + +## 书 + +### 🌟 [iOS Crash Dump Analysis, Second Edition](https://github.com/faisalmemon/ios-crash-dump-analysis-book) + +[@Parsifal](https://github.com/ParsifalC):这是一本对于理解 iOS Crash 机制非常有帮助的书,中英文版本均有。从什么是崩溃、崩溃如何发生、各种崩溃类型、可采用的工具、崩溃日志解读等等非常系统地为我们阐述了崩溃分析,填补了当崩溃发生时应用程序开发人员与开发平台之间出现的空白。本书讨论了涵盖 iOS、macOS、watchOS 以及 tvOS 等苹果主流软件系统,也包括了 OC 和 Swift 等主流开发语言。非常推荐反复阅读。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#154-2021.04.06.md b/Reports/2021/#154-2021.04.06.md new file mode 100644 index 000000000..545a7eed4 --- /dev/null +++ b/Reports/2021/#154-2021.04.06.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #154 | 2021-04-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) 提出。 + +## 新闻 + +### [WWDC21 再度采用完全在线形式](https://developer.apple.com/wwdc21/) + +[@Parsifal](https://github.com/ParsifalC):第三十二届全球开发者大会 WWDC 将于 6 月 7 日至 11 日举行,并再度采用完全在线形式。届时将有 iOS 15、iPadOS 15、watchOS 8、macOS 11、tvOS 15 等系统将正式推出。 + +## 文章 + +### 🌟 🐕 [Flutter Boost3.0 初探](https://mp.weixin.qq.com/s/49h8FVPhnJSHo2brR0K9zw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):flutter_boost 几乎已经成为混合开发下的标配三方组件,由闲鱼出品,本次 flutter_boost 进行了 3.0 版本的升级更新,解决了很多诟病已久的问题,比如:需要频繁更新跟进官方版本,AndroidX 和 Support 在不同分支,iOS 和 Android 接口不对齐等问题. + +### 🌟 🐕 [Concurrency Done Right](https://kean.blog/post/concurrency) + +[@四娘](https://kemchenj.github.io):Concurrency 相关的功能提上日程之后,社区里关于如何编写并发代码的讨论也开始变多,在这篇文章里 [Nuke](https://github.com/kean/Nuke) 的作者 Kean 就介绍了他在 Nuke 里做的优化,他分析了不同场景下最佳的方案,包括 lock,atomic,actor 等等,推荐阅读。 + +另外 [NetNewWire](https://netnewswire.com) 的作者也写了一篇 [How NetNewsWire Handles Threading](https://inessential.com/2021/03/20/how_netnewswire_handles_threading)。 + +### 🐕 [SwiftUI 中的 Text 插值和本地化](https://onevcat.com/2021/03/swiftui-text-1/) + +[@zvving](https://github.com/zvving):SwiftUI 致力于提供简洁灵活的视图描述方式。拿最『简单』的例子`Text("I am \(someUser.name)")` 来说,你是否好奇:为 Text 设定内容的同时,如何支持本地化,以及各种更复杂的业务场景? +喵神也有同样的疑问,并带来抽丝剥茧两篇文章:详细拆解 SwiftUI 中本地化&文本差值的实现方式。不妨细读,帮助你写出知其所以然的 Swift 代码。 + +### 🐕 [听说你想写个渲染引擎](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,使用 Swift 实现引擎。根据渲染引擎的工作流程,分为 “HTML 解析”、“CSS 解析”、“生成样式树”、“生成布局树”、“绘制” 5 篇内容。目前已更新“[前言](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd)”和“[HTML 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=2&sn=986f6eb0a7bece1d4e70253c3c9b7020&chksm=cf558945f8220053a6f15f658bcc2e442ee238c5639837076a85b2ceb6f7f6d104e4fbebc464&cur_album_id=1717440219009892354&scene=189#rd)” 2 篇,感兴趣的读者可以持续关注。 + +### 🐕 [How I Created a DSL for Diffable Section Snapshot using Result Builders](https://swiftsenpai.com/swift/section-snapshot-builder/) + +[@Damien](https://github.com/ZengyiMa):在日常开发中,我们在使用 UITableView 和 UICollectionView 的时候会写很多的模版代码,能否提高我们的开发效率呢?本文提供了一个新的思路,通过自定义 DSL 的方式来构建我们的 UITableView 和 UICollectionView 的页面结构,使得我们的开发效率可以得到大幅的提高,想了解实现思路?一起来看文章内容吧! + +### 🐕 [Xcode-Tips](https://github.com/Xcode-Tips/xcode-tips.github.io) + +[@老峰](https://github.com/gesantung):Apple 开发者通常通过 Twitter 或微博等在社区中分享 Xcode 使用技巧,该项目的目标是将所有这些 Xcode 技巧放在一个地方,并使任何人都可以轻松获取或做出贡献。这些使用技巧包括如下几个方面: +- Breakpoints:使用断点作为书签、快速切换断点、断点播放声音、使用 LLDB 表达式自动执行用户操作 +- Build Times:签名提速、复制 framework headers +- Code:生成类初始化、选中整个代码块 +- Crashes:查看 .crash 文件 +- Interface Builder:Xcode Interface 技巧 +- Keyboard Shortcuts:跳到指定一行、格式化代码、增加注释等 + +还有更多内容可以阅读原文,本项目持续更新,感兴趣的读者可以持续关注。 + +### 🐕 [Unsafe memory pointers in Swift](https://theswiftdev.com/unsafe-memory-pointers-in-swift/) + +[@zvving](https://github.com/zvving):内存安全是 Swift 的特性之一,它意味着开发者只需关注内存所有者关系而不必在意具体的内存地址和存储细节。 + +在另一些场景,比如 Swift 与 C 互操作,则可以通过一系列 Unsafe API,达成对特定内存的操作能力。就像其名称一样,它不安全,稍有不慎就会崩溃,但也带来更多的底层能力:读写类型化指针内容,借助 Memory Layout 操作原始指针,以及绕过 ARC 手动管理内存等。通过这篇文章,你可以对 Unsafe API 有整体的认知。 + +## 代码 + +### [swiftui-animation-library](https://github.com/amosgyamfi/swiftui-animation-library) + +[@Damien](https://github.com/ZengyiMa):swiftui-animation-library 是一款 SwiftUI 动画库,包括加载/进度,循环,开关,退出,淡入淡出,旋转和背景动画,可以让你可以在下一个 iOS 应用程序或项目中直接实现这些动画。该库还包含大量弹性动画示例,例如惯性弹跳,摇动,旋转,果冻,橡皮筋等。 + +### [FuzzyFind](https://github.com/truizlop/FuzzyFind) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):FuzzyFind 是一个 Swift 软件包,它使用 Smith-Waterman 算法的修改版来执行模糊搜索。该软件包包括两个核心功能:bestMatch 和 fuzzyFind,使用 bestMatch,您可以在单个字符串中找到查询的最佳对齐方式,使用 fuzzyFind,您可以对多个输入运行多个查询,并获得与所有提供的查询匹配的输入的所有对齐方式。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#155-2021.04.12.md b/Reports/2021/#155-2021.04.12.md new file mode 100644 index 000000000..9758e206e --- /dev/null +++ b/Reports/2021/#155-2021.04.12.md @@ -0,0 +1,80 @@ +# 老司机 iOS 周报 #155 | 2021-04-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) 提出。 + +## 文章 + +### 🌟 🐕 [Introducing Swift Collections](https://swift.org/blog/swift-collections/) + +[@EyreFree](https://github.com/EyreFree):上周,Swift 官方发布了一个新的开源库 [Swift Collections](https://github.com/apple/swift-collections),它专注于扩展可用的 Swift 数据结构集。我们都知道目前 Swift 标准库实现了三种最基本的通用数据结构:数组、集合和字典,但很多时候为了更高效地解决问题,开发者们往往需要借助一些其他的数据结构。现在官方已经注意到了这一点,通过提供 `Collections` 库来让开发者们能够花费尽可能少的精力来编写更快、更可靠的程序,它的初始版本包含了三种最常见的数据结构:双端队列 Deque、有序集合 OrderedSet 和有序字典 OrderedDictionary。同时官方也给出了贡献代码的标准,感兴趣的同学赶紧来看看。 + +### 🌟 🐕 [iOS 恢复调用栈(适配 iOS 14)](https://iosre.com/t/ios-ios14/19332) + +[@Leo](https://github.com/leomobiledeveloper):逆向的时候,如果调用栈是符号化的能大幅提高效率。作者详细的介绍了在 iOS 14 上如何一步步获取符号信息,最后对 Mach-O Patch 来恢复符号。除了对逆向很有用,文章里涉及到的底层知识也非常推荐阅读。 + +### 🌟 🐕 [clang 源码导读(8):词法分析和预处理指令](https://mp.weixin.qq.com/s/zzDS0mnNSyuRwpdcUR6obg) + +[@JonyFang](https://github.com/JonyFang):我们知道 `clangLex` 主要负责**词法分析**和**预处理**,用于处理宏、令牌和 pragma 构造。在本文中,作者通过实际的例子对 `clangLex` 的**词法分析**和**预处理指令**相关的流程进行了梳理和总结。为了帮助读者更直观的理解 `clangLex`,作者一并提供了一份对应的预处理流程图。 + +### 🌟 🐢 [看不懂学不会没有用的计算几何](https://juejin.cn/collection/6913090306690777102) + +[@Parsifal](https://github.com/ParsifalC):做图形视觉相关开发的朋友一定离不开计算几何,这个系列是用 Swift 为我们讲解常用的计算几何场景,图文并茂,对初涉视觉方向的同学会有很大帮助。 + +> 由 [XanderXu](https://github.com/XanderXu) 自荐,另外他编写着同名的小专栏 [ARKit 与计算几何](https://xiaozhuanlan.com/computationalgeometry),所有内容均会在小专栏上首发。 + +### 🐕 [从 Objective-C 和 Swift 看字典的性能优化(1)](https://mp.weixin.qq.com/s?__biz=MzAxMzk0OTg5MQ==&mid=2247485326&idx=1&sn=5b4dc0528da22b90a701fb249c2b4f44&chksm=9b9b8922acec00341388a8a686c3bb83475f1de338925b8c35957b7fc45ba38a3d32051d2dd1&scene=178&cur_album_id=1742555951460597762#rd) + +[@AidenRao](https://weibo.com/AidenRao):本系列文章会通过分析系统库汇编的方式,研究 Dictionary 底层相关的知识。 + +本文主要分享了 NSDictionary 的两个子类:__NSPlaceholderDictionary(占位的类型,通常只出现在崩溃日志中) 和 __NSDictionaryI (存有多个键值对的不可变字典) 的详细构造过程。 + +### 🐎 [Exploring some of the lesser-known, built-in Formatter types](https://www.swiftbysundell.com/articles/exploring-some-of-the-lesser-known-formatter-types/) + +[@享耳先森](https://github.com/iblacksun):开发者们对常用的 `NumberFormatter` 和 `DateFormatter` 可能比较熟悉,本文介绍了 Foundation 库里其他好用的 Formatter,如 `PersonNameComponentsFormatter` `CNPostalAddressFormatter` `RelativeDateTimeFormatter` 等。 + +### 🐎 [DWARF文件初探——提取轻量符号表](https://mp.weixin.qq.com/s/s8iwQLNtla5nxF_Tmj2wJg) + +[@红纸](https://github.com/nianran):本文作者从实践出发,简单剖析了 **DWARF** 文件的文件组成。通过 **dwarfdump --debug-info** 命令可以获取到函数的文件名、函数名、函数起始地址、函数终止地址,再利用 **dwarfdump --debug-line** 获取到行信息后,可以查看当前这个行的起始地址位于同文件下那个函数的指令区间内,即可得知函数名。 + +> 推荐人:[pilaf-king](https://github.com/pilaf-king) + +## 代码 + +### [EmbeddedScrollView](https://github.com/623637646/EmbeddedScrollView) + +[@老峰](https://github.com/gesantung):开发中会有多 ScrollView 嵌套滚动这样的需求,作者将这一实现进行了封装,提供了简单易用的 API, 一行代码解决竖直嵌套滚动问题,手势无冲突,动画完美衔接,有类似需求的同学可以借鉴参考。 + +> 推荐人:[623637646](https://github.com/623637646) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#156-2021.04.19.md b/Reports/2021/#156-2021.04.19.md new file mode 100644 index 000000000..12aa60433 --- /dev/null +++ b/Reports/2021/#156-2021.04.19.md @@ -0,0 +1,111 @@ +# 老司机 iOS 周报 #156 | 2021-04-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) 提出。 + +## 新闻 + +### [为 AppTrackingTransparency 做好准备](https://developer.apple.com/cn/news/?id=8h0btjq7) + +[@Parsifal](https://github.com/ParsifalC):[iOS 14.5](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14_5-beta-release-notes) 已经公开测试很长一段时间了,现在到了第八个 Beta 版本。根据目前各方面信息来看,iOS 14.5 很可能在 4 月份正式发布。iOS 14 开始苹果便在和开发者强调新的隐私跟踪策略管理方式,而这个措施即将随着 iOS 14.5 的发布正式实施。新的 ATT 以及 SKAdNetwork 2.0 推出,还将伴随着 [《App Store 审核指南》的准则 5.1.2 (i)](https://developer.apple.com/cn/app-store/review/guidelines/#5.1.2),目前已经有不少 App 被这个原因拒绝,需尽早自查和更新相关第三方 SDK 进行适配。 + +> 另推荐一篇关于 ATT 和 SDAdNetwork 的文章:[全面解读 iOS 14 ATT 和 SKAdNetwork](http://www.woshipm.com/pd/4150041.html) + +## 文章 + +### 🌟 🐕 [Wakeup in XNU](https://mp.weixin.qq.com/s/8OBAmyCLa6_eFYqIJgoCQw) + +[@Leo](https://github.com/leomobiledeveloper):APP 异常退出的原因有很多种,大家比较熟悉的是 Crash 和 OOM,事实上 CPU Wakeup 超过限制也会触发系统强杀。本文从内核源码出发,剖析了 Wakeup 背后的原理,也给出了一些典型的会触发这种强杀的场景。文章研究深入,逻辑清晰,推荐对功耗和稳定性感兴趣的同学阅读。 + +### 🌟 🐕 [哈啰出行 iOS App 首屏秒开优化](https://mp.weixin.qq.com/s/5Ez2BrsyBgQ8aHZqlYtAjg) + +[@JonyFang](https://github.com/JonyFang):产品高频迭代在快速解决业务发展的同时也带来了大量的技术债堆积,如果没有良好的规范和监控流程会使项目在稳定和体验上存在较多的隐患和挑战。正如启动阶段的启动项和业务逻辑堆积,本文介绍了哈啰出行 iOS App 首屏秒开的优化路径: + +1. 数据收集:收集启动阶段、首页加载、各业务模块加载性能数据; +2. 问题分析:确认并定位分析目前各阶段加载存在或依赖的问题; +3. 优化解决:启动项问题、首页逻辑处理问题、业务模块问题解决; +4. 持续监控:持续优化 & 监控首页的加载渲染和模块性能问题 & 可视化数据; + +### 🌟 🐕 [干货 | 减少 50% 空间,携程机票 React Native Bundle 分析与优化](https://mp.weixin.qq.com/s/aajdqmpCLKvGaokL4Qp1tg) + +[@looping](https://github.com/looping):本文记录了作者从 JavaScript 层面对 React Native 的业务包进行分析与优化的过程,对常用的解决方案和优化步骤进行了详细的总结,还夹带了携程内部的 CRN bundle 分析平台介绍,为高效且能持续性解决问题提供了借鉴思路,是一篇不可多得的工程技术实践好文。 + +### 🐕 [深度解读便利蜂 React Native 多版本共存的平滑升级实践](https://mp.weixin.qq.com/s/q296ppm6iB9cou5ZgBytrg) + +[@Damien](https://github.com/ZengyiMa):随着前端技术生态的演进,React Hook、Fast Refresh 等技术、工具不断地迭代涌现,版本升级为业务提效赋能的同时,伴随的 breaking change(重要改动)、行为变更也带来了更多的风险和成本。对于便利蜂而言,面对迭代不频繁的项目,升级的成本则远大于升级的收益。具体实现方式是通过修改包名、动态库,可以把多个版本的 React Native 放置同一个 App 中,同时为了避免代码冗余,优化包大小,精简掉了老版本大部分代码,并实现了自定义 Module、Component 的跨版本支持。在 React Native 中升级带来的破坏性问题上给了我们一个新的思路。 + +### 🐕 [极致首帧播放方案 - 零首帧解决方案](https://mp.weixin.qq.com/s/IGA3caeXMB-upTFiV8MuYg) + +[@anotheren](https://github.com/anotheren):视频播放,特别是短视频播放领域,对于首帧的展现,以及后续播放流畅度有着极高的要求。本文来自字节跳动团队,主要按照首帧的各个阶段分别介绍了对应的优化方案,也简单介绍了预加载和预渲染这两个优化首帧的利器,在文章最后针对长视频以及历史进度起播这两种场景,介绍了对应的优化手段。当然不同团队会面临不同的问题,如果你也需要特定的优化,不妨来找找思路。 + +### 🐢 [听说你想写个渲染引擎(css 解析 + 样式树)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,使用 Swift 实现引擎,代码开源,可以在 [Github](https://github.com/silan-liu/tiny-web-render-engine-swift) 查看。在往期周报中我们推荐了 [HTML 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=2&sn=986f6eb0a7bece1d4e70253c3c9b7020&chksm=cf558945f8220053a6f15f658bcc2e442ee238c5639837076a85b2ceb6f7f6d104e4fbebc464&cur_album_id=1717440219009892354&scene=189#rd),本期作者更新了 [CSS 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485200&idx=1&sn=6f5eca77d57bac8909b0c813d1c2c414&chksm=cf5588d8f82201ce7b85fa35aea9b58dc953c8d85167fa1f589e9d7fd0e7ac1c90d1e21fd565&token=1141333798&lang=zh_CN#rd) 和 [样式树](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485200&idx=2&sn=3c7bc2b702fd01c9215bad2d26786078&chksm=cf5588d8f82201ce64e1729d490d2ef31dda69c1d23656c386184e7399941b0bc28855b9588c&token=1141333798&lang=zh_CN#rd) 2 篇新内容。感兴趣的读者可以持续关注,跟随作者一起学习。 + +### 🐢 [抖音 iOS 工程架构演进](https://mp.weixin.qq.com/s/HHH5_IEbsR8iSmXSIdeutw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):从 16 年至今,抖音实现了从零到六亿的日活增长,快速的业务发展对技术支撑提出了更高的要求。本文讲述了抖音 iOS App 工程架构在不同的阶段对组件化方案的持续改进: + +- 原始工程架构 + - 单体架构 + Cocoapods:业务代码、工程配置、资源文件全部放在一个大业务仓库,由 Podfile 文件描述第三方仓库的依赖版本 + +- 分离壳工程后架构 + - 壳工程 + 业务仓 + 依赖仓:分离壳工程,工程配置、部分系统资源、工程主入口被拆分到主宿主壳工程,Podfile 拆分出版本依赖管理文件 Podfile.seer,由依赖管理平台进行各个版本的容器化管理 + +- 单仓多组件架构 + - 壳工程 + 单仓多组件 + 依赖仓:采用单仓多组件后,每个业务线仓库支持添加 podspec 增加组件,实现更小粒度的二进制依赖。业务线仓库内划分业务实现层、业务接口层、服务层和基础层 + +- Example 子壳工程架构 + - 壳工程 + AWELaunchKit + 单仓多组件 + 依赖仓:每个业务仓从宿主同步工程配置构建子壳工程。增加 AWELaunchKit 为子壳工程提供运行时的基础能力。通过服务层提供业务间运行时共享的服务能力,满足代码复用和更小二进制依赖 + +在架构演进过程中,还会遇到二进制污染、编译优化、主干分支稳定性、业务层的依赖耦合等问题,这必然是一个长期的、需要持续探索的系统性工程。 + +### 🐎 [软件幻灭(译)](https://tonsky.me/blog/disenchantment/zh/) + +[@老驴](https://www.weibo.com/6090610445):本文是作者对现在软件行业的一篇吐槽文。作者认为软件行业和 20 年前相比,更成熟,却也更复杂,更累赘。软件体积动辄是当年的 10 倍以上,性能却没有很大的提升。各种协议也越来越复杂。大家都只在乎完成产品,越来越少的人在乎软件本身的质量了。虽然我不完全同意作者的观点,但是也不得不承认这是事实,这也是一个行业逐渐成熟以后的必然。我们有能力改变么?也许有,但成功的可能性也并不高。 + +### 🐢 [Swift 的一次函数式之旅](https://mp.weixin.qq.com/s/yiF0NwXffrkunGOieWbIRA) + +[@莲叔](https://github.com/aaaron7):Swift 语言从诞生之日起就因为从纯函数语言中吸收了非常多的函数式特性而成为函数式编程爱好者们的津津乐道的热门语言之一。自定义操作符,函数是一等公民,简洁的闭包语法以及 maybe monad 的具体实现:optional,这些特性都带来了相当多的想象空间。一度在 15-17 年掀起了一股热潮。 + +18 年之后热度逐步减少,原因很多,其中比较关键的原因就是在实践中存在的理解成本高、调用栈复杂等问题一直没有得到很好的解决,所以也就一直未成为 iOS 开发的主流模式。不流行不妨碍这是一门非常有趣的学科,毕竟函数式编程的鼻祖 Haskell 社区就有一句谚语:Avoid success at all cost,不计代价的避免成功。指的是不为了流行去做事,而是做本来就正确的事情。所以小编也推荐大家可以适当关注函数式编程,享受抽象与形式的美带来的愉悦感。 + +这篇文章介绍了函数式编程的入门知识,同时也浅显易懂的讲述了通过函数组合提升代码可读性和 callback hell 的经典案例,适合感兴趣的同学们阅读。 + +## 工具 + +### [Nuke Docs](https://kean.blog/post/nuke-docs) + +[@老驴](https://www.weibo.com/6090610445):不论是开源项目还是公司内部项目中都有很重要的一环:写一份规范易读的文档。文档不仅仅是为使用者提供方便,也为自己之后可以更好地理解,重构,改进服务。Nuke 的作者就用 Blog 讲述了对于 Nuke 文档,是怎么做的选择,最后又是怎么优化的。文章里没有什么很详细的技术细节,但是思路值得学习。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#157-2021.04.26.md b/Reports/2021/#157-2021.04.26.md new file mode 100644 index 000000000..cf867a069 --- /dev/null +++ b/Reports/2021/#157-2021.04.26.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #157 | 2021-04-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) 提出。 + +## 公告 + +[@Parsifal](https://github.com/ParsifalC):本期是节前最后一期,5.1 期间周报停更,我们 5.10 再见! + +## 新闻 + +### [使用 Xcode 12 和 iOS 14 SDK 提交更新](https://developer.apple.com/cn/news/?id=ib31uj1j) + +[@Parsifal](https://github.com/ParsifalC):自 2021 年 4 月 26 日起,所有提交至 App Store 的 iPhone 和 iPad app 都必须使用 Xcode 12 和 iOS 14 SDK 或更高版本来构建。另外,这两天有部分读者表示 iTunes Connect 网站使用异常,其实苹果在 WWDC 2018 里就宣布启用 App Store Connect 服务了,**我们现在应该使用 https://appstoreconnect.apple.com/ 来进行管理。** + +### [WWDC 2021 Swift Student Challenge Submissions](https://wwdc.github.io/2021/) + +[@Damien](https://github.com/ZengyiMa):一年一度的 Swift 学生挑战赛开始啦,快来看看吧。胜者将会获得特别的 WWDC21 外套、定制别针套装和为期一年的苹果开发者计划会员资格。请踊跃参加吧。 + +## 文章 + +### 🌟 🐕 [Swift 2021 生态调研报告](https://mp.weixin.qq.com/s/5SXAozM2c6Ivyzl7B9IfQQ) + +[@JonyFang](https://github.com/JonyFang):一份 Swift 2021 生态调研的报告。虽然看起来现阶段的 Swift 还是在一个积累的过程,但随着 WidgetKit 这个标志性的 SDK 诞生,发展阶段逐渐从积累阶段转向发展期,毕竟目前 ABI 稳定了、Module 稳定了、对二进制组件的支持也有了、Swift 语言本身的版本变化也逐渐稳定,这些都给予了 Swift 很好的支持。Swift 的发展方向看上去不只是为了 Apple 生态体系内,从社区的规划及 Timac 的几篇分析文章可以看出 Swift 在多元发展上(破圈)的决心。国内的 Swift 发展被去年的 iOS 14 新特性盘活了,WidgetKit 功不可没,虽然文中未给出大部分公司都将转型的结论,但至少绝大部分互联网的头部公司已经兼容了 Swift 的开发,这是一个好的开始,相信在可见的未来,Apple 的转型决心会让国内的公司更重视这方面工作的重要性。 + +本篇主要结合下面几个纬度分析了 2021 年 Swift 在 iOS 整个生态圈的现状: + +1. Swift 语言 + - 版本变化 + - On the road to Swift 6 +2. 技术社区 + - 语言排行榜 + - 社区活跃度 + - 商用 SDK 的技术选型 +3. Apple 生态 + - SDK 能力 + - 原生 App 分析 + - iOS 中不同编程语言的发展 +4. 国内外客户端的使用现状 + - 数据样本 + - 2021 年现状 + - 数据解读 + +### 🌟 🐢 [基于 Flutter 的 Web 渲染引擎「北海」正式开源](https://mp.weixin.qq.com/s/tnHbceedNsoKgMrgoTyyuA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):单看标题想必大家已经有一个大致的猜测,不错,淘系技术团队基于 Flutter 做了一个跨端的渲染框架,你可以使用完全的前端开发方式来写 Flutter,同样的前端开发中可以用到的工具 / 框架等,都可以无缝用到该项目中,棒极了!!!并且 Kraken 完全按照 W3C 标准,同时对一些组件做了性能优化,比如滚动组件. + +### 🐕 [Why Swift closures are not Equatable](https://www.jessesquires.com/blog/2021/04/05/why-swift-closures-are-not-equatable/) + +[@极速男孩](https://github.com/ztlyyznf001):Swift 中的闭包与 C 和 Objective-C 中的代码块或者其他语言中的匿名函数类似,但是当我们用 == 或者 === 去比较两个闭包时都会报错,这篇文章解释了为什么不能比较两个闭包,以及如果可以比较两个闭包所带来的问题。 + +### 🐎 [开源神器:可快速在 iOS 设备上安装 Windows、Linux 等操作系统!](https://mp.weixin.qq.com/s/Q8CvdNBnpoLow98MM1MZ1g) + +[@老驴](https://www.weibo.com/6090610445):有没有想过在 iOS 上运行其他操作系统?按照现在 iPhone 的计算性能,性能上完全可以的。国外的一位叫 osy86 的开发者就搞出了这样的一个虚拟机,可以让你在 iPhone 上跑任意操作系统。不过因为 iOS 本身的限制,你需要自己签名或者在越狱的机器上安装。兴趣的可以试试看。 + +### 🐎 [Getting Ready for App Tracking Transparency](https://swiftsenpai.com/development/get-ready-apptrackingtransparency/) + +[@老峰](https://swiftsenpai.com/development/get-ready-apptrackingtransparency/):4 月 6 日 Apple 发布公告 [Get ready for AppTrackingTransparency](https://developer.apple.com/news/?id=8h0btjq7) 要求开发者如果应用有收集用户数据,并出于跨应用和网站跟踪的目的与第三方分享用户数据,那么从 iOS 14.5 必须通过 AppTrackingTransparency 框架获得用户授权。文章简要介绍了 IDFA 概念,以及如何接入 AppTrackingTransparency框架,有需求的同学建议阅读。 + +### 🐕 [Every SwiftUI protocol explained](https://www.fivestars.blog/articles/swiftui-protocols/) + +[@AidenRao](https://weibo.com/AidenRao):本文详细介绍了 SwiftUI 定义的 54 种协议,例如:核心协议 View 和 ViewModifier 用于定义视图和视图修饰符。APP 和 Scene 使 APP 的完整生命周期都可以基于 SwiftUI 实现。19 种 styles 协议用于修饰 label,button 等特定视图,Shape 和 InsettableShape 用于定义形状,Animatable 和 AnimatableModifier 用于实现动画。 + +## 工具 + +### [GitHub 缓存加速网站:GitClone](https://gitclone.com/) + +[@J_Knight_](https://github.com/knightsj):该网站提供了远程缓存 GitHub 库的方案:可以提高从 GitHub clone 代码的速度。具体有三种使用方法: +1. 替换 url:将 gitclone.com 嵌入到克隆地址 +2. 设置 git 参数 +3. 使用 cgit 客户端 + +详细的介绍可以进入该网站主页查看:https://gitclone.com + +## 代码 + +### [ExposureKit](https://github.com/623637646/ExposureKit) + +[@红纸](https://github.com/nianran):ExposureKit 是一款检测 View 曝光库,一行代码即可集成,让业务曝光数据统计分析变得更方便。该库同时支持 Swift/OC 的检测,其功能基于原作者 [Yanni Wang 王氩](https://github.com/623637646) 的另外一个仓库 [EasySwiftHook](https://github.com/623637646/SwiftHook/blob/master/Documents/README.zh-Hans.md) 实现函数 Hook。 + +> 自荐:[Yanni Wang 王氩](https://github.com/623637646) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#158-2021.05.10.md b/Reports/2021/#158-2021.05.10.md new file mode 100644 index 000000000..a3c4621be --- /dev/null +++ b/Reports/2021/#158-2021.05.10.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #158 | 2021-05-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) 提出。 + +## 福利 + +极客时间戴铭老师的「[iOS 开发高手课](https://time.geekbang.org/column/intro/100024501?code=0eTznNzpAbVisw%2FesJ9iM9iraIX21mfPuPgxm1jY5tI%3D)」**优惠活动截止时间是 5.12**,想要购买的读者可以通过周报二维码渠道,不仅**享受半价**,而且我们会将官方返现的 **20 元全额退款**给大家。更多详细内容可以参考 - [系统构建自己的 iOS 知识体系](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&tempkey=MTExMl9EcWloZVlNQyt6MjA1NS9pUEVtQ2RIY2JwcE1nQV9HeERVVkJBZk0zTVZjb2dCLUZaZEtsT1M3aFFCcURwM3ZJLU85OWVzYm9fei1UcnJRN2tDOVNFcGdkdDVoMElpcC1sMXNkd21LeWZaSEJWalRGNkQ2d25Bb012MWYxa2dnRmxGWFNWeGd6N0lCbk9rV1AxcWJRRW42X1Y3c3hEZW40M194c05Bfn4%3D&chksm=6aa285285dd50c3ef2fed31f056abbd0e6b0b9f0512b8ff8ec2e1560716fda253d1c28ecf600#rd)。 + +## 新闻 + +### 周报开通视频号了! + +[@Parsifal](https://github.com/ParsifalC):号外号外!!周报编辑组正式开通微信视频号了!为了丰富我们的内容形式,更好地将优质知识传递给大家,我们接下来也会尝试不同的方法。WWDC 2021 临近,我们今年也在考虑更多样化的『WWDC 内参』活动,关注视频号,或许 6 月有惊喜哦(**开通直播服务需要 1000+ 粉丝,希望大家多多帮忙!**)~ + +> **iTDriverr** 视频号开通在周报微信号里,欢迎大家添加! + +### [swift-5-4-released](https://swift.org/blog/swift-5-4-released/) + +[@享耳先森](https://github.com/iblacksun):五一长假前 Apple 随 Xcode 12.5 一起发布了 Swift 5.4 版,除 `Result 生成器` 等新特性外,5.4 主要集中在编译和运行性能的提升,具体内容也可以参考「知识小集」翻译的[这篇文章](https://mp.weixin.qq.com/s/CKx-UhzBkhDMDvDbzjX09g)。 + +## 文章 + +### 🌟 🐎 [美团做 React Native 性能优化的三个关键点](https://mp.weixin.qq.com/s/2D2l7NF0kmwAkfCI_PbZug) + +[@looping](https://github.com/looping):这是一篇 InfoQ 对美团移动端的采访记录,提到了美团在 React Native 性能优化实践层面的一些经验,以及对于技术框架选型的一些建议。里面讲的有些点还是比较干的,像是预告片,期待之后能在 QCon 大会上稀释下。本文可作为大纲参考,对罗列的问题结合我们自身的实际情况来分析,再看下跟大厂的差距,找到提升空间和下一阶段的演进方向。 + +### 🌟 🐕 [解读 Flutter 中热重载原理](https://mp.weixin.qq.com/s/Rd03kZLr26AJGcW2RXZc3w) + +[@Parsifal](https://github.com/ParsifalC):相比于前端圈子,开发调试体验是客户端人员挺头疼的痛点。而近些年 React Native/Weex/Flutter 等跨端框架吸引人的一方面也是其**热重载**这一开发体验,早之前社区有利用 File Watcher 监听文件变化并通过动态库注入与 runtime 在模拟器上实现热重载的 [InjectionIII](https://github.com/johnno1962/InjectionIII) ,甚至苹果自己也在 SwiftUI 上支持了实时预览。本文则基于 Flutter 源码,解读了 Flutter 是如何用 Dart 语言特性和 DartVM 实现其热重载功能。全文思路比较清晰,如果你也对 flutter 热重载机制有很大兴趣,阅读此文,应该能解决掉不少你的疑问。 + +### 🌟 🐕 [干货 | 携程火车票 Flutter 最佳实践](https://mp.weixin.qq.com/s/VP6WEQkEel3W4tdo3ThYDw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):本文介绍了携程火车票选择 Flutter 的初衷,Provider 状态管理的实际使用,建议 Flutter 主体的构架采用 MVVM 模式,还介绍了一些 Flutter 性能检测、量化工具和一些性能优化点供大家参考。收集了 Flutter 开发过程中常见并且大量发生的问题,并提供了相应的解决方案。 + +### 🐢 [听说你想写个渲染引擎(布局树 + 绘制)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485323&idx=1&sn=af965b57deaa2aabdd990348f7aa09ce&chksm=cf558843f822015544defa0c6af508642c840fc53f418c80d37b1af9b0018144b5139d6162f5&token=1028691144&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,代码[开源](https://github.com/silan-liu/tiny-web-render-engine-swift)。作者参考了 “动手写浏览器渲染引擎” 系列文章,原文用 rust 编写,作者使用 Swift 进行了重写。 + +根据渲染引擎的工作流程,分为 “HTML 解析”、“CSS 解析”、“生成样式树”、“生成布局树”、“绘制” 5 篇内容。在往期周报中,我们已经推荐前 3 篇,本期作者更新了最后 2 篇。至此,本系列已全部完结,感兴趣的读者可以一起动手练习,对我们理解现代浏览器渲染引擎的工作原理会有所帮助。 + +### 🐎 [How OrderedSet works](https://oleb.net/2021/ordered-set/) + +[@四娘](https://kemchenj.github.io/):新的 [Swift Collection](https://swift.org/blog/swift-collections/) 库为我们带来了一些实用的集合数据结构,在这篇文章里作者就为我们分析了其中 OrderedSet 的实现方式。 + +## 代码 + +### [GetX](https://github.com/jonataslaw/getx) + +[@Damienn](https://github.com/ZengyiMa):GetX 是 Flutter 的一个轻巧并且强大的库。它具有高性能的状态管理、智能的依赖注入和路由管理的能力。并且 GetX 围绕着研发的生产力、高性能和优秀的代码架构这 3 点设计原则去整体性的设计,对于使用 Flutter 的同学不妨一试。 + +### [ResponderChain](https://github.com/GodL/ResponderChain) + +[@红纸](https://github.com/nianran):ResponderChain 提供了一种通过响应者链传递事件/数据的新方式,有别于传统 iOS 开发中 delegate 与 block 的形式,无需找到具体实例,即可进行数据和事件的传递。 + +> 自荐:[GodL](https://github.com/GodL) + +## 音视频 + +### [GGTalk | 某 C:两年前从合肥去广州,两年后从广州回合肥,我为什么放弃一线城市和一线大厂](https://www.xiaoyuzhoufm.com/episode/6087ff41d99c5b06d55584f7?s=eyJ1IjoiNWU3ZDRiZTBhMmYyZTUwM2NlYzQzZTM3IiwiZCI6MX0%3D) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一篇值得一听的播客,请到的嘉宾是两年前从合肥去广州,两年后又从广州回合肥的 BNC。这两年在微信工作的 BNC 也谈到了大家比较感兴趣的一些问题,比如在微信的工作体验以及为什么离开微信,微信为什么总是被骂等。逃离北上广还是回到北上广这几年时常会引起社会讨论,这是一个没有标准答案的选择,不管在哪里,遵从自己的内心,我们终将都有光明的未来! + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 哈啰出行(杭州/上海)招聘 资深/专家 iOS 开发工程师,参与哈啰出行 App 的软件架构设计 / 日常迭代开发;负责客户端应用优化及相关领域的技术探索;有大中型项目的开发经验优先,有跨端 (Flutter/ReactNative) 项目开发经验优先,有安全性、性能优化经验的优先。联系方式:邮箱:shishaoyong11215@hellobike.com 微信:CrazyCoder_SY + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#159-2021.05.17.md b/Reports/2021/#159-2021.05.17.md new file mode 100644 index 000000000..1e242219a --- /dev/null +++ b/Reports/2021/#159-2021.05.17.md @@ -0,0 +1,114 @@ +# 老司机 iOS 周报 #159 | 2021-05-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) 提出。 + +## 新闻 + +### [Announcing the Swift Mentorship Program](https://swift.org/blog/swift-mentorship-program/) + +> [知识小集](https://mp.weixin.qq.com/s/0B7kTL3UkvA_Nfpkzy7jUw):近日,Swift 官方针对 Swift 社区的新贡献者,发布了 Swift 导师计划。这一计划旨在为成为 Swift 项目积极开源贡献者的开发人员提供帮助与支持,同时可以获得社区中经验丰富的贡献者的直接指导。 +> +> 参与计划的每位开发者都有机会与 Swift 社区中经验丰富的开发人员联系,并向他们学习。同时,根据自己的学习目标,开发者可以为 Swift 项目甚至 Swift 编译器项目贡献代码。社区会根据学习目标来匹配开发者和导师,并让他们一起在开源项目上合作 12 周时间。 +> +> 一方面,对于新贡献者而言,降低了贡献代码的准入门槛,不需要事先为项目做出贡献,同时能提升更多的技能;另一方面,对于导师来说,也是一个不错的增加领导技能的机会。对于双方而言,都是有益的。 +> +> 感兴趣的小伙伴们,特别是在校的学生朋友们,可以考虑加入这一计划,相信一定能从中受益匪浅。该计划的详情可点击原文链接查看。 + +## 文章 + +### 🌟 🐕 [LLVM Link Time Optimization](https://mp.weixin.qq.com/s/Th1C3_pVES6Km6A7isgYGw) + +[@Leo](https://github.com/leomobiledeveloper):Link Time Optimization,简称 LTO 是一种在链接期间对代码进行优化的技术,因为链接过程能看到应用程序的全貌,所以能做一些全局的优化来提高运行时的性能以及减小二进制的大小。本文是一篇 LTO 入门的佳作,作者不仅分析了实际场景下如何让 LTO 产生效果,还从原理的角度讲解了 LTO 是如何工作的,推荐阅读。 + +### 🌟 🐕 [XD to Flutter 2.0 现已发布](https://mp.weixin.qq.com/s/VWSzeQb_pV9EWXqdWuu51A) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):XD to Flutter 插件是一个功能强大、易于使用的工具,可将您的 Adobe XD 设计导出为简洁、有效的 Flutter 代码。您可以从自己的设计中复制特定视觉元素的代码,导出各种可再利用的 Widgets,甚至可以将一些视图整个导出,无论您是要使用它来复制某个构思精妙的渐变效果的代码,还是要导出完全响应式、参数化、交互式的 Widget,都非常简单。 + +### 🌟 🐕 [A站 的 Swift 实践 —— 上篇](https://mp.weixin.qq.com/s/rUZ8RwhWf4DWAa5YHHynsQ) + +[@xiaofei86](https://github.com/xiaofei86):经过不断迭代,Swift 如今已成 iOS 乃至苹果全平台首选开发语言,A 站也已经完全投入到 Swift 浪潮中,享受到 Swift 语言带来的舒适和高效开发体验。作为 A 站的 Swift 实践上篇,本文介绍了 Swift 的技术背景,A 站使用 Swift 的架构演进过程,以及对最新框架 SwiftUI 和 Combine 等技术的选型。大家可以关注“快手大前端技术”公众号,下篇内容会详细介绍混编和 Swift 动态性。 + +### 🐢 [自由、开源及其敌人 —— RMS事件簿](https://mp.weixin.qq.com/s/Q3DDYYiGbJJREii7ZPBuMg) +[@zvving](https://github.com/zvving):无论你身处大厂还是创业团队,不可避免,我们大量的工作要用到开源项目。除了不同开源协议对源码开放&商用的已有约定外,你可曾想过:基于公司或个人的道德判断,你也许不能再使用部分开源项目。 + +[『开源项目是否需要考虑使用者道德』](http://esr.ibiblio.org/?p=8106)这一争论从未停止,而今愈演愈烈。 +本文用罗列各方事件的方式,尽可能客观的描述围绕[RMS(Richard M. Stallman)](https://stallmansupport.org/who-is-richard-stallman.html)以及开源&[道德平权思潮](https://ethicalsource.dev/)讨论的纷争。 + +作为软件行业从业者,这纷争成因以及对开源社区的影响,值得我们每个人关注。 + +> 1. RMS是自由软件运动&GNU 的发起人,GCC、EMACS 作者 +> 2. 值得参考的相关评论:[围绕RMS、开源、自由软件的两场“战争”](https://mp.weixin.qq.com/s/Kr0FzkpA-EHT51F7PVX76A) + +### 🐕 [Monitoring for iOS with MetricKit: Getting Started](https://www.raywenderlich.com/20952676-monitoring-for-ios-with-metrickit-getting-started/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了苹果官方提供的用于监控 iOS 程序的 MetricKit,该组件自 iOS 13 之后提供,在 iOS 14 也提供了新的 API。本文介绍了该组件的几个关键部分: + +- MXMetricManager:核心管理类 +- MXMetricPayload:封装了每日上报的数据 +- MXDiagnosticPayload:具体的性能相关的信息 +- MXCallStackTree:调用栈相关的信息 +- MXAppExitMetric:APP 退出的相关信息(iOS 14提供) + +最后也介绍了该组件在 Organizer 上的使用方法。 + +### [Flutter 状态管理: 使用 MobX](https://mp.weixin.qq.com/s/ken-UT3cmxc5aeWKkM-Lzg) + +[@Damien](https://github.com/ZengyiMa):众所周知,状态管理是每个软件项目都需要持续迭代更新的方向。在 Flutter 项目中,你可以使用 MobX 来管理应用中的各种状态,要在 Flutter 中高效地使用 MobX,需要遵循以下原则: +* 我们能访问任意状态中的可观察对象(即在我们应用运行过程中发生变化的变量)。 +* 我们可以在 View 中展示这些状态,并响应 Action 意图。 +* 我们可以修改状态,从而更新可观察对象以及相应的 View。 + +除此之外,本文还配套了详细的使用示例,使用 Flutter 的同学不妨一试。 + +## 代码 + +### [SwiftUI-Hooks](https://github.com/ra1028/SwiftUI-Hooks) + +[@AidenRao](https://weibo.com/AidenRao):作者基于 React Hooks 的思想,开发了一套 SwiftUI Hooks。SwiftUI Hooks 将状态和生命周期引入视图,而不必依赖于类似 @State 或 @ObservedObject 这些仅允许在视图中使用的元素。它还允许我们通过构建由多个钩子组成的自定义钩子在视图之间重用状态逻辑。此外,诸如 useEffect 之类的钩子也解决了 SwiftUI 中缺乏生命周期的问题。 + +### [Animatable - 使用 PropertyWrapper 实现动画代码复用](https://github.com/GodL/Animatable) + +[@享耳先森](https://github.com/iblacksun):`PropertyWrapper` 结合 `Codable` 实现 Model 的安全解析相信大家在使用了,作者利用 `PropertyWrapper` 实现了一个 CAAnimation 复用的库,代码非常简单,可以直接跳到 Github 浏览。 + +> 自荐:[GodL](https://github.com/GodL) + +### [OverlayContainer](https://github.com/applidium/OverlayContainer) + +[@JonyFang](https://github.com/JonyFang):`OverlayContainer` 是一个 Swift 编写的 UI 库。它的作用是让一些场景下的界面开发变得更加轻便,例如在 Apple Maps、Stocks 或 Shortcuts 应用中看到的界面。 + +### [SwiftRegexDSL](https://github.com/kodlian/SwiftRegexDSL) + +[@老峰](https://github.com/GesanTung):在开发中我们经常会写正则表达式处理字符串,虽然每天都在使用和创建正则表达式,但是每次我们都必须依靠网络搜索和旧版文档。`SwiftRegexDSL` 提供了一种使用声明式结构化的 API 来使用正则表达式,它主要提供 match、range、replacingOccurrences 等字符串处理方法。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#160-2021.05.24.md b/Reports/2021/#160-2021.05.24.md new file mode 100644 index 000000000..2ee4d2479 --- /dev/null +++ b/Reports/2021/#160-2021.05.24.md @@ -0,0 +1,99 @@ +# 老司机 iOS 周报 #160 | 2021-05-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) 提出。 + +## 通知 + +### 🌟 周报公众号新增关键词自动回复 + +[@Parsifal](https://github.com/ParsifalC):公众号后台不时都有读者发送一些希望查询检索的词语,为此我们根据“个人经验”设置了几条较常见的内容,并配上对应的 GitHub 检索页面和可能有的专辑链接。已经设置的关键词有 **招聘**、**flutter**、**swift**、**webview**、**swiftui**、**性能优化**和 **IAP** 等。 + +当然,我们更鼓励喜欢自己动手,丰衣足食的朋友,目前检索周报内容有两种方式: + +- 到我们 [GitHub Repo 利用 “Search In Repo” 的功能](https://github.com/SwiftOldDriver/iOS-Weekly/search?q=swift) 对周报全仓库内容进行检索 +- 到我们微信公众号主页的右上角搜索功能进行公众号内检索,由于我们迁移过一次公众号,这种搜索方式只能搜索去年下半年开始的内容 + +### 🌟 周报公众号代发内推信息事宜 + +[@Parsifal](https://github.com/ParsifalC):目前客户端,尤其是 iOS 岗位,都比较缺乏高级工程师,理解各位招聘负责人的不容易。所以周报目前是友情代发招聘信息不收费,以后也不会收费。但正如大家所看到的那样,我们收到的招聘信息只会放在次条推送,而次条则依赖于我们首条的文章。所以首条如果没内容的话,自然就不会有次条了。这就导致如果招聘需求多的话,就会排队比较久。介于这种情况,我们很希望大家向我们公众号投稿,以稿发招聘信息,我们会将该招聘需求从队列里提前发送,并且从招人诚意上来看,用一篇值得大家认可的文章来切入招聘,也会更有说服力,得到曝光的机会也更多。 + +最后,所有招聘事宜和投稿事宜,可以加 V 联系 **iTDriverr**。 + +## 文章 + +### 🐢 [Flutter 2.0 iOS 包大小优化 ](https://juejin.cn/post/6959811895645700132/) + +[@邦Ben](https://weibo.com/linwenbang):该文章介绍了在 Flutter 2.0 下如何拆分 AOT 编译产物,以实现动态下发这部分产物从而达成包体积优化的目的。Flutter 2.0 对比 1.x 的版本来说调整了不少流程,因此对于做过 1.x 拆分的同学升级会有所有帮助,想了解整体加载流程的话也值得一看。不过这里值得注意,任何动态下发都会存在失败率的可能,因此如果你的 APP Flutter 作为核心部分不可缺少的话,并不太建议做拆分,也需要考虑好容错降级的处理,同时 iOS 的包体积要求一般也相对宽松。 + +### 🐕 [iOS 极致速度优化:快速打开任意 APP 的设置界面](https://mp.weixin.qq.com/s/DpLy_o3wMpZauiPnU1aSBw) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):本文通过分析 [UIApplication openURL:] 的背后逻辑,提供了一种打开任意 APP 设置页面的方法。同时也可以发现,该方案可以减少了很多检验逻辑,并减少了 xpc 调用,可以大幅度提升打开设置页面的速度。 + +### 🌟 🐕 [探索微信聊天 UI 逻辑实现](https://everettjf.github.io/2016/06/19/reverse-explore-wechat-message-design/) + +[@zvving](https://github.com/zvving):『聊天页面 cell 有两种实现方式:一种是每类消息定义不同 Cell,另一种是微信的实现方式。』是段子也是事实。本文作者 [Everettjf](https://everettjf.github.io/about/) 详细记录逆向执行及分析过程,带你一起了解微信聊天界面的实现方式,是不可多得的逆向学习案例。 + +> 文章成于 2016 年,经与微信同学确认,诸多内容已经调整,文章逆向的探索过程依旧值得学习。 + +### 🌟 🐢 [普通技术人的成长路径 - 一位客户端老兵的经验之谈](https://mp.weixin.qq.com/s/IrSQyyc0J3SXBuWs9M3SYA) + +[@折腾范儿_唯敬](https://weibo.com/agvicking/):做客户端的同学或多或少都会进入一些迷茫期,客户端这条路的发展有多深?我该如何提升自己?如何摆正自己的心态来面对现今工作上越来越多的焦虑?不妨看看牟爽的这一篇经验之谈,看看过来人这一路是如何走过来的。整篇文章更多是老兵的个人感慨分享,因为每个人的工作经历与成长历程不同,老兵在文中所讲的也许不见得能100%和每个人不同的经历产生共鸣,而且短短的文字无法深刻的表达出这些真实经历背后真实的故事所对应的思考。但相信老兵的感慨是能够让读者感受到真诚与一些作为经历过人的苦口婆心,有不解和困惑也欢迎和老兵进一步进行交流与解惑 + +### 🐢 [【译】SE-0306 Actors](https://github.com/SwiftOldDriver/iOS-Weekly/issues/2792) + +[@四娘](https://kemchenj.github.io/):Swift 在下个版本 5.5 将会带来 async/await 语法的支持,它解决的是异步编程控制流复杂的问题,让我们可以像同步代码一样去组织代码的控制流。 + +从异步迈向并发的路上,我们还需要考虑如何组织调度这些异步操作,并且避免并发数据访问带来的数据竞赛问题。Swift 选择了 Actor 作为它的并发模型,**将 actor 作为一种新的类型引入,并且为其提供了静态的 data-race 检测**。 + +这是自 1.0 版本之后首次引入的新类型,足以说明这次改动之大,与过去两年的小修小补不同,强烈推荐大家阅读这份提案,它将会在未来两三年,影响 Swift 编程模型的方方面面。 + +### 🐎 [越狱 iOS app 砸壳这件事儿](https://mp.weixin.qq.com/s/xFHA2tlc6HCLti_ihlrsZA) + +[@Damien](https://github.com/ZengyiMa):你对逆向感兴趣吗?在所有逆向教程中都会从砸壳这一步开始,那么什么是砸壳呢?以及砸壳的原理是什么呢?那就一起来深入了解一下吧,本文会详细介绍如何砸壳,以及砸壳的多种思路和手段。对想了解逆向知识的同学是个不可多得的入门教程。 + +## 摸鱼周报 + +[@摸鱼周报 #11](https://mp.weixin.qq.com/s/hE9wYlLX8F1sKjIF5eIPVQ):本期摸鱼周报带来了 **程序员必知的硬核知识大全** 的内容解读,它由 [crisxuan](https://github.com/crisxuan/bestJavaer) 整理完成,经作者授权该 PDF 已经放在了周报仓库里,有兴趣的同学可以下载阅读全文。我们以概念的形式对一些重要知识进行解释,会分三期,本期周报是第一期内容,包含有:CPU、寄存器、程序计数器、内存,IC 等内容的介绍。 + +另外我们还总结了几个实用的 Tips :如何在不继承第三方 SDK 的情况下完成对应的身份验证以及如何使用 Charles 为 Apple TV 端的网络请求进行抓包。 + +## 代码 + +### [UIImageColorRatio](https://github.com/623637646/UIImageColorRatio) + +[@水水](https://www.xuyanlan.com):使用 Swift 实现的计算 UIImage 各颜色占比的工具。 + +> 由 [Yanni Wang 王氩](https://github.com/623637646) 自荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#161-2021.05.31.md b/Reports/2021/#161-2021.05.31.md new file mode 100644 index 000000000..acf65e555 --- /dev/null +++ b/Reports/2021/#161-2021.05.31.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #161 | 2021-05-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) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 2.2 发布](https://mp.weixin.qq.com/s/_btkqmzWMeZLlL4UdhtUhw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Google I/O 2021 大会上, Flutter 2.2正式发布,号称是迄今为止最出色的 Flutter 版本。在稳定版和预览版均有不少新特性发布: +- 稳定版: + - Dart 2.13 + - Flutter web 更新 + - iOS 页面转场和增量式安装 + - 更多 Material 图标 + - 改进文本处理方式 + - 自动滚动行为 + - TextSpan 上的鼠标指针 +- 预览版: + - iOS 着色器编译改进 + - Android 延迟加载组件: 可下载的 AOT 代码和资源 + - Flutter Windows UWP alpha 版 + - ARM64 Linux 主机支持 + +## 文章 + +### 🌟 🐢 [A站 的 Swift 实践 —— 下篇](https://mp.weixin.qq.com/s/EIPHLdxBMb5MiRDDfxzJtA) + +[@xiaofei86](https://github.com/xiaofei86):经过不断迭代,Swift 如今已成 iOS 乃至苹果全平台首选开发语言,A 站也已经完全投入到 Swift 浪潮中,享受到 Swift 语言带来的舒适和高效开发体验。《[A 站的 Swift 实践——上篇](https://mp.weixin.qq.com/s?__biz=MzkxOTI0MTA2OA==&mid=2247485577&idx=1&sn=8afb1e639a832c10a966ff0ab7576b44&chksm=c1a4608af6d3e99ceeff729ea6736394266cbca7ac46040a1401d1dd805d4ae0950a5f1ae411&scene=21#wechat_redirect)》介绍了 Swift 的技术背景、Swift 的架构演进过程以及对最新框架 SwiftUI 和 Combine 等技术的选型。作为下篇文章,本文会继续介绍 Swift 的混编和动态性。 + +### 🌟 🐎 [SwiftUI @ Netflix:推动新技术落地是怎样一种体验?](https://mp.weixin.qq.com/s/oRPRCx78owLe3_gROYapCw) + +[@zvving](https://github.com/zvving):项目中如何推动落地新技术,是技术人持续面对的问题: + +- 选择什么新技术?可以是有业务/性能收益,也可以是降低开发/维护成本,切换/学习成本是否可控 +- 在什么场景落地?要有足够的用户量级论证收益,也要模块独立避免引入成本过高。业务简单稳定的模块是不错的选择 +- 如何在项目中发起?有充分的调研与清晰的方案(硬实力),也要与上下游团队的频繁沟通同步预期(软沟通) +- 如何落地?尤其留意通过 A/B 实验论证对产品指标及工程指标的影响,指标不负向,成功大半 +- 落地的后续?反思新技术的引入过程是否和预期一致,后续的规划是怎样 + +[故胤道长](https://www.jianshu.com/u/8d5b91490ca5)对以上问题的思考在文中均有体现,是非常不错的参考案例。你对项目中计划引入的新技术,又有怎样的规划? + +### 🚧 🐕 [源码级调试 App Store 包](https://blog.indigo.codes/2021/05/23/debug-your-app-store-app/) + +[@Smallfly](https://github.com/iostalks): 你是否曾为本地 Debug 没问题,Release 包却不能稳定复现 Bug 束手无策?本文作者 @靛青 介绍了如何从一个壳工程开始,一步步实现调试 AppStore / TestFlight 包。 + +文中提供了自动化构建调试工程的脚本,你只需要提供自己的 ipa 和 dSYM 文件,使用少量的 `lldb` 命令,即可完成源码级断点调试。 + + +### 🐕 [正经分析iOS包大小优化](https://mp.weixin.qq.com/s?__biz=MzU3NTY3MTQzMg==&mid=2247505253&idx=1&sn=7123c2548a3d8412a6e0ec6e72634664&chksm=fd1d0882ca6a81948d0125ca7d5a8d614bb2f79b8dc274a6d59205ddc74b71d3242826bc7e42&mpshare=1&scene=1&srcid=0527S6Ko4joeOz56MiT0Vzfj&sharer_sharetime=1622074623255&sharer_shareid=283ec3502fd417eeb429d443f712b520#rd) + + +[@J_Knight_](https://github.com/knightsj):本文作者笔者根据已有的文章、知识结合自己的理解和实践,梳理了一份比较全面的包大小优化的方案。本文先分析了安装包的构成,然后给出了 Xcode 编译设置优化方案和优化前后的数据对比。另外还提供了资源文件的优化方法,包括无用资源的删除(未使用的代码和图片,重复导入的资源等)以及资源(图片,网页,音频等)的压缩方案。另外在文章结尾还提供了本文的参考文献,读者也可以做延伸阅读和学习。 + + +### 🐎 [一种使用 CocoaPods 同步 Git hooks 的方案](https://dirtmelon.github.io/posts/cocoapods-sync-githooks/) + +[@四娘](https://kemchenj.github.io/):Git hooks 是一段脚本,可以在 Git 执行某些操作之前或者之后执行,比如说 commit , push 或者 receive,我们可以使用它来进行代码格式化等操作。 + +但它不会被 Git 追踪,只能通过其它手段进行同步,本文就介绍了如何使用 Cocoapods 插件进行同步。 + + +### 🐕 [iOS优雅实现Pipeline设计模式](https://github.com/ChenZeBin/blogs/blob/master/%E6%96%87%E7%AB%A0/PipelineDesign/iOS%E4%BC%98%E9%9B%85%E5%AE%9E%E7%8E%B0Pipeline%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md) + +[@JonyFang](https://github.com/JonyFang):本文主要介绍了 Pipeline 设计模式,使用场景,以及如何使用 OC 语言用链式语法优雅的将 Pipeline 串联起来。文中最后附带了示例 Demo,对于读者了解 Pipeline 设计模式的实践有一定的帮助。 + +### 🚧 🐕 [How to scan a credit card using Apple Vision and VisionKit natively in iOS Swift with SwiftUI and UIKit](https://khalidasad93.medium.com/how-to-scan-a-credit-card-using-apple-vision-and-visionkit-natively-in-ios-swift-with-swiftui-and-247fa0863141) + +[@红纸](https://github.com/nianran):iOS 13 发布的新框架 VisionKit 是关于文档识别的新框架,本文作者保姆式介绍了该框架在扫描信用卡场景下,如何配置工程、视图、逻辑,用自定义解析逻辑提高扫描精度。在文末作者还提供了完整版 Demo,有兴趣的小伙伴可以进行尝试一下~ + +## 摸鱼周报 + +[@摸鱼周报 #12](https://mp.weixin.qq.com/s/hJkXjH1OFoF1XSd1ENlpAQ):本期摸鱼周报带来了 **程序员必知的硬核知识大全** 的第二部分内容,包含对:二进制、大小端、缓存、压缩算法等内容的介绍。 + +另外我们还总结了几个 Xcode 耗时统计的 Tips;博客的筛选将更偏向于主题形式的汇总,除了近期几篇优秀文章外,本期还收录了几篇 `wakeup` 崩溃相关的文章,便于大家对这一知识有更全面的认识;资料部分收录了一个很不错的网站:swiftbysundell.com,它由 [John Sundell](https://twitter.com/johnsundell) (Publish的作者) 创建,网站包含 Swift 开发的文章、播客及新闻等内容。对 Swift 的深度使用和探索一直都是国外开发者走在前面,希望对 Swift 感兴趣的各位能在这个网站中探索更多内容。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#162-2021.06.07.md b/Reports/2021/#162-2021.06.07.md new file mode 100644 index 000000000..3d9e61c67 --- /dev/null +++ b/Reports/2021/#162-2021.06.07.md @@ -0,0 +1,158 @@ +# 老司机 iOS 周报 #162 | 2021-06-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) 提出。 + +## WWDC 2021 + +**明天,也就是 6 月 8 日凌晨 1 点,WWDC 21 正式拉开序幕,周报编辑组也将投入到 WWDC 21 的相关活动中去,所以下周周报将会停更一期,欢迎大家关注我们接下来的一系列 WWDC 专题活动!** + +### 🌟 [WWDC 21 内参作者招募 & WWDC 20 内参免费领取](https://mp.weixin.qq.com/s/_VdIsQbnnwb1MQUTpAGOyA) + +[@Parsifal](https://github.com/ParsifalC):伴随着 WWDC 即将开幕,由周报牵头举办的一年一度 WWDC 内参活动也开始了筹备工作。今年我们想尝试从广大读者中也邀请一些对 WWDC 内参编写感兴趣的人一起参与内参的编写。另外,我们**所有读者都可以免费领取** WWDC 20 的专栏。不管是想参与 WWDC 21 编辑工作,还是想免费领取 WWDC 20 内参,都可以点这里 - [我是福利](https://mp.weixin.qq.com/s/_VdIsQbnnwb1MQUTpAGOyA) + +### 🌟 [WWDC.playground by SwiftGG](https://swift.gg/wwdc/) + +[@Parsifal](https://github.com/ParsifalC):WWDC 21 将于 6 月 8 日凌晨 1 点正式在线上举行,今年国内的 iOS 社区组织了多个不同形式的活动,WWDC.playground 就是其中一项。SwiftGG 邀请了来自世界各地的设计师、产品经理以及 Swift 社区活跃开发者,站在他们各自的视角,和大家一起聊聊 WWDC21。帮助大家更好地跟上 WWDC21 的节奏,尽快把新技术集成到自己的产品中。值得一提的是,本次活动被苹果官方列入了 [Beyond WWDC](https://developer.apple.com/wwdc21/beyond-wwdc/) 的专题列表,快来关注吧~ + +### 🐎 [A Swift developer’s WWDC dreams - 2021 edition](https://www.swiftbysundell.com/articles/a-swift-developers-wwdc-dreams-2021/) + +[@四娘](https://kemchenj.github.io/):今年 SwiftBySundell 也在博客里分享了他作为 Swift 开发者的心愿单,包括: + +- SwiftUI 提供更多可以自定义的接口 +- 让所有接口都 Async/await 化 +- 可交互的 Widget +- 更加强大可靠的工具链 +- Xcode on iPad +- 使用 Swift 全栈开发 + +期望苹果今年也可以帮助所有开发者喜加一。 + +### [WWDC NOTES](https://wwdcnotes.com/) + +[@老峰](https://github.com/gesantung):WWDC NOTES 是一个持续更新 WWDC Session 的网站,包含历年新功能、新设计、新框架、新开发工具,也可以在这个网站上提交新的笔记,对 WWDC21 感兴趣的同学可以收藏此网站,接下来会同步更新 WWDC21 相关内容。 + +## 新手推荐 + +### 🐕 [Dart 里的类型系统](https://mp.weixin.qq.com/s/aBOUm6E1CXGl-GyKP94TeA) + +[@邦Ben](https://weibo.com/linwenbang):该文是翻译文,文内主要讲述了 Dart 里面的类型系统,适合新手入门的时候看看。里面也提到一些不常见用法,例如 `names.forEach(print)` 等价于 `names.forEach((name){print(name);});`;以及可调用对象 `Foo()();` 这种比较 trick 的用法,详细可以看下文章。 + +## 文章 + +### 🐕 [无埋点核心技术:iOS Hook 在字节的实践经验](https://juejin.cn/post/6968275950786215944?utm_source=gold_browser_extension#heading-0) + +[@JonyFang](https://github.com/JonyFang):常见的埋点采集方案是在响应用户行为操作的路径上进行埋点,但由于 App 通常会有比较多界面和操作路径,主动埋点的维护成本会很大。所以行业的做法是无埋点,而无埋点实现需要 AOP 编程。 + +实现方案的迭代及实践中碰到的坑: +1. 方案的迭代 + - Method Swizzle + - 代理模式 +2. 方案接入后的踩坑 + - 野指针引发的问题的分析定位及修复方案 + - RxCocoa 引发的问题的分析定位及修复方案 + +Hook 不是很优雅的方式,原因在于随着实际应用场景复杂性的变化,任何 Hook 都有可能存在兼容性的问题。文中最后也给出了相应的建议: +- 谨慎使用 Hook; +- Hook 系统接口一定要遵循一定的规范,不能假想只有你在 Hook 这个接口; +- 不要假想其他人会怎么处理,直接把多种方案集成到一起,构建多种场景,测试兼容性。 + +### 🐎 [字节小哥带你揭秘 Dart VM 魔术盒](https://juejin.cn/post/6960932663095984136) + +[@Damien](https://github.com/ZengyiMa):本篇文章是由字节移动平台团队带来的 Dart VM 文章,本文会详细介绍在 Dart VM 中的 Dart VM Isolate, Run From Source Via JIT 以及 Running from Snapshots 3个核心运行机制,文章内容层层深入带读者逐步理解其原理,对学习 Flutter 以及 Dart 底层感兴趣的同学可以好好研读一番。 + +### 🐕 [Adding Swift Code as Custom LLDB Command](https://swiftsenpai.com/testing/add-custom-lldb/) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):多数开发者工作中都会使用到 LLDB 命令,但是很多人却不知道可以使用纯 Swift 代码定义自己的 LLDB 命令。本文介绍了如何添加你的第一个 LLDB 命令、添加带参数的 LLDB 命令以及将复杂的 Swift 代码转换为 LLDB 命令。有些自定义的命令特别有用,会让我们在开发中受益。 + +### 🐎 [🐞 Insidious Bugs #3: Apple App Site Association File Identifiers](https://lickability.com/blog/insidious-bugs-number-3-apple-app-site-association-file/) + +[@Smallfly](https://github.com/iostalks):本文介绍了 Lickability 团队 App 在支持 [Associated Domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains#Overview) 能力时的踩坑经历。根据苹果文档介绍,在创建 `apple-app-site-association` 文件时,其中的 `appIds` 字段值需由 `.` 格式组成,却没有说明 Application Identifier Prefix 前缀是什么。他们经过一系列的尝试之后,在 Team Identifier 和 App Identifier 之间找到了答案。 + +> 想了解更多关于 universal link 相关的应用,建议阅读周报编辑 [@味精](https://github.com/Awhisper) 的这篇文章 - [Universal Link 前端部署采坑记](https://awhisper.github.io/2017/09/02/universallink/)。 + +### 🐢 [What's new in Swift 5.5?](https://www.hackingwithswift.com/articles/233/whats-new-in-swift-5-5) + +[@AidenRao](https://weibo.com/AidenRao):Swift 5.5 的第一个测试版本,即将在 WWDC 上放出。它将带来大量改进,async/await, actors, throwing properties 等,本文通过代码示例,逐一介绍每个改动。 + +- [async/await](https://mp.weixin.qq.com/s/ofYWD4AHm8qR65n0P2mbeA):异步函数,允许将异步代码当作线性同步代码来编写 +- actors:在并发环境中可以安全使用的类,只能由单个线程访问 actor 内的可变状态 + +### 🐎 听说你想写个 React + +* [听说你想写个 React - dom](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485430&idx=1&sn=6c7e1c1f2e54299305a314a4f79e6422&chksm=cf55883ef8220128caf3c4b07ef53d1f40ce742af40c8a2aef1f5ced37b18d1e2df6934eb80b&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - jsx](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485430&idx=2&sn=7b738f351870748af72fc7db14877082&chksm=cf55883ef8220128bc4923c1ab1c4d619bc71bcc57750ae9cc71fe56504cd04f4e3d270a8ec6&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - virtual dom](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485507&idx=1&sn=43a4f84434da7e654e8f5fccbf4d1bb2&chksm=cf55878bf8220e9db00cd7c2587c47197c3580d25fe73e4d9fcfd6c468bf4ae7ce846b9eba89&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - Component](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485599&idx=1&sn=f4665f943af6bc916b0d669e7783d2e5&chksm=cf558757f8220e4143282eb9f608e1727326ddb9b68ea0bff467ac1ed16c9e6803fc21e3d549&token=1155900023&lang=zh_CN#rd) + +[@老驴](https://www.weibo.com/6090610445):这是个手把手教你从 0 开始写一个 React 系列文章。目前包含了 4 篇,跟作者一起动手实现 dom,jsx,virtual dom,Component。相信和作者一起写一遍之后,你对 React 的理解能更深入一层。 + +### 🐢 [论证:iOS 安全性,为什么需要审核?](https://juejin.cn/post/6967199105541996575) + +[@anotheren](https://github.com/anotheren): 本文来自 Epic Games 与 Apple 诉讼中,针对 “iOS 安全性” 这个问题进行展开的辩论,即:苹果可以让 iOS 系统,在**应用分发**和**第三方访问**等方面更像 macOS,也*不会在安全性方面受到影响*。辩论中的内容,对于我们近一步了解 iOS/macOS 的安全机制十分有用,推荐阅读。 + +### 🐢 [揭秘苹果应用审核团队(史上最全版)](https://juejin.cn/post/6970363897668698148/) + +[@Parsifal](https://github.com/ParsifalC):苹果的应用审核团队一直都很神秘,这篇文章从网上可查的一些蛛丝马迹,试图揭开审核团队的神秘面纱,读读还是比较有趣的,毕竟我们长期要与审核团队打交道,多了解一些他们的事情,不是坏事儿。 + +> 本文由 [iHTCboy](https://github.com/iHTCboy) 推荐 + +### 🐎 [面试过 500+ 位候选人之后,想谈谈面试官视角的一些期待](https://mp.weixin.qq.com/s/XNv3rYRJvv4N7Xaw-c5ZsA) + +[@莲叔](http://github.com/aaaron7): 一篇不错的讲通用面试技巧的文章,内容如标题,从一个大厂面试官的角度给出了一些实用中肯的建议。大厂的面试说难也难,说不难也不难。核心原因就是虽然 bar 很高,却有一套通用的方法论。比如不管哪个公司,面试官考察的套路都差不多。这篇文章乍看上去比较虚,但仔细的一条条看下来就是把这个套路很直白的说给你听。有需要的同学可以多多研究。 + +### 🐢 [手把手教你 Debug — iOS 14 ImageIO Crash 分析](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247488918&idx=1&sn=9d3f19288191569d4cdf4a6dcef80270&chksm=e9d0de74dea75762b0b77ccd20f0f50d7b42ba9ca847490f5a22decbd950ebe79b48d8e16c8e&scene=0&xtrack=1#rd) + +[@水水](https://www.xuyanlan.com):记录了一次 iOS 14 上大量出现的 ImageIO 相关堆栈的 Crash 问题的定位、分析、反汇编、最后修复的过程。读者不仅能够参考修复类似问题,也可以学习和借鉴本文 Crash 解决的思路。 + +## 摸鱼周报 + +[@摸鱼周报 #13](https://mp.weixin.qq.com/s/qJG74OQsJ1VV1cB6fDX8TA):本期摸鱼周报讨论了一个 Swift 5 出现的 `module stability` 问题,即使用不同版本 Swift 编译器编译的 binary 如何兼容。 + +概念篇来到了**程序员必知的硬核知识大全**的最后一节,这节介绍的内容有:BIOS、汇编、虚拟机、外围中断、DMA 等。博客篇收集了一些介绍 watchdog 的文章,这些内容可以帮助你了解什么是 watchdog 以及如何定位这类问题。另外我们还收录了一个非常有意思的软件 [Whatpulse](https://whatpulse.org/),它可以为你统计你的键盘和鼠标使用情况,比如一天中你敲击了多少次按键以及各个按键的使用频率等。 + +## 工具 + +### 🐢 [XD to Flutter 2.0 现已发布!](https://mp.weixin.qq.com/s/VWSzeQb_pV9EWXqdWuu51A) + +[@极速男孩](https://github.com/ztlyyznf001): Adobe XD由 gskinner 与 Adobe 联合开发, 你可以将你的设计导出成 Flutter 代码,在 Adobe XD 2.0中,加入了 "堆栈" 和 "滚动组"的支持,可以转换成常见的 Flex Widget、Column、Row 以及 SingleChildScrollView 等Flutter Widget。 + +## 音视频 + +### [AirTag 有用,但不是完全有用](https://www.xiaoyuzhoufm.com/episode/60b419020013dcfe5cf0d581) + +[@没故事的卓同学](https://github.com/lacklock):我最近做了一个播客[卖鱼桥分桥](https://www.xiaoyuzhoufm.com/podcast/607e818b3bfd9e4d8913a87b),里面会有一些内容围绕程序员的生活方式展开,如果有感兴趣的朋友欢迎关注一下。未来也会出几期和 WWDC 有关的内容,也安排一些针对开发者的采访。欢迎大家订阅。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 微医云招聘高级 iOS 开发工程师,详细内容可参考 - [[杭州萧山] 微医 - 微医云 - 高级 iOS/Android 开发工程师](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&tempkey=MTExNl9Ga1hZTnRZL0orT0l3akY5TzhMWHk1MXNCeGQwX3pkRlB2QWFxQW1kTDJlOFRfU05NUWU5VTJ2dG1tcmRVRUUwa1E3RHRxRlNIb0tRamVzUmJ0b3JMc2ZuU1VXNWF5UF9zWGllemhBd1pzZWpFak9VQWU3dDdXMzlCeTVKYnZrb2Y1Z3RTZEcxYVpSSWtKck5ucHRsSFhaUjZTM29BYmN5d3EzWlZRfn4%3D&chksm=6aa2840b5dd50d1d947adf708480766b26d5729c6c39a24cb2cbf463af109980d5c0a37ddde3#rd),有意者简历投至邮箱:zhangmw1@wedoctor.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#163-2021.06.21.md b/Reports/2021/#163-2021.06.21.md new file mode 100644 index 000000000..9a6801d9f --- /dev/null +++ b/Reports/2021/#163-2021.06.21.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #163 | 2021-06-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) 提出。 + +**周报编辑组又迎来了一位新人 - [@Smallfly](https://github.com/iostalks),他是来自网易云音乐的开发者,对 Native 和跨端技术栈均有涉猎,希望未来能一起给大家持续输出高质量内容~** + +## WWDC 21 + +[@Parisfal](https://github.com/ParsifalC):WWDC 21 圆满结束,但关于 WWDC 21 的学习才真正开始~苹果官方汇总了[新技术和已有框架的重点变化](https://developer.apple.com/documentation/New-Technologies-WWDC-2021),本周我们针对部分内容更新了 6 篇 WWDC 21 Session 的深度解读,每篇文章都是经过不断推敲和审核才完成。 + +### [【WWDC21 10114】 初见 StoreKit 2](https://xiaozhuanlan.com/topic/6138790425) + +[@黄骋志](https://github.com/ChengzhiHuang): 开发过 In-App Purchase 的同学应该都应该体会过被它 生涩难懂的 API、不合理的数据结构、难以处理的掉单 等问题支配过的恐惧。WWDC21 针对 StoreKit 做了一次全新的升级,同时得益于 Swift 的新特性,进一步简化了 API 调用,并带来了诸多新特性,阅读本文后相信你会惊艳于这次的升级。 + +### [【WWDC21 10101】使用 ReplayKit 记录你的高光时刻](https://xiaozhuanlan.com/topic/1068759324) + +[@七夜](https://github.com/qiyer): 主要介绍了 Apple 为 ReplayKit 新增了一个新的特色功能 Clips Recording,用于记录用户应用或游戏内不超过 15 秒长的精彩瞬间。 + +### [【WWDC21 10158】使用 VideoToolbox 探索低延迟视频编码](https://xiaozhuanlan.com/topic/2530964187) + +[@bqlin](https://github.com/bqlin): 讲述通过 VideoToolbox 最新功能实现低延迟 H.264 硬件编码,最大限度地减少端到端的延迟,并提高性能,实现最佳的实时通信和高质量的视频播放。 + +### [【WWDC21 10019】在 SwiftUI 中遇见并发编程](https://xiaozhuanlan.com/topic/2957164803) + +[@Edmond](https://github.com/looseyi): 众所周知,在计算机领域并发是很棘手的一个难题,现在您拥有了管理应用程序中这种复杂性的工具。我们希望您喜欢并了解 Swift 5.5 和 SwiftUI 中出色的新并发工具,我们期待看到您使用它们解决应用程序中棘手问题。 + +### [【WWDC21 10134】 探索 Swift 结构化并发](https://xiaozhuanlan.com/topic/3625784190) + +[@SZ](https://github.com/imagiczhang): Swift 5.5 创新性地引入了结构化并发的概念。同时,也革命性地引入了不同风格的任务、任务树的自动管理机制以及编译时的数据安全检查,极大地降低了并发程序编写难度。尽管最终正式版还是存在更改部分 API 的可能,我们仍然推荐大家先学习并熟悉一下编写 Swift 程序的新方法。 + +### [【WWDC21 10017】为 Swift 和 SwiftUI 带来 Core Data 并发](https://xiaozhuanlan.com/topic/4625791038) + +[@SZ](https://github.com/imagiczhang): 今年 Core Data 上带来了大量的功能增强,其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验,简化了异步数据操作的程序,因此我们推荐大家学习并逐渐开始使用这些新的 API。 + + +## 新闻 + +### 🌟 WWDC. 技术沙龙 - 北京地区专场圆满结束 + +[@Parsifal](https://github.com/ParsifalC):由 SwiftGG 和快手联合主办的 WWDC. 技术沙龙 - 北京专场于本周六在快手总部顺利举办,分享活动吸引了近 200 开发者朋友一起前来学习。本次分享的后续总结工作正在紧锣密鼓地进行中,同时由我们周报主办的杭州场和上海场技术沙龙也将陆续开放报名,欢迎各位同行好友来聚聚。本次活动我们不收取任何费用,除了嘉宾带来的主题分享外,现场更有主办方为每一位到场朋友悉心准备的伴手礼和茶歇,同时周报也将在现场免费赠送 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) 哦。 + +## 文章 + +### 🌟 🐕 [Concurrency in Swift 5 and 6](https://forums.swift.org/t/concurrency-in-swift-5-and-6/49337) + +[@anotheren](https://github.com/anotheren):来 Swift 官方社区的帖子,介绍了 Swift 并发控制在 Swift 5 和 6 中的展望。Apple 需要考虑将 Swift 生态系统迁移到 Swift 6 会是什么样子,并预计这个过程需要数年时间。在此过程中,Apple 需要确保: + +- Swift 5.x 和 Swift 6 代码可以在并发模型的演进中,良好地相互操作 +- 逐步采用并发模型可以使代码更好维护,也更安全 +- 每个模块、包和程序都可以以自己的速度采用并发控制,而不会不必要地破坏原来的代码 + +总的来说,Swift 5 中会更加宽松,以能够使并发控制逐步推广开,完成平稳过渡。而 Swift 6 会在需要的情况下要求异步执行的闭包满足 @Sendable (详见 [SE-0302 Sendable and @Sendable closures](https://github.com/apple/swift-evolution/blob/main/proposals/0302-concurrent-value-and-concurrent-closures.md))。 + +### 🌟 🐕 [Xcode 工程文件解析](https://mp.weixin.qq.com/s/s5BQznKjSCt84ZLUlco7Vg) + +[@老峰](https://github.com/gesantung):从我们接触 iOS 开发就与 Xcode 工程配置文件 xcodeproj 打交道,本文作者详细介绍了 xcodeproj 文件结构,以及如何 xcodeproj 开源库 解析并修改 xcodeproj 文件,文章主要包含一下内容: + +- Xcode 工程文件组成:xcworkspace、xcodeproj +- Project 解析、Object Module、Object Attributes、Xcode Object等 +- 通过代码编辑 Xcode 工程 + +### 🐕 [iOS 14.5 如何用 PAC 保护 Objective-C 对象](https://mp.weixin.qq.com/s/VsqnWo6HGQT5LXdulpcaGg) + +[@AidenRao](https://weibo.com/AidenRao):一篇非常硬核的文章,本文介绍了 iOS 14.5 针对 Objective-C 运行时进一步加强 PAC 保护的两处改动。这些保护仅针对系统自带应用和服务启用,目的是防止跨进程和远程代码执行的漏洞利用。 + +### 🐕 [Flutter IM 跨端架构设计和实现](https://mp.weixin.qq.com/s/ftZdQ-0GeMgr6kL9bZLA8w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):一个非常好的跨端 IM 设计方案,从痛点分析到实施方案,到 DB 同步设计,以及状态管理,应有尽有。有相关业务小伙伴值得仔细阅读,文中很多解决方案可以带来不少参考. + +### 🐕 [从探索到实践,iOS 动态库懒加载实录](https://mp.weixin.qq.com/s/g5FKnOcW6KonqBSW8XO9Jw) + +[@红纸](https://github.com/nianran):本文是 58 同城对于 APP 模块动态化的实践总结,对方案定制、实现流程、方案结果对比、量化收益等多个方向进行描述。由于动态库的吸附性,团队整理完依赖树,选用自下而上的方式,将模块逐一动态库。并使用懒加载的形式加载动态库,而非启动加载,降低了启动耗时。 + +### 🐕 [WWDC21 Ultimate application performance survival guide](https://gcsnnb.github.io/2021/06/09/APP%E6%80%A7%E8%83%BD%E7%BB%88%E6%9E%81%E7%94%9F%E5%AD%98%E6%8C%87%E5%8D%97/) + +[@Leo](https://github.com/leomobiledeveloper):性能是客户端永远绕不开的话题, 所以 WWDC 每年都会有很多 session 是关于性能的。这个 session 更像是一篇概述,讲解了苹果提供的性能相关监控、工具和诊断,推荐对性能感兴趣的同学阅读。 + +* 推荐人:[GCSNNB](https://github.com/GCSNNB) + +### 🐕 [Code Signing - iOS 代码段的校验机制分析](https://mp.weixin.qq.com/s/msUwo3YUcfHXkuAp5wRfyQ) + +[@Smallfly](https://github.com/iostalks):从 iOS JIT 遇到 Crash 的神仙打架,到 iOS 代码段的校验机制。本文作者高级页面仔,从内核源码着手,详细地分析了 iOS 代码段合法性校验的时机和过程。最终给出了 Crash 的原因,并介绍了连接调试器和越狱环境下 JIT 不会 Crash 的实现原理。 + +### 🐕 [听说你想写个 Lisp 解释器](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485878&idx=1&sn=3f1b37ad693bfd2f0da24aab2616aafe&chksm=cf55867ef8220f68719be7f9666675eff677b7922d27155a079f6b15181cfa65c699cfd7e7a8&token=273579944&lang=zh_CN#rd) + +[@折腾范儿_唯敬](https://weibo.com/agvicking):我们使用的编程语言,我们写下的代码,本质上就是一行又一行的字符串,而这些字符串到底是如何工作的,这本是属于编译原理范畴。很多书或者有些文章也会介绍到“词法分析/AST/解释执行”之类的高大上的概念,稍微有些抽象也有些晦涩。但是本文作者 [silan-liu](https://github.com/silan-liu) 从一个最基础最简单的 Lisp 语言入手,从 0 开始用 swift 写了一个解释器,在这个过程中你可以看到从分词到解析,再到生成 AST 的全部代码过程,亲自感受一遍代码被理解被执行的过程,相信会比书本上抽象的概念更容易吸收和理解。注:本文是该文章的第一篇,写到了生成抽象语法树 AST,而 AST 的执行运算出最终的结果,还请继续期待作者的下一篇文章。 + +## 摸鱼周报 + +[@摸鱼周报 #14](https://mp.weixin.qq.com/s/br4DUrrtj9-VF-VXnTIcZw):本期我们整理了一些包体优化的方案,从资源到代码层面,涉及的 Tips 很多,为了便于观看和记忆,我们将其制作成一张思维导图。开发者账号的续费问题最近有好几个小伙伴都有遇到,我们将其中的注意事项做了一个整理。 + +概念篇开始整理一些 Web 前端知识,介绍了 React、Vue、React Native 这几个概念,还附带了一些代码片段,实际学习之前可以给大家带来一个初体验。 + +资料内容收录了一个 Github 仓库 [Newbie Security List](https://github.com/findneo/Newbie-Security-List),其中整理了网络安全相关的博客、工具、电子书籍资料、在线知识库、在线漏洞库等内容。 + +[@摸鱼周报 #15](https://mp.weixin.qq.com/s/6thW_YKforUy_EMkX0OVxA):本期介绍了几个去掉导航栏返回按钮文案的实现方案;还有个系统自带的命令行工具 `plutil`,通常我们将其用于打包脚本设置版本号,但它还可以用来检查多语言文件的格式问题。处理繁杂且巨大的多语言文件,自动化工具永远是最佳助手。 + +概念篇 Web 前端知识第二弹:BootStrap、Webpack、Flutter。 + +博客篇整理了一些逆向和签名相关文章,虽然不是新文章,但篇篇都是精品,值得反复阅读。 + +资料内容收录了一个国外的网站:[SwiftLee](https://www.avanderlee.com/),一个分享关于 Swift、iOS 和 Xcode 技巧和窍门的周更博客,博客的文章写得清晰易懂,排版、配图和动画质量也很高。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#164-2021.06.28.md b/Reports/2021/#164-2021.06.28.md new file mode 100644 index 000000000..4fd8e573e --- /dev/null +++ b/Reports/2021/#164-2021.06.28.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #164 | 2021-06-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) 提出。 + +## WWDC 21 + +[@Parisfal](https://github.com/ParsifalC):WWDC 21 圆满结束,但关于 WWDC 21 的学习才真正开始~苹果官方汇总了[新技术和已有框架的重点变化](https://developer.apple.com/documentation/New-Technologies-WWDC-2021),本周我们针对部分内容更新了 2 篇 WWDC 21 Session 的深度解读,每篇文章都是经过不断推敲和审核才完成。 + +### [【WWDC21 10022】SwiftUI 技术内幕](https://xiaozhuanlan.com/topic/0619782354) + +[@MetaSky](https://github.com/CreatorMetaSky):通过阅读本文,带你一起深入解读 SwiftUI,提高应用程序的性能。 + +### [【WWDC21 10267/10268/10269】窥探 Xcode Cloud](https://xiaozhuanlan.com/topic/7496513820) + +[@林永坚](https://github.com/JakeLin):CI 已经成为项目开发中必不可少的一个工程环节,同时也是推动团队工程师文化的重要手段。在 WWDC 21, 苹果公司发布了官方的 CI - Xcode Cloud。通过这篇文章,我们一起窥探一下 Xcode Cloud 到底能做什么,以及我们该如何使用它? + +## 新闻 + +### [苹果 Apple Watch 国行获国家药品监督管理局医疗器械审批!ECG 移动心电图房颤提示软件过审](https://mp.weixin.qq.com/s/NNHRz-43YCZGo4M54uA6-g) + +[@Parisfal](https://github.com/ParsifalC):终于!大陆也将支持 ECG 功能了!喜大普奔!政策上已经支持,现在就看苹果什么时候开放了。 + +## 文章 + +### 🌟 🐕 [美团民宿跨端复用框架设计与实践](https://mp.weixin.qq.com/s/902BiSBx88rUSWBX64HZqA) + +[@JonyFang](https://github.com/JonyFang):从业务角度出发,跨端技术演进更多是在不同阶段、不同时间段内业务效率上的选择,美团民宿业务在大前端融合的浪潮中也在不断探索和迭代抉择,为解决业务痛点而产出跨端框架技术。本文主要分享美团民宿在跨端复用技术探索层面以及业务实践过程中积累的经验。文章目录如下: +1. 背景 + - 美团民宿业务介绍 + - 美团民宿移动端现状 +2. 美团民宿跨端复用框架设计 + - 行业现状 + - 整体方案设计 +3. 美团民宿跨端复用实践 + - 跨端复用场景下的问题 + - 跨端复用应用架构 + - 跨端复用方式设计 + - 跨端复用流程规范 + - 跨端复用质量保障 + - 成果 + +### 🌟 🐢 [Swift 编译器 Crash—Segmentation fault 解决方案](https://mp.weixin.qq.com/s/FSlJKnC0y51nsLDp1B3tXg) + +[@zvving](https://github.com/zvving):Swift 在国内普及缓慢,自身工具链不完善是重要制约因素之一:比如不少混编项目都碰到过偶现的 `Segmentation fault: 11` 和 `Illegal instruction: 4` 编译错误,开发者对这类编译器错误大多束手无策,只能寄望于『重试一下』以及 Xcode 后续更新解决。 + +抖音基础技术团队深入编译链路定位问题:从编译基础概念,到提取编译参数、调试 SIL 异常定位问题,进而引入静态检查规避。内容表达上层层递进,对编译器产生的 Crash 如何调试解决提供了思路,为『面向编译器编程』提供难得一见的参考! + +### 🌟 🐢 [抖音研发效能建设 - CocoaPods 优化实践](https://mp.weixin.qq.com/s/Pt6pcxKCHhdnnWPYrToNvA) + +[@红纸](https://github.com/nianran):Cocoapods 是 iOS 常用的包管理工具之一,当我们工程日渐庞大,在成百上千个组件之后,pod install 的执行效率有明显的降低。本文是抖音在实践中对于 Cocoapods 的原理分析和数点优化总结。 + +这边不占用篇幅,简单描述其中几点优化,详细优化方案可以查看原文进行阅读: +1. 性能评估:利用 Ruby-perf 方法级别统计系统耗时,为量化数据指标奠定基础 +2. Source 源按需更新:解决研发同学忘记更新 source 源的烦恼 +3. 简化决议:研发流程直接使用 Podfile.lock 进行线性决议,Molinillo 的图决议占少数比例 +4. 并发下载:并发下载依赖,使用 HTTP 代替 Git 访问 +5. 沙盒软连接:使用软链接代替拷贝,减少磁盘消耗 + +### 🐕 [Tagged Pointer对象安全气垫为何会失效](https://juejin.cn/post/6975765788355461133#heading-9) +[@Smallfly](https://github.com/iostalks):Objective-C 作为一门动态语言,在运行时做安全防护非常有必要。本文记录了作者加了安全防护后,依然发生了 `Unrecognized Selector` 类型崩溃的定位过程。为什么 Tagged Pointer 类型的对象,安全防护失效了?作者从原理出发,通过分析 Tagged Pointer 在不同系统的内存结构,最终修复了这个问题。推荐对 Tagged Pointer 实现原理感兴趣的同学阅读。 + +### 🐕 [Swift Hook新思路--虚函数表](https://mp.weixin.qq.com/s/mjwOVdPZUlEMgLUNdT6o9g) + +[@四娘](https://kemchenj.github.io):这是由 58 团队带来的文章,深入分析 Swift 的类结构以及基于 vtable 的函数调用过程,并且提出了通过修改 vtable 实现 method swizzle 的方法。 + +### 🐎 [SSWG Annual Update 2020](https://forums.swift.org/t/sswg-annual-update-2020/49223) + +[@xiaofei86](https://github.com/xiaofei86):自从上次 Swift 服务端工作组(SSWG: Swift server work group)进行重大更新以来,发生了很多事情。本文对 SSWG 过去一年的工作成果进行回顾,包括 gRPC、MongoDB、AWS Lambda 的引入;对明年的目标进行展望,包括 Concurrency 的接入、文档和工具的改进,以便对非苹果平台的开发提供更好的支持。感兴趣的同学可以持续关注。 + +## 代码 + +### [Surge](https://github.com/Jounce/Surge) + +[@老峰](https://github.com/gesantung):[Accelerate](https://developer.apple.com/documentation/accelerate) 框架为 iOS 提供了大规模的数学和图像高性能计算能力, 但其 API 却不易使用, Surge 正是这样一个 Swift 库,它使用 Accelerate 框架为矩阵数学、数字信号处理和图像处理提供简单易用的高性能 API,如常用的 + ,- , * ,/ ,有需求的同学可以了解一下。 + +## 音视频 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#165-2021.07.05.md b/Reports/2021/#165-2021.07.05.md new file mode 100644 index 000000000..4fb1bb3cb --- /dev/null +++ b/Reports/2021/#165-2021.07.05.md @@ -0,0 +1,146 @@ +# 老司机 iOS 周报 #165 | 2021-07-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) 提出。 + +## WWDC 21 + +### 🌟 线下沙龙:杭州场圆满结束!上海场迎来第二波免费门票开放~ + +[@Parisfal](https://github.com/ParsifalC):WWDC 系列活动 - 淘系技术.T 沙龙杭州专场在上周六下午已经圆满结束了!杭州专场同样邀请到了 4 位国内讲师以及 2 位特邀国外讲师。他们分别是来自手淘终端平台技术的无线开发专家**倾寒**、来自有赞的移动技术负责人 **Jackie**、来自抖音创作工具基础架构团队的移动端架构师 **Crespo** 以及来自西瓜视频的移动端工程师**黄骋志**,国外的特邀嘉宾还是我们熟悉的 Hacking With Swift 系列书籍作者 **Paul Hudson** 和 objc 联合创始人 **Chris Eidhof**。沙龙现场近 160 位开发者朋友相聚一堂,技术探讨氛围十分浓烈。 + +错过杭州场的朋友不用着急,**上海场我们也将在这周六正式举办**!上海场之前在我们 **WWDC.playground by SwiftGG** 直播活动中开放了第一批超过 100 张门票,很快就售罄了,现在**第二波门票也正式开放**,数量有限,想来现场的朋友抓紧扫码报名~ + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parisfal](https://github.com/ParsifalC):除了线下沙龙在火热进行,我们内参的更新也如火如荼。已经订阅的读者有福啦,本周我们一次性更新了 29 篇 session 的解读,每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。 + +- @Style月月:【WWDC21 10032】探索 WKWebView 新增功能 +- @琦乐无穷的小蘑菇:【WWDC21 10089】探索电子病历在 HealthKit 中的使用 +- @Leppard:【WWDC21 10145】Advanced Video Quality Tool 使用指北 +- @Rec:【WWDC21 10256】初探 Swift 算法和集合 & 【WWDC 10168】开发 Mail App 扩展 +- @Watermelon:【WWDC21 10268/10269】探索 Xcode Cloud Workflows +- @Ronbin:【WWDC21 10298】在 HomeKit 中添加对 Matter 协议的支持 +- @阿尘:【WWDC21 10039】Create ML 新妙用:手势分类和手部动作分类 &【WWDC21 10040】使用 Vision 框架来检测人物、人脸和姿势 +- @atuo:【WWDC21 10057】让你的 iPad 应用更进一步 +- @ljcoder:【WWDC21 10118】CloudKit 自动化开发 +- @Ckitakishi:【WWDC21 10121】为内容丰富的应用量身打造高效 VoiceOver 体验 +- @Frank:【WWDC21 10212】强大的 Network Instruments,诊断你的 APP 网络请求及流量控管 +- @希徳:【WWDC21 10264】让你的 App 支持快速备忘录 +- @Damien:【WWDC21 10061】Meet TextKit 2 +- @Tamarous:【WWDC21 10063】更好用的 Sheet +- @鸭嘴兽:【WWDC21 10085】聚焦苹果隐私原则 +- @刘杰:【WWDC 2021 10096】 苹果为了你的隐私又做了什么 +- @happts:【WWDC21 10098】在 Spotlight 中呈现 App 的数据 +- @志远:【WWDC21 10115】依托更完善的 App 分析指标,优化 App 展示页面的新方案 +- @DengXiaoBai:【WWDC21 10158】使用 VideoToolbox 探索低延时视频编码 +- @旷明:【WWDC21 10166/10167/10235/10236】DocC: 未曾设想的苹果文档 +- @张凡:【WWDC21 10203】Xcode Organizer 功能升级 +- @Semyon:【WWDC21 10204/10261/10170】云签与 Mac App 分发流程简化探索 +- @PerTerbin:【WWDC21 10209】通过断点技巧让调试更高效 +- @jojotov:【WWDC21 10254】Swift 并发编程:原理探究 +- @小铁匠Linus:【WWDC21 10259】键盘布局指南 +- @Uyloal:【WWDC21 10023/10260】构建使用键盘导航的应用程序 +- @瓮杰:【WWDC21 10265】将你的应用沉浸在空间音频中 + +## 文章 + +### 🌟 🐕 [在 iOS 客户端上通过 bitcode 为第三方库修复 bug](https://mp.weixin.qq.com/s/BuDnfl1ZbUtiZBhy8_Z7wA) + +[@JonyFang](https://github.com/JonyFang):本文主要记录了便利蜂技术团队 iOS 移动端遇到的一个疑难 bug 的排查过程,介绍了他们是如何通过修改 bitcode,成功在没有源码的情况下为有问题的三方库修复 bug 的。 + +文中用到的知识点总结如下: +1. 崩溃现场中,在主线程发现 `exit`,多半是由于 C++ 全局变量析构 + 多线程导致的; +2. 在有源码的情况下,可以通过调整编译参数消除全局变量析构; +3. 使用 7-zip 可以无损解包静态库文件; +4. 使用 otool 可以看到目标文件是否嵌入了 bitcode; +5. 使用 llvm 提供的工具,可以对 bitcode 进行修改、重新生成机器码; +6. 通过私有 API 可以模拟出应用退出,制造复现场景。 + +### 🌟 🐕 [iOS Pod 构建缓存方案](https://mp.weixin.qq.com/s/zWhgpuhq3r799ZYQPMsdFw) + +[@红纸](https://github.com/nianran):编译加速通常有两种方案二进制化和源码编译缓存,相较于二进制化,源码编译能解决二进制化带来的问题:编译宏问题、函数不存在等一系列问题。文中,作者使用基于 MD5 和 Xcode Cache 来做缓存机制,使得每次编译都是增量编译而不是全量编译。感兴趣的同学可以看下作者的方案描述。 + +此外本文是基于 Xcode Cache 实现的编译缓存机制,在即将到来的《老司机技术沙龙-上海场》中,第二场来自 Bilibili 的同学会介绍基于 Bazel 的远端编译缓存技术实践,也欢迎大家来现场聆听~ + +> 自荐: [WeijunDeng](https://github.com/WeijunDeng) + +### 🐢 [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ) + +[@享耳先森](https://github.com/iblacksun):移动互联网时代,网页依旧是内容展示的重要媒介,开发者经常需要与 `WKWebView` 打交道,但当遇到疑难问题时官方文档不足以解惑。本系列文章介绍了如果从 WebKit 源码入手,建立可调试工程,基于此深入理解 WebKit 核心内容。 + +### 🐢 [Swift 并发初步](https://onevcat.com/2021/07/swift-concurrency/) + +[@zvving](https://github.com/zvving):今年 Swift 的最大更新无疑是对 `async/await` 的支持,作为新手的你很可能已经跃跃欲试。但并发编程向来以错综复杂著称,光是并发/并行、同步/异步、串行/并行就已经让人傻傻分不清,更不必提 `Actor`、`Structured Concurrency`、`Async Sequence` 这些翻译起来都困难的概念。如果你也有以上这些疑惑,或许可以从本文中找到答案。这篇图文并茂的博客同时也是喵神新书[《Swift 异步和并发》](https://objccn.io/products/async-swift)的开篇之作。 + +> 本文推荐语来自 [弥明-KeithBird](https://github.com/KeithBird) + +### 🐎 [How Swift runs an async executable](https://oleb.net/2021/async-program-launch-sequence/) + +[@kemchenj](https://kemchenj.github.io):Swift 5.5 最大的更新就是加入了 Concurrency,@main 也添加了对应的支持,让我们可以将 main 函数标记为 async,由编译器负责生成代码,提供一个 async context 让 async main 函数执行,这篇文章就深入了 Swift 源码来探究其中的奥秘。 + +## 摸鱼周报 + +[@摸鱼周报 #16](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w):iOS 摸鱼周报不知不觉已经发布到第 16 期了,为了了解大家对周报的想法和建议,前段时间我们做了一次问卷调查。根据问卷反馈,我们停更一期进行了格式上的调整:去掉了`那些 Bug`、`编程概念`模块,增加了`本期话题`和`面试解析`。 + +改版之后内容更讲究实用性,特别是呼声很高的`面试解析`模块,我们对众多面试题目进行筛选,选出一些高频且实用的内容,然后用更通俗易懂的话讲明白其中的知识点,首期`面试解析`带来的是网络相关的一些题目。 + +其他更多内容欢迎阅读本期[完整版](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w)进行探索,如果有其他建议也欢迎后台留言告诉我们。 + +## 代码 + +### [世界上第一个浏览器源码](https://github.com/cynthia/WorldWideWeb) + +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):这个 repo 其实算得上是一个考古 repo 。维基百科上记载,世界上第一个浏览器是在 NextStep 的电脑上(repo 的 readme 上有索引),用 C 和 Objective-C 语言完成的,被 repo 作者从原始 WorldWideWeb 的仓库中剥离,保存于此。虽然这个项目中的代码过于老旧,已经无法编译,但有兴趣的人还是可以前往一探究竟,看看上古时代的浏览器代码大概是什么样子。 + +### [VideoLab - 高性能且灵活的 iOS 视频剪辑与特效框架](https://mp.weixin.qq.com/s/duLk1mNLdcqRlfzpnh2LEA) + +[@anotheren](https://github.com/anotheren):这是一个为视频剪辑编辑处理的框架,使用了 AVFoundation 和 Metal 作为其处理核心,目前已有以下特性: +* 高性能实时剪辑与导出 +* 高自由度组合视频,图片,音频 +* 支持音频音高设置,音量调节 +* 支持 CALayer 矢量动画,可以支持复杂的文字动画 +* 支持关键帧动画 +* 支持类似于 AE 的预合成 +* 支持转场 +* 支持自定义各类特效,如 LUT 滤镜,Zoom Blur 等等(MSL 编写脚本) + +如果你也有视频处理的相关需求,不妨看看能否满足项目需要。 + +## 音视频 + +### 🐢 [“Structured concurrency” with special guest Doug Gregor](https://www.swiftbysundell.com/podcast/99/) + +[@老驴](https://www.weibo.com/6090610445):这期 Swift By Sundell 节目请到了 Swift 开发组的成员之一 Doug Gregor 来聊聊 Swift Concurrency 和背后的故事。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#166-2021.07.12.md b/Reports/2021/#166-2021.07.12.md new file mode 100644 index 000000000..bef732ddc --- /dev/null +++ b/Reports/2021/#166-2021.07.12.md @@ -0,0 +1,181 @@ +# 老司机 iOS 周报 #166 | 2021-07-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) 提出。 + +**周报编辑阵容继续升级,本周我们迎来了 [@Barney](https://github.com/BarnyZhao) 加入团队,Barney 目前就职于 Bilibili,熟悉移动架构治理,启动优化,复杂列表流畅度优化,稳定性等方向。** + +## WWDC 21 + +### 🌟 线下沙龙:上海场和深圳场也成功举办~ + +[@Parisfal](https://github.com/ParsifalC):WWDC 系列活动 - WWDC.T 沙龙上海场和深圳场已经在这个周末圆满结束了,感谢上海场的联合主办方字节音乐以及深圳场的联合主办货拉拉技术团队!至此,今年我们与 SwiftGG 一起举办的四场沙龙活动均已拉上帷幕,每场活动都有 4 个不同的讲师分享自己对于移动技术开发的干货见解,在社区内外都引发了很大的反响。针对大家比较关注的几个问题,我们这边做下统一回复: + +> 活动的录像和 PPT 等内容是否会放出? + +活动刚结束,我们所有的收尾工作都在有序进行中,计划在本月下旬会陆续将沙龙的相关资料在**老司机技术周报**公众号上发布,大家敬请期待~ + +> 以后还会不会有类似的活动? + +线下沙龙是今年尝试的一种方式,目前得到很多正反馈,我们也从几个城市的举办中汲取了很多经验,未来如果可行的话我们还是会继续尝试的。这次得到 SwiftGG、快手、淘系技术、字节音乐和货拉拉技术等团队的支持,我们也为到场的每一位朋友都准备了精美的礼品和茶歇,同时每个讲师嘉宾的无偿倾力相助也让我们非常感激。但毕竟我们是纯公益的活动,每场沙龙都是免费门票,沙龙投入的人力物力仍然是比较大的。短期内暂时没有在计划中的沙龙活动了,我们需要好好总结,也需要休息一下。当然,一旦有了新的计划,我们也会第一时间告诉大家,感谢大家一直以来的支持。 + +> 我所在的技术团队也想合作举办一场这样的沙龙活动? + +首先感谢你的关注与认可,不过正如上个问题所述的那样,我们短期是没有计划了。如果你确实感兴趣的话,可以添加我们的周报微信 **iTDriverr** 做个简单沟通,后续我们有计划了可以再详谈。 + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parisfal](https://github.com/ParsifalC):线下活动圆满结束,我们内参的更新也已经进入高潮。已经订阅的读者有福啦,本周我们一次性更新了 32 篇 session 的解读,总的更新文章数已达 69 篇!每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。如果你喜欢的话,记得给作者点个赞~ + +- [【WWDC21 10183/10184】初探 Group Activities ](https://xiaozhuanlan.com/topic/0593748621) +- [【WWDC21 10225】使用 Group Activity 共享媒体](https://xiaozhuanlan.com/topic/2560189374) +- [【WWDC21 10187】使用 Group Activity 共享定制化内容](https://xiaozhuanlan.com/topic/6205739184) +- [【WWDC21 10189】使用 Group Activity 在 Safari 中共享媒体](https://xiaozhuanlan.com/topic/7165042893) + +@Darwin-lv & @刘思源:刚刚结束的 WWDC 2021,苹果给 Facetime 带来了新功能 SharePlay。使用苹果设备的用户,无论是 iOS、iPadOS 还是 MacOS,都可以通过 FaceTime 开启 SharePlay,和其他苹果用户,无论他使用什么类型的苹果设备,都可以实时的共享内容。 + +- [【WWDC21 10132/10133/10134】认识 Swift 中的异步与并发](https://xiaozhuanlan.com/topic/8627905413) + +@nuomi1:Swift 5.5 带来了万众期待的异步与并发的原生语言级支持,async/await 简化了异步编程,结构化并发为异步任务提供并发性,而 actor 则解决了共享可变状态带来的数据一致性问题。 + +- [【WWDC21 10258】理解和消除 App 中的卡死](https://xiaozhuanlan.com/topic/9027453618) +- [【WWDC21 10211】iOS 符号化:基础与进阶](https://xiaozhuanlan.com/topic/8652104379) +- [【WWC21 10216】Swift 中的 ARC 机制: 从基础到进阶](https://xiaozhuanlan.com/topic/1569740283) +- [【WWDC21 10180】检测和诊断 App 内存问题](https://xiaozhuanlan.com/topic/2079653148) + +@Rickey 王小吉 & @米广 & @刘夏 & @薛云强:WWDC 2021 继续在 App 性能上带来了很多 session,这几篇文章能够帮你深度理解性能问题的源头。 + +受限于周报篇幅,其他文章也同样精彩,但不便详述,欢迎大家自行订阅阅读~ + +- @saitjr:【WWDC21 10232/10283】Shortcuts 的新功能 +- @lmh:【WWDC21 10239】为你的 App 减少网络延迟 +- @牟爽:【WWDC21 10146】AVFoundation 的新变化 & 【WWDC21 10290】AVKit 的新变化 +- @展菲:【WWDC21 10092】了解并使用 Wallet 和 Apple Pay +- @师大小海腾:【WWDC21 10052】Mac Catalyst 的新功能 +- @Jimbaby:【WWDC21 10079】使用 PHASE 探索几何感知的音频 +- @大灰灰:【WWDC21 10048】构建优雅小组件的准则 +- @Kam:【WWDC21 10252】打造拥有流畅体验的列表和集合视图 +- @DylanYang:【WWDC21 10291/10294/10295】MusicKit 概述 +- @Hummer:【WWDC21 10033】基于隐私保护的广告归因 +- @East:【WWDC21 10041】使用 Vision 提取文档里的数据 +- @郑一一:【WWDC21 10102】遇见 Location Button +- @刘杰:【WWDC21 10123】初见 Screen Time API +- @kukushi:【WWDC21 10045】用 ShazamKit 创造自定义音频体验 +- @Chars:【WWDC21 10003】再谈 Apple Watch 的数据传输 +- @素燕(Lefex):【WWDC21 10104】在 iOS 中给 Safari 开发插件 +- @Chafferer:【WWDC21 10205】在 Xcode 中 Review Code 以及多人合作 +- @夏天:【WWDC21 10068/10069/10282】从 0 开始构建用户健康的研究和护理 APP +- @Nemo:【WWDC21 10160】ProRAW 的拍摄与处理 +- @wiilen:【WWDC21 10181】APP 性能优化终极求生指南 +- @SeaHub:【WWDC21 10175】IAP 用户退款与客诉处理优化 & 【WWDC21 10174】 IAP 后台通信优化与实践 + +## 文章 + +### 🌟 🐕 [Klee:用 C++ 实现数据驱动开发](https://mp.weixin.qq.com/s/y2700SOPIvETJ-x2BC5q5w) + +[@Barney](https://github.com/BarnyZhao):本文主要介绍了企业微信客户端团队对 C++ 实现数据驱动开发的探索,为读者介绍了暂时内部开源的 Klee 框架,,通过几个简单易懂的小例子,一步步讲述了 Klee 的强大特性, 并且未来有开源的打算,十分令人期待。 + +文中的关键点总结如下: +1. 数据驱动的核心思想,程序的状态由数据确定,通过接口操作数据来控制程序逻辑。 +2. 通过企业微信消息泡的例子,表达了 响应式数据的优雅。 +3. `Klee` 的声明式开发能力,组件化开发,混合开发。 +4. `Klee` 三大组件生态, 布局组件、视图组件、逻辑组件,并且可组合嵌套为复合组件。 +5. `Klee` 与 `RxSwift` 的对比,从数据源、流程可控性、多输入源、生命周期管理四个维度阐述了 Klee 的优势。 +6. 对未来的展望,代码开源、跨平台能力、可视化界面搭建。 + +### 🐕 [听说你想写个 Lisp 解释器(下篇)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486230&idx=1&sn=b11b86685064968edd023851c47a981a&chksm=cf5584def8220dc83ff16b3c2216f555d481735b51c2687c433243953b1515b4cf1a7ab1c806&token=232571047&lang=zh_CN#rd) + +[@折腾范儿_唯敬](https://weibo.com/agvicking):在之前的周报中,我们介绍了“听说你想写个 Lisp 解释器(上篇)”,作者[silan-liu](https://github.com/silan-liu) 带着我们从0深入到了一个语言编译解析的过程,学习了从分词到解析,再到生成 AST 的过程。这次给大家带来了下篇,本文作者继续从 AST 入手,分析运算符,分析表达式,分析方法调用,最终给我们讲解了一个语法树最终执行出结果的全部过程。自此一个语言的完整编译过程,简单明了的呈现在了读者面前。 + +### 🐎 [淘系工程师亲述经历:如何避免成为“技术工具人”?](https://mp.weixin.qq.com/s/qBgEjtcTTVuZsAK6j0SEMw) + +[@Smallfly](https://github.com/iostalks):本文从不同角度讲述了作者加入阿里一年收获的成长。 + +- **关于思考:** 按照主管分配机制做事,只会让自己成为工具人,要思考如何「让事情因为自己而与众不同」。 +- **技术与业务两条腿走路:** 身为技术同学,很容易陷入技术自嗨,却没有多大贡献。建议用技术去赋能业务,让技术和业务相互成就彼此,共同成长。 +- **稳定发挥:** 稳定发挥、线性成长的选手比波峰波谷选手更受青睐。 +- **求同尊异:** 在团队引入一种新的机制,不被认可,应该如何思考与推进。 +- **身为 PM 如何做事:** 项目安全永远是第一位,有风险要及时同步;遇到线上问题立即向上反馈,并注意反馈的方式;让合适的人做合适的事情;如果不确定一件事情能否按时完成,就给悲观的答复;技术判断是核心竞争力。 + +### 🐎 [Swift5.5、DocC、Notifications,苹果 WWDC21 带来的最大技术变化](https://mp.weixin.qq.com/s/jw0R-83z9oCnVoffwy-ykg) + +[@Damien](https://github.com/ZengyiMa):苹果在 WWDC21 中给我们带来了许多的新的技术和解决方案,让我们来看看今年 Swift 的 async/await 特性、DocC(文档编译器)、以及系统中的 Notifications 通知中的的一些详细变化的内容吧。 + +### 🐕 [How iOS 15 makes your app launch faster](https://medium.com/geekculture/how-ios-15-makes-your-app-launch-faster-51cf0aa6c520) + +[@Leo](https://github.com/leomobiledeveloper):对于 deployment target 是 iOS 15 或者 macOS 12 的应用来说,苹果采用了一种新的格式来存储启动时候需要 fixup 的信息。目前像 bind/rebase 这种 fixup 信息是存储在二进制不同的表中的,修改后使用 chained fixups 格式,这种格式能带来包体积和启动时间的提升。 + +### 🐢 [深入理解 WKWebView(基础篇)—— WKWebView 加载生命周期与代理方法剖析](https://mp.weixin.qq.com/s/ZFui9IiMTWyLXGKZlbnzwQ) + +[@享耳先森](https://github.com/iblacksun):本篇是系列第二篇,第一篇见 [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ),本篇在上一篇的基础上介绍了 `WebKit` 内部的三个进程是如何协作及通信的。 + +### 🐕 [Diffable data source behavior changes and reconfiguring cells in iOS 15](https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/) + +[@老峰](https://github.com/gesantung):从 iOS 13 开始 Apple 为 TableView&CollectionView 引入 Diffable Data Source 特性实现局部刷新,iOS 15 提供了新 API 带来了更流畅的滚动体验,主要包含如下内容: + +- applySnapshotUsingReloadData(_:completion:):提供简洁的 API 处理非动画 diff reload +- reconfigureItems(_:):提供更高效的 cell 刷新,避免 dequeuing + +另外 [【WWDC21 10252】打造拥有流畅体验的列表和集合视图](https://xiaozhuanlan.com/topic/6813072594) 也有相关阅读,感兴趣对的读者建议阅读。 + +## 摸鱼周报 + +[@摸鱼周报 #17](https://mp.weixin.qq.com/s/3vukUOskJzoPyES2R7rJNg):第十七期摸鱼周报来了~这期概要如下: + +本期话题从一个同学的问题入手,谈了些关于习惯的理解。 + +Tips 部分围绕一个问题展开:“String.count 和 NSString.length 结果是一样的吗?他们之间有什么差别?”。 + +面试专题带来网络部分的第二弹,关于 TCP 连接,关于三次握手,四次挥手。 + +博客部分整理了一些网络优化的文章,网络请求分为:请求前阶段,连接阶段,数据处理阶段,各个阶段都是可以进行优化的。 + +如何用 Swift 实现常用的数据结构?来看 Swift Algorithm Club 吧。 + +两个实用工具推荐,桌面版 Homebrew:Cakebrew,一个好用的剪切板工具:Paste - Clipboard Manager。 + +## 工具 + +### [GitHub Copilot](https://copilot.github.com/) + +GitHub Copilot 是一个可以与你结对编程的 AI 程序员,它可以帮助你以更少的工作量更快地编写代码。它能够从注释和代码中提取上下文,并实时补完单个行或整个函数代码。GitHub Copilot 技术预览版目前以 Visual Studio Code 插件的方式提供,你需要在官网申请加入测试等待名单之后才有机会体验使用。虽然 AI 自动生成代码的话题经久不衰,各种工具也层出不穷,但 GitHub Copilot 的出现可能是距离该类工具真正落地使用最近的一次,感兴趣的朋友快点击官网申请试用吧。 + +* 推荐人:[Zero.D.Saber](https://github.com/faimin) + +## 代码 + +### [Pulse](https://github.com/kean/Pulse) + +[@AidenRao](https://weibo.com/AidenRao):Pulse 是适用于 Apple 平台的强大日志记录系统,基于 SwiftUI 构建。使用 Pulse Console 直接从你的 iOS 应用程序中检查网络请求和日志,并通过 PulseUI 展示出来。你的 QA 团队在问题反馈时可以轻松共享它们,附带在错误报告中。你可以在 Pulse macOS 应用程序中查看共享日志。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#167-2021.07.19.md b/Reports/2021/#167-2021.07.19.md new file mode 100644 index 000000000..620662158 --- /dev/null +++ b/Reports/2021/#167-2021.07.19.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #167 | 2021-07-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) 提出。 + +## 新手推荐 + +### 🌟 🐢 [Develop Apps for iOS](https://developer.apple.com/tutorials/app-dev-training/) + +[@EyreFree](https://github.com/EyreFree):苹果官方 iOS 开发教程终于来了,原来苹果没有忘记!此教程预计需阅读 12 小时左右,介绍 Xcode 的基础用法以及如何利用 SwiftUI 和 UIKit 两个框架来开发 iOS 原生 App,渐进式的代码演示,通俗易懂,非常适合初学者。 + +* 推荐人:[Keith](https://twitter.com/KeithBirdKTH) + +### 🐕 [使用 Swift 提高代码质量](https://juejin.cn/post/6984768684250120222) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):文章首先简单介绍了 Swift 的类型安全等特性,接着列举了一些容易忽略却较为有效的代码实践以及性能优化方案,例如 `` 减少方法动态派发 ``、`` 避免随意给予可选值默认值 ``、``protocol 添加 AnyObject`` 等等。如果团队计划投入 Swift,不失为一份大家可以参考的编码规范的最佳实践。 + +## WWDC 21 内参本周更新 + +### [【WWDC21 10030】高级 Web 内容开发](https://xiaozhuanlan.com/topic/5637428091) + +[@LittleSmart](https://github.com/LittleSmart): Web 应用作为互联网内容的重要组成部分,近些年随着 Web2.0 概念的蓬勃发展和包括 WebAssembly、WebGL2.0 等技术的演进,Web 应用在很多场景下已经具备和原生相媲美的性能,Apple 在过去的一年中为 Web应用带来了哪些改进,Safari 和 Webkit 又新添了一些怎样有趣又好玩的功能呢,让我们跟随 WWDC21 一起来探索一下吧~ + +### [【WWDC21 10053】优秀 Mac Catalyst App 的品质](https://xiaozhuanlan.com/topic/9324781605) + +[@OneeMe](https://github.com/OneeMe): Catalyst 这项技术是苹果于 2019 年的 WWDC 上推出的新技术,其目的在于让开发者能够很快的将一个 iPad App 转换成一个能够跑在 Mac 上的 App。三年来的积累也给这项技术带来了足够丰富的特性。那么,面对 Catalyst 中丰富的各种能力,如何才能让我们所创建的 App 在 Catalyst 下有更好的体验呢?让我们来逐一看看苹果工程师给我们的建议吧! + +### [【WWDC21 10122】图表的无障碍支持进阶](https://xiaozhuanlan.com/topic/7904561328) + +[@Ckitakishi](https://github.com/Ckitakishi): 今年,Apple 带来了全新的音频图表(Audio Graphs),以此为契机,本文将围绕图表无障碍化的基础知识,现状和新特性展开讨论,旨在为正在探索图表无障碍访问的你点亮一盏明灯。 + +### [【WWDC21 10276】使用相机进行键盘输入](https://xiaozhuanlan.com/topic/0281395647) + +[@LinusLing](https://github.com/LinusLing): 我们在日常生活中使用 iOS 应用程序时,常常对那些非数字文本的输入感到很头疼,比如发票,活动传单,还有酒店房间的大活页等。幸运的是,iOS 15 出了一个新功能,可以让你使用相机从周围的世界直接捕获文本,不再需要自己在键盘打字输入了。本文将探讨使用相机进行键盘输入的内容过滤方式以及原理,从而帮助开发者开发相应场景的功能,从而让用户在使用应用程序时获得更流畅、更愉快的体验。 + +## 播客 + +### [WWDC21 瞎谈:Swift 支棱起来了吗?](https://www.xiaoyuzhoufm.com/episode/60ef7aababf61dc037c4a96a) + +[@没故事的卓同学](https://github.com/lacklock):我们终于录上了一期技术播客,本期播客中我、四娘、老驴三人谈了谈对 Xcode cloud 的看法,也谈了 Swift 的异步和并发的新特性。欢迎大家收听、评论、订阅。本期节目在苹果播客、网易云音乐、QQ 音乐、汽水儿、喜马拉雅中也有上线。 + +## 文章 + +### 🌟 🐕 [西瓜客户端埋点实践:基于责任链的埋点框架](https://mp.weixin.qq.com/s/iMn--4FNugtH26G90N1MaQ) + +[@Barney](https://github.com/BarnyZhao):本文深入浅出,从一个基本的收藏点击埋点切入,对比分析了常见的透传埋点,全埋点的优劣,最后引出基于责任链的埋点介绍。 + +文中的关键信息总结如下: +1. 埋点的背景介绍,经典消费场景分析。 +2. 以收藏场景为例,通过伪代码分析对比透传和全埋点的优劣。 +3. 基于责任链的埋点框架介绍 + - 优点:侵入性小、关注点分离 + - 缺点:理解成本、无强制约束 + +### 🐎 [Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271) + +[@Keith](https://github.com/KeithBird):上周我们介绍了码农批量下岗项目 Copilot,该项目还在测试阶段就已经让无数程序员大呼 woc。解放全 GitHub 的项目自然少不了 Swift 代码的投喂,虽然 Copilot 目前只可在宇宙 IDE - VS Code 中使用,但支持多平台一直是 Swift 服务端团队 [SSWG](https://swift.org/sswg/) 的目标之一。[Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271) 一文介绍了目前在 VS Code 写 Swift 的优缺点和对未来的展望。至于如何进行部署,可以参考官方的 [IDEs/Editors with Swift Support](https://github.com/swift-server/guides/blob/main/docs/setup-and-ide-alternatives.md),和非官方但更加通俗详细的 [iOS Development on VSCode](https://medium.com/swlh/ios-development-on-vscode-27be37293fe1)。值得一提的是,尽管目前 Copilot 只对 Python、JS、Go、Ruby 等网红语言才有最完美的支持,但在少有人用 VS Code 开发 iOS 的情况下,其对 Swift 的支持依然十分惊艳。最后,因此对人类失去信心的同学可以复习王垠的「[人工智能的局限性](https://www.yinwang.org/blog-cn/2017/04/23/ai)」,重拾改一辈子 bug 的无产阶级觉悟。 + +> 由 [@Keith](https://github.com/KeithBird) 推荐并完成简评 + +### 🐕 [听说你想写个 DNS 服务器 - 数据包](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486555&idx=1&sn=a1e7e018a549ad155cfad6eb4b135e3e&chksm=cf558393f8220a852fdd90d0919981239d2bbe0266f511ffd27ecbde6e972399b24fdeaec9b8&token=1949232915&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文作者开始了一个新的系列来讲解如何用 Swift 语言来实现 DNS 服务器。作为本系列的开篇,本文主要介绍了 DNS 数据包的结构(包头和包体数据),各个部分的字段定义,布局信息以及介绍了如何通过抓 DNS 数据包来解析 DNS 相关数据的方法。 + +扩展阅读: + +- [听说你想写个 DNS 服务器 - 数据写入](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486681&idx=1&sn=daebc908f4fe22c6d773f1e4e38fa350&chksm=cf558311f8220a07af12fe2a0956fd76ddff0006162ebb983b1795eb201bbe11c3a8456ebced&token=540344501&lang=zh_CN#rd) + +### 🐕 [Improving Platform Channel Performance in Flutter](https://medium.com/flutter/improving-platform-channel-performance-in-flutter-e5b4e5df04af) + +[@Damien](https://github.com/ZengyiMa):本文是 pigeon 的作者 Aaron Clarke 带来的精彩好文,Aaron Clarke 通过减少在 Dart、C++、ObjC、JVM 之间信息传递中发生的多余 copy 优化,来提升 Native 与 Flutter 通信的性能。最终取得的效果在老设备上 15% 的提升,新设备上获得了 42% 的性能提升。并在文章最后给出了一些优化建议,如果对性能要求高场景,可以使用 BasicMessageChannel 和 FlutterBinaryCodec 并且配合自己实现 encode & decode,通过这个组合来提高 Flutter 和 Native 之间的性能。 + +## 摸鱼周报 + +[@摸鱼周报 #18](https://mp.weixin.qq.com/s/JsGmu7pzYLI3Svrmk5i2cA):第十八期摸鱼周报来啦,一起看看本期概要: + +本期话题:什么是暗时间,来源于刘未鹏的《暗时间》。 + +Tips 内容用一张详细的思维导图总结了 Fastlane 几乎所有的常见方法。 + +面试解析围绕 block 的变量捕获机制展开说明了 block 的一些用法和面试高频考察点。 + +优秀博客带来了几篇编译优化相关的文章。 + +学习资料带来了一个从 0 设计计算机的视频教程,偏电路一些;还有 Git 和正则表达式的文字教程。 + +开发工具介绍了两个代码片段整理应用:SnippetsLab 和 CodeExpander。 + + +## 代码 + +### [Hammer](https://github.com/lyft/Hammer) + +[@Smallfly](https://github.com/iostalks):[Hammer](https://github.com/lyft/Hammer) 是一款模拟交互事件的 Swift 开源库,支持模拟触摸,iPad 手写笔,键盘输入。它能很好地用于 UI 自动化测试,尽可能替代一系列的人工操作。有兴趣的同学可以了解一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 杭州网易云音乐社区团队招聘高级/资深 iOS 开发工程师,包含云音乐动态,MLog 视频,评论,播客,云圈,音视频编辑等多条核心业务。负责音视频社区生产分发建设,打造良好的社区互动氛围。我们保持将最新技术引入,提升开发效率,带给用户更好的体验。联系方式:简历发送至 iostalkboy@gmail.com。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#168-2021.07.26.md b/Reports/2021/#168-2021.07.26.md new file mode 100644 index 000000000..3e178db8d --- /dev/null +++ b/Reports/2021/#168-2021.07.26.md @@ -0,0 +1,148 @@ +# 老司机 iOS 周报 #168 | 2021-07-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) 提出。 + +## WWDC + +### WWDC 21 内参 + +老王身体抱恙,停更一周~ + +## 新手推荐 + +### 🌟 🐢 [干货 | Flutter 控件 CustomScrollView 原理解析及应用实践](https://mp.weixin.qq.com/s/dF5Id3w_To4aXeXDbUnUjQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):CustomScrollView 可以说是 Flutter 开发中一定会用到的一个控件,List,Grid,Sliver 等都是基于 CustomScrollView 实现的,那么如何用好 CustomScrollView 是一个技术活,本文由携程技术产出,从原理上讲解如何更好的使用 CustomScrollView,文中涉及诸多开箱即用的知识点,小编强烈推荐各位仔细学习一遍。 + +## 文章 + +### 🌟 🐢 [深入理解 WKWebView(基础篇)—— 聊聊 Cookie 管理那些事](https://mp.weixin.qq.com/s/jZP2DsAa5OV91wdNMw39cA) +[@享耳先森](https://github.com/iblacksun):本篇是系列第三篇,文章首先介绍了 Cookie 相关 API,然后深入介绍 WebKit 内部 Cookie 管理方式及技术原理。前两篇见: + +- [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ) +- [深入理解 WKWebView(基础篇)—— WKWebView 加载生命周期与代理方法剖析](https://mp.weixin.qq.com/s/ZFui9IiMTWyLXGKZlbnzwQ) + + +### 🐕 [详解:mach-o 文件如何分析多余的类和方法](https://mp.weixin.qq.com/s/z0eK4cOfvYWFhHl16rGnEg) + +Mach-O 是 Mach Object 的缩写,是 Mac 上的可执行文件的格式。本文通过对 Mach-O 的介绍,让我们了解到如何通过 Mach-O 来分析无用类,从而减少包体积的大小。作者还基于此封装了一个分析工具,有兴趣的读者可以了解一下。 + +### 🐕 [iOS 优化 - 瘦身](https://mp.weixin.qq.com/s/wDcYvea5dTq0dh0PBwRu4A) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了 iOS 的经典问题,瘦身优化,从最基础的概念讲起,新人友好,同时也适合大家温故而知新。这是一个优化的专题系列,可以持续关注。 + +关键点脉络梳理如下: +- APP 的**下载大小**简单介绍 +- 瘦身方向 +- App Thinning +- 资源文件瘦身 +- 编译选项优化 +- Mach-O 可执行文件瘦身 + +### 🐎 [Mutating and non-mutating Swift contexts](https://www.swiftbysundell.com/articles/mutating-and-nonmutating-swift-contexts/) + +[@xiaofei86](https://github.com/xiaofei86):Swift 帮助我们编写更健壮代码的方法之一是通过其广泛使用的值类型。在使用值类型时,所有更改默认情况下仅对我们正在使用的副本执行,并且实际执行更改的 API 必须清楚地标记为 mutating。本文将探讨 mutating 及其不太常用的对应项 nonmutating 的能力和使用场景,感兴趣的同学可以阅读原文了解。 + +### 🐎 [Fixing a hard-to-find bug in Dark Mode](https://www.jessesquires.com/blog/2021/07/15/fixing-a-hard-to-find-bug-in-dark-mode/) + +[@Smallfly](https://github.com/iostalks):市面上主流 iOS App 基本都支持了系统的深色模式。本文作者在支持深色模式时,遇到 UIButton 在系统主题切换后,部分颜色没有被正常更新。经过一系列的分析,最终定位到问题出在 [Dynamic System Colors](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/) 上。这个坑在支持换肤时还是比较容易踩到的,有需求的同学可以关注一下。 + +### 🐎 [重磅开源|AOP for Flutter 开发利器——AspectD](https://mp.weixin.qq.com/s/lvP2UFHOG0HrtqMMf7na0g) + +[@Damien](https://github.com/ZengyiMa):面向切面的编程意为:通过预编译方式和动态代理技术在不侵入代码的前提下在指定位置插入功能代码,由于在 Flutter 中禁止了反射的功能,所以在 Flutter 实现 AOP 框架只能另辟蹊径。本文是咸鱼团队在实现 FLutter 的 AOP 框架带来的新的思路,通过对 FLutter 的 dill(Dart Intermediate Language)文件的修改来实现了 AOP 的功能,在 Flutter 中有 AOP 需求的同学不妨可以仔细阅读。 + +### 🐎 [听说你想写个 DNS 服务器 - 记录类型扩展](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486727&idx=1&sn=a71ed08275433e15593069e010c31c02&chksm=cf5582cff8220bd96ce28f0dd8874f27064e3999792e6ad25d90a0cf2f56651278495a6927de&token=87205550&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文是《听说你想写个 DNS 服务器》系列的第三篇,介绍了记录结构以及除 ipv4 映射记录之外的其他四种记录类型: + +- AAAA:域名与 ip 映射记录,ipv6 地址 +- NS:DNS 域名服务器记录 +- CNAME:域名对应的另一个域名,表示真正查找的域名 +- MX:邮件服务器域名记录 + +并结合代码展示了如何处理记录读取扩展和记录展示扩展。 + +## 摸鱼周报 + +[@摸鱼周报 #19](https://mp.weixin.qq.com/s/dtyozlqCO7PcpyGhx2qB5g):第十九期摸鱼周报来了,一起来看下本期概要: + +- 本期话题通过对《暗时间》里内容的总结,分享了一些学习和记忆的方法。 +- 开发 Tips 讲了如何区分 `minimumLineSpacing `和 `minimumInteritemSpacing` 这两个属性及本地化关于日期的注意事项。 +- 面试解析讲解了属性及属性关键字的几个知识点,由@师大小海腾和@反向抽烟整理,内容非常之详细。 +- 优秀博客整理了几篇卡顿优化的优质文章。 +- 学习资料有两个内容,Combine Operators:帮助理解 Combine 操作符的手机端 App;还有 Stanford 最新的 SwiftUI 2.0 双语教程。 +- 开发工具带来了一个基于 linkmap 分析执行文件大小的工具:LinkMap。 + +## 工具 + +### [Xcodes.app](https://github.com/RobotsAndPencils/XcodesApp) + +[@AidenRao](https://weibo.com/AidenRao):一个可以安装多个 Xcode 版本,并在它们之间快速切换的应用。 + +- 可安装所有可用的 Xcode 版本 +- 自动化安装,并使用多达 16 个链接,下载速度比直接通过 URLSession 快 3-5 倍 +- 一键安装对应版本的 xcode-select +- 可查看发布说明,操作系统兼容性。 + + +### [Flutter 应用内调试工具 UME 开源啦](https://github.com/bytedance/flutter_ume) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang): 由字节跳动开源。UME 当前内置了如 性能浮层、日志展示、颜色吸管、代码查看 等 10 个插件,可以按需注册插件。已满足大部分日常开发所需。[pub 地址 >>>](https://pub.dev/packages/flutter_ume) +- 优点: + - 插件可以按需注册,且支持开发者自己定制件,UME 欢迎大家共建 + - 对 ``1.12.13``,``2.0.1`` 等几个较为稳定的版本都有兼容 + - 有单测保证工具稳定性 +- 不足: + - 有一定侵入性。由于 UME 内部管理路由,因此 APP 内其余 showDialog 等方法需要传入参数 ``useRootNavigator: false`` + - 部分功能依赖 ``VM Service``,本地运行需对脚本进行修改(添加 ``--no-dds`` 参数) + - 插件内部实现还未兼容 ``nullsafety``,当前只能通过 ``dependency_overrides`` 覆盖版本在 ``no-sound-null-safety`` 模式下使用的,期待适配 + +## 代码 + +### [GodL/Binder](https://github.com/GodL/Binder) + +[@JonyFang](https://github.com/JonyFang):Binder 是一个由 `PropertyWrapper` 驱动的数据绑定库,实现了一些类似 RxSwift 的变换操作函数,函数之间支持相互组合。 + +### [CalendarApp](https://github.com/richardtop/CalendarApp) + +[@Parsifal](https://github.com/ParsifalC):[@Richard][https://github.com/richardtop] 录制了一期关于使用 [CalendarKit](https://github.com/richardtop/CalendarKit) 打造一个简单仿原生日历 App 的视频教程 - [Create iOS Calendar App in Swift with CalendarKit](https://www.youtube.com/watch?v=iC4XxmExqFA),这是他最后完成的一个 Demo 代码。Calendar 相关的教程不多,[CalendarKit](https://github.com/richardtop/CalendarKit) 可以迅速帮你在 App 内创建类似系统日历 UI 的功能。 + +> 由 [@Richard][https://github.com/richardtop] 自荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> bilibili 主站技术中心招聘 高级/资深 移动开发工程师 (包含 iOS Android C++ 等方向) +本团队为核心团队,包含基础架构,播放业务,流量业务,创新业务,通用业务等等众多选择,是内部最大的移动端团队。 +负责横向支撑整个平台,追求极致的用户体验,对新技术保持敏感,是国内少数使用 bazel 的团队。 +联系方式:简历发送至 zhaohan01@bilibili.com。(注明岗位) + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#169-2021.08.02.md b/Reports/2021/#169-2021.08.02.md new file mode 100644 index 000000000..9e48ad315 --- /dev/null +++ b/Reports/2021/#169-2021.08.02.md @@ -0,0 +1,182 @@ +# 老司机 iOS 周报 #169 | 2021-08-02 + +![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) 提出。 + +## WWDC 21 + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):上周四开始,我们已经在周报公众号上开始陆续发布今年杭州场沙龙的分享文章、PPT 和视频等内容了,本周也会继续发布杭州场和上海场的相关内容信息,欢迎大家继续关注~ + +- [淘宝工程渐进式拥抱 Swift - 倾寒](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491478&idx=1&sn=8dc4a6a6062056b9bed801ea043f7919&chksm=eaa2809dddd5098b4e8ecc06ba6d0649321f75981f56517ed25577e12de183e392577aba9267&token=1581804799&lang=zh_CN#rd) +- [西瓜视频的 IAP 支付实践与 StoreKit 新特性 - 黄骋志](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491481&idx=1&sn=652c93ef30634f979008387cc029ec68&chksm=eaa28092ddd509848862d136c906a913bdb40a41f2220245393ed0498b4669671c0e4b41247e&token=1581804799&lang=zh_CN#rd) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参恢复更新,8 篇高质量内容已经发布~ + +- @VincentMing:[【WWDC21 10132】 认识 Swift 的 Async/Await](https://xiaozhuanlan.com/topic/9307851264) +- @fakeGourmet:[【WWDC21 10143】- 探索 AVFoundation 中的 HLS 变体](https://xiaozhuanlan.com/topic/8432795016) & [【WWDC21 10142】 - 使用 HLS 让媒体无缝切换](https://xiaozhuanlan.com/topic/7392854016) & [【 WWDC21 10141】 - 使用 HLS Content Steering 提升全球范围流媒体的可用性](https://xiaozhuanlan.com/topic/2956103478) +- @Mim0sa:[【WWDC21 10097 10251 10349】- SF Symbols 使用指南](https://xiaozhuanlan.com/topic/9214865730) +- @MarryNerV:[【WWDC21 10220 10221】 - 本地化功能上新](https://xiaozhuanlan.com/topic/6278501394) +- @Nemo:[【WWDC21 10047】 - 相机拍摄新变化](https://xiaozhuanlan.com/topic/0729458136) +- @kk:[【WWDC21 10002 10009】- watchOS 8 中的新特性](https://xiaozhuanlan.com/topic/0142735986) + +### WWDC 21 播客 + +#### [WWDC21 瞎谈:Catalyst、SwiftUI、Flutter 谁是 UI 的未来?](https://www.xiaoyuzhoufm.com/episode/61009e2083c3728d82be24c4) + +[@没故事的卓同学](https://github.com/lacklock):这是我们第二期 WWDC 相关的播客,本期我和老驴、四娘、少庸一起聊了一下对 Catalyst、SwiftUI、Flutter 的看法。本期节目在苹果播客、网易云音乐、QQ 音乐、汽水儿、喜马拉雅中也有上线。 + +## 文章 + +### 🌟 🐢 [我写技术文章的一点心得](https://ming1016.github.io/2021/07/24/my-little-idea-about-writing-technical-article/) + +[@Barney](https://github.com/BarnyZhao):本文是戴铭老师对自己过往写作经验的深度总结,从四个写作要点开篇,分析了自己过往的经典文章以及当时的想法和灵感。紧接着结合本次 WWDC 举例,传授新手如何开始写作的经验。可谓是干货满满,适合反复阅读。 + +关键点脉络: +- 四个点 +- 过往经验 +- 我是新手怎么办 +- WWDC 和 经验总结 + +### 🌟 🐕 [基于 Swift 编写严肃脚本工具](https://github.com/100mango/zen/blob/master/%E5%9F%BA%E4%BA%8E%20Swift%20%E7%BC%96%E5%86%99%E4%B8%A5%E8%82%83%E8%84%9A%E6%9C%AC%E5%B7%A5%E5%85%B7/%E5%9F%BA%E4%BA%8E%20Swift%20%E7%BC%96%E5%86%99%E4%B8%A5%E8%82%83%E8%84%9A%E6%9C%AC%E5%B7%A5%E5%85%B7.md) + +[@EyreFree](https://github.com/EyreFree):本文作者是目前就职于微信的 100mango 老师,开篇通过分析 Swift 在国内外的使用现状以及在微信的一些应用场景表现了 Swift 的光明前途,并且借由「微信支付跨平台代码生成器是由 Swift 编写的」这一事例引出了文章主题:如何通过 Swift 来编写脚本 / 自动化工具。主要分为以下四步: + +- 创建工程:通过 Swift Package Manger 创建了工程,并调整了工程结构,依赖管理; +- 编写代码:通过编写一个简单生成随机数的工具感受 Swift 编写脚本工具,并给我们的工程引入了苹果开源的 Argument Parser 库。用于简化命令行参数解析,优化工具说明; +- 测试:分别对逻辑代码和命令行 API 进行了测试; +- 发布:通过一行简单的代码,就能生成可执行文件进行分发; +- 进阶操作:最后介绍了几个进阶操作,我们还发现通过 Swift 编写脚本工具,还能直接和 AppKit / SwiftUI 进行交互,非常的具备扩展性。 + +这篇文章并没有展示特别复杂的代码,但是根据上面展示的步骤、原则,就能编写出能够支撑像微信支付跨平台代码生成器这样的命令行工具。Swift 是一门优雅的编程语言,以后大家不管是遇到编写一些小脚本还是开发大型严肃工具的场景,都可以尝试用 Swift 实现了呢! + +### 🌟 🐕 [Calling Hidden/Private API from Swift in Style](https://medium.com/swlh/calling-ios-and-macos-hidden-api-in-style-1a924f244ad1) + +[@JonyFang](https://github.com/JonyFang):在 Swift 中使用 Objective-C 私有 API 一般有两种方式,自己创建头文件或消息的方式,但不管哪一种使用起来都会比较繁琐。本文中,作者基于 Swift 的 `@dynamicMemberLookup` 和 `@dynamicCallable` 特性封装了围绕 Objective-C 类和对象的库 -- [mhdhejazi/Dynamic](https://github.com/mhdhejazi/Dynamic)。`mhdhejazi/Dynamic` 满足了 Swift 可以以更简单和直观的方式来调用私有 API。 + +### 🌟 🐕 [大家来找茬:记一起 clang 开启 -Oz 选项引发的血案](https://mp.weixin.qq.com/s/1RNsrmUKuxmQa0jPZozE9A) + +[@Leo](https://github.com/leomobiledeveloper):我们可以通过 -Oz 的编译选项来优化包体积,但是在某些极端情况下 -Oz 会导致编译器的某些优化失效,引起一些非预期的问题。本文就是关于一个开启了 -Oz 导致 autorelease 优化失效,对象误被放入 autoreleasepool 中,进而引起大量内存堆积的问题。文章干货颇多,推荐阅读。 + +### 🐎 [技术债治理的四条原则](https://insights.thoughtworks.cn/managing-technical-debt/) + +[@莲叔](http://github.com/aaaron7):在我们的工作中,重构是一个经常提及的话题,毕竟现在都是业务优先,几乎没有一个业务的技术架构是一步一步稳扎稳打的建立起来的, 普遍都是上线要紧,随着而来的就是各种各样的技术债。对于技术债,重构还是不重构,这也是一个问题。不重构吧,做新需求很蛋疼,容易踩雷,稍不留神就线上故障。重构吧,投入很多人力物力,但其结果很难产生真正的业务收益,业务方不买单也就算了,还可能导致目前线上已经在跑的模块出现问题。不管从哪个方面来看,这都是一个很两难的问题。这篇文章针对这个两难问题进行了非常深入的分析与讨论,并且旗帜鲜明的给出了自己的态度:要解决,但是需要遵循几个基本的原则。感兴趣的同学可以阅读一下,或许可以找到符合你们团队实际情况的答案。 + +### 🐕 [The flutter “const” Keyword demystified.](https://medium.com/flutter-community/the-flutter-const-keyword-demystified-c8d2a2609a80) + +[@邦Ben](https://weibo.com/linwenbang):这篇文章简单介绍了 const 的使用会对某些频繁创建的场景的性能有所优化,例如在构造方法中加入 const 声明,可以提高复用 widget,节省内存。总体而言,在频繁复用场景中(例如做动画),建议加上 const ,其他基本不复用的场景则作用不大。 + +可以配合下方链接阅读,参考文章作者也对 const 的使用进行了简单的测试以证明效果。 + +参考: +[Flutter 的 Widget,刻意加上 const,真的值得吗?](https://juejin.cn/post/6977212326394986510) + +### 🐕 [网易新闻 iOS 工程组件化实践](https://mp.weixin.qq.com/s/mfvbRXEhJBqzhwQbjnuZgw) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):网易新闻也是迭代了 10 年的 APP 了,最终实现了主工程里只有一个 main 文件,组件数量达到了 268 个。 + +每个 APP 会由于项目特点以及团队组织结构的区别,在实践中细节会有些许不同,但目的都是明确的:提高可维护性、开发效率。网易新闻业务之间耦合较多,业务之间频繁相互调用接口也有成本;团队没有按业务进行拆分,同时业务之间也不需要隔离。因此网易新闻没有选择通过路由将业务完全隔离,而是将业务拆为两层,顶部的展现层利用路由隔离,下方的业务层可以单项依赖。 + +同时网易新闻还对工具链进行了改造: +- 在组件配置信息中增加 level、binary 等参数,在 ``pod install`` 时前置报出 warning ,防止组件之间的错误依赖关系 +- 推行严格的代码责任制以及 Merge Request 规范化 +- 未选择版本号,而是采用通过 Xcode 缓存,MD5 区分版本的本地二进制方案,减少额外的人力成本 + +> 自荐: [lixf](https://https://github.com/lixinfei) + +### 🐕 [美团 App 页面视图可测性改造实践](https://mp.weixin.qq.com/s/YcvFSs-97SpMKjlpj9Dzqg) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):本文围绕动态化容器中的动态布局技术,阐述了如何通过可测性改造来帮助达成提升测试效率的目标。本文目录: + +* 美团App的页面特点 + +* 自动化测试实施中的技术挑战 + * 页面元素无法定位 + * Appium元素定位的原理 + * AccessibilityNodeInfo和Drawable + +* 页面视图可测性改造-XraySDK + * 定位方案对比 + * 视图信息的获取和存储-XrayDumper + * 视图信息的输出-XrayServer + * SDK整体功能结构 + * 视图信息的增强 + * 动态布局自动化的收益 + +* 未来展望 + * 使用视图解析原理解决WebView元素定位 + * 视图可测性改造更多的应用场景 + +### 🐕 [面试中 LRU / LFU 的青铜与王者](https://github.com/halfrost/Halfrost-Field/blob/master/contents/Go/LRU:LFU_interview.md) + +[@J_Knight_](https://github.com/knightsj):本文作者介绍了 LRU 和 LFU 算法的原理和 Go 语言的实现。也分享了 LRU 和 LFU 的优化方案和“如何实现一个高并发且线程安全的 LRU” 这个问题的实现思路。 + +### 🐕 [从 WebKit 源码中学习手势处理的高级用法——WKWebView中的手势识别](https://mp.weixin.qq.com/s/pt1nk5z5nK-fPCKqQlP-sg) + +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):本文的作者从对 iOS 事件响应与手势的基础原理入手,深挖到 WebKit 源码中对于手势的处理策略,针对 Web 界面中更复杂更多样的手势处理进行分析与总结,非常有助于我们加深对 iOS 手势的深入理解与运用。 + +### 🐎 [Xcode 13 Missing Info.plist](https://useyourloaf.com/blog/xcode-13-missing-info.plist/) + +[@AidenRao](https://weibo.com/AidenRao):文中主要介绍了 2 点: + +1、Xcode 13 新起的 SwiftUI 项目,Info.plist 文件已经不存在,文中介绍了如何找回 Info.plist。 + +2、Xcode 13 新建的项目无法用 Xcode 12 打开,文中介绍了如何更改设置来向前兼容 Xcode 12。 + +> 感谢 [faimin](https://github.com/faimin) 的推荐 + +## 摸鱼周报 + +[@摸鱼周报 #20](https://mp.weixin.qq.com/s/PjiZzx3VSAfAGHRJs160aQ):第二十期摸鱼周报来了,一起来看下本期概要: + +* 小编整理了一些洪灾应对的指南,希望对大家有所帮助。 +* Tips 部分介绍了如何绘制一个高颜值的统计图。 +* 面试解析模块本期讲解深拷贝浅拷贝的知识点。 +* 优秀博客汇总了不少包体积优化的优秀文章。 +* 学习资料推荐了 [Better Explaine](https://betterexplained.com/) 这个网站,其用于帮助大家理解那些复杂的数学概念。 +* 截图工具 Snipaste,无用图片搜索工具 LSUnusedResources。 + +## 代码 + +### 🐕 [OpenCombine](https://github.com/OpenCombine/OpenCombine) + +[@zvving](https://github.com/zvving):与 SwiftUI 一起推出的 [Combine](https://developer.apple.com/documentation/combine) 本可以作为响应式框架独立使用,但最低系统 iOS13 的限制极大制约其应用。 + +类似 [CombineX](https://github.com/cx-org/CombineX),[OpenCombine](https://github.com/OpenCombine/OpenCombine) 旨在为 iOS/macOS 低版本(>= iOS 8.0)及跨平台场景提供 API 一致的开源实现,为后续向官方 Combine 过渡提供『无缝切换体验』。项目依旧在早期阶段,感兴趣的朋友们可以提前了解,生产环境应用需谨慎。 + +> 感谢 [XanderXu](https://github.com/XanderXu) 的推荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#170-2021.08.09.md b/Reports/2021/#170-2021.08.09.md new file mode 100644 index 000000000..481240b04 --- /dev/null +++ b/Reports/2021/#170-2021.08.09.md @@ -0,0 +1,144 @@ +# 老司机 iOS 周报 #170 | 2021-08-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) 提出。 + +**周报编辑组又来新人啦~欢迎黄骋志加入周报组织。骋志是我们这次杭州场线下沙龙的分享嘉宾,完成了 IAP 在西瓜视频上的落地,同时对跨端技术(Flutter & RN)均比较熟悉。希望骋志的加入也能为大家带来更多元化的内容输出!** + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):我们正在周报公众号上陆续发布今年杭州场和上海场沙龙的分享文章、PPT 和视频等内容,欢迎大家继续关注(公众号回复**杭州**即可获取杭州场文章和视频)~ + +- [Flutter 混编工程的模块化架构设计实践 - Jackie](https://mp.weixin.qq.com/s/A2gYRPJ0u8TVXZyMtEArlA) +- [抖音创作工具防劣化实践 - Crespo](https://mp.weixin.qq.com/s/_c3y9KnbKS6VnqTb0AKRWg) +- [Async and Await in Swift 5.5 - 彭玉堂](https://mp.weixin.qq.com/s/DopuYyy479eSjgns3iaWaw) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,6 篇高质量内容已经发布~ + +- @Sinno:[【WWDC21 10278】Core Haptics 初体验](https://xiaozhuanlan.com/topic/0382695741) +- @sunset:[【WWDC21 10267】一窥 Xcode Cloud](https://xiaozhuanlan.com/topic/2946158037) +- @土土Edmond木:[【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩](https://xiaozhuanlan.com/topic/4392718605) & [【WWDC21 10210】探索 Xcode 项目中构建配置的高级技巧](https://xiaozhuanlan.com/topic/3518046279) +- @Sean:[【WWDC21 10202】Detect bug early using static analyzer](https://xiaozhuanlan.com/topic/7125309684) +- @冬瓜:[【WWDC21 10253】使用 Swift 特性 Result Builder 定制 DSL](https://xiaozhuanlan.com/topic/9042736581) + +## 新闻 + +### 🌟 [重要!与苹果工程师一对一咨询的机会~](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491606&idx=1&sn=15026f240a4597922aff0e2786473dfd&chksm=eaa17f1dddd6f60b43344e46cbc04cc8bc1d9c9c7f6c6e924abf5519b0670cee345367132f57&token=2123226571&lang=zh_CN#rd) + +[@Parsifal](https://github.com/ParsifalC):苹果官方的一对一咨询活动来啦!2021 年 8 月 17 日(周二)举办主题为 “Core ML 和 Create ML 的最新进展及更多”的在线研讨会。本次面向周报读者免费公开报名,扫码即可参与。苹果工程师一对一 30 分钟的咨询介绍,名额有限,报满即止。 + +![](https://user-images.githubusercontent.com/7930911/128632650-6ff4f45d-ae6f-405a-b361-aa1928c833a5.png) + +## 新手推荐 + +### 🐎 [Flutter (able) 的单例模式 | Flutter 设计模式](https://mp.weixin.qq.com/s/hRvmbRcJlOj5iB1HqvUkog) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):单例模式,可以被称得上是诟病最多的设计模式了,objccn 中也有一篇[避免滥用单例](https://objccn.io/issue-13-2/)。但这并不是单例模式的错,而是使用单例的方式错误导致的。 + +本文给大家展示了利用 工厂构造函数 + 空安全语法 + 箭头函数 写出符合 Dart 特性的单例代码,可以做个参考。**真的还是少用**。然后引出了 InheritedWidget,相对于一般的单例,这是前端中比较通用的状态同步方案,如果衡量下需要一个全局统一的数据仓库,那就在 InheritedWidget / Redux / Angular 中挑一个吧。若不清楚 InheritedWidget 可以配合下方链接了解。 + +> [《Flutter 实战》 数据共享(InheritedWidget)](https://book.flutterchina.club/chapter7/inherited_widget.html) + +## 文章 + +### 🌟 🐕 [脉脉 iOS 如何启动秒开 - 知乎](https://zhuanlan.zhihu.com/p/396550853) + +[@Barney](https://github.com/BarneyZhaoooo):本文是脉脉技术团队对启动优化的实践总结,从理论到实践相结合,适合从零了解启动优化。 + +关键点: +- App 是如何启动的 +- 衡量 App 启动时间 +- 核心方法分析 +- 制定 App 启动优化方案 +- 验证 脉脉 App 启动优化效果 + +### 🌟 🐕 [拿去吧你!Flutter 仿自如 App 裸眼 3D 效果](https://juejin.cn/post/6991409083765129229) + +[@邦Ben](https://weibo.com/linwenbang):该文模仿自如团队在 Flutter 上利用 Accelerometer (加速度传感器)、Gyroscope (陀螺仪)实现了视差形成的裸眼 3D 效果,看演示 Demo 效果不错,文章写的原理分析不错,也可以看一下自如团队 Android 端实现。 + +> [自如客 APP 裸眼 3D 效果的实现](https://juejin.cn/post/6989227733410644005) + +### 🌟 🐕 [快手海外 Swift/ObjC 混编与二进制化工程实践](https://mp.weixin.qq.com/s/d-atu1J_gqd3-rM0UXAqbA) + +[@JonyFang](https://github.com/JonyFang):本篇主要记录了快手团队在 Swift/OC 二进制化混编实践过程中碰到的诸多问题及解决方法,最终的结果是:有效提高了编译效率。 + +整体的目录结构如下: + +1. Swift/ObjC 混编背景介绍 +2. 单 Target 混编 + - bridging header +3. 多 Target 混编 + - OC 组件 Clang module 化 + - 处理难以 Module 化的 Pod 组件 + - Swift 组件的二进制兼容 + - 二进制化混编 +4. 实践中遇到的问题 + - Framework search path 与 Header search path 的冲突问题 + - Module 中使用宏的问题 + - FakeFramework 解决依赖关系与编译顺序的问题 +5. 展望未来 + - 基础库规范适配处理 + - 规范公开头文件 + - 提高 Module 化组件占比 + +### 🌟 🐕 [浅析快手 iOS 启动优化方式——动态库懒加载](https://mp.weixin.qq.com/s/gNc3uK5ILbXsO8jB1O-jnQ) + +[@Leo](https://github.com/leomobiledeveloper):App 的启动速度与用户体验息息相关,启动速度越快,用户的留存率往往也会越高。对于 iOS 应用来说,其启动主要分为 main() 方法之前 (也称为 premain ) 和 main() 方法之后两个阶段。本文将要介绍的优化方式是动态库懒加载,即主要针对 premain 阶段进行优化。文中会重点介绍在动态库懒加载和启动代码动改静的实践过程中遇到的一些问题及处理方式。 + +### 🐎 [StaticString, and how it works internally in Swift](https://swiftrocks.com/staticstring-in-swift) + +[@Smallfly](https://github.com/iostalks):字符串是开发中比较常用的类型,Swift `String` 作为结构体,运行时在栈内创建字符串实例。对于不可变的字符串,频繁使用 `String` 类型,对栈内存和 CPU 来说是一种浪费。Swift `StaticString` 类型在 `String` 的基础上进行了优化,实现了字符串引用,本文简单的介绍了它在编译器层的实现原理。 + +## 摸鱼周报 + +[@摸鱼周报 #21](https://mp.weixin.qq.com/s/Hcd8CtkyqD8IXM0SbVJo-A):第二十一期摸鱼周报来了,一起来看下本期概要: + +* 本期话题源于看到的一个讲解身体机制的视频,人在危重的时候身体会有哪些反应。 +* 关于 `UserDefaults` 的一些用法。 +* 面试解析本期讲解 load 和 initialize 的一些知识点。 +* 内存方面的优化,通常分为两个步骤:问题定位,利用 Instruments 中的 Leak,Allocation 进行分析。问题解决,解决特定内存问题或使用 mmap 方案进行优化。大家也可以带着问题去阅读相关文章。 +* Open Source Society University:非常受欢迎的计算机科学自学教程,Swift Programming for macOS:用 Swift 开发 Mac 应用的一些示例介绍。 +* Messier:一个 Objective-C 方法耗时监控的方案。 + + +## 工具 + +### [cocoapods-TSPodfileTimeWatch](https://github.com/cxr0715/cocoapods-TSPodfileTimeWatch) + +[@红纸](https://github.com/nianran):这是一款开箱即用的 Cocoapods 插件,插件用于提供了 Cocoapods 中几项重要的耗时/磁盘占用指标(仓库下载耗时、仓库文件大小、Cache 文件大小、解压耗时、Git 版本差值),作者也很贴心的输出了 csv 格式文件。当小伙伴们需要 Cocoapods 相关的量化数据指标,做一些耗时跟磁盘相关优化的话,推荐可以使用此工具。 + +> 自荐:[Ke哀](https://github.com/cxr0715),目前就于职手机 QQ,从事手 Q 基础开发 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#171-2021.08.16.md b/Reports/2021/#171-2021.08.16.md new file mode 100644 index 000000000..f8050522e --- /dev/null +++ b/Reports/2021/#171-2021.08.16.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #171 | 2021-08-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) 提出。 + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):我们正在周报公众号上陆续发布今年杭州场和上海场沙龙的分享文章、PPT 和视频等内容,欢迎大家继续关注(公众号回复**杭州**即可获取杭州场文章和视频)~ + +- [基于 Bazel的 iOS MonoRepo 实践 - 张忻正](https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw) +- [Advanced Property Wrapper in Swift - 黄智杰](https://mp.weixin.qq.com/s/psgRgIZlVDtIeQeDmUmXOw) +- [From Idea To Product - Roc](https://mp.weixin.qq.com/s/TZHrFOU65iG7QQwP8b96-w) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,1 篇高质量内容已经发布~ + +- @陈剑强:[【WWDC21 10036】使用 SoundAnalysis 内置分类器实现声音分类](https://xiaozhuanlan.com/topic/5627914803) + +## 新手推荐 + +### 🐎 [iOS 页面渲染 - UIView & CALayer](https://mp.weixin.qq.com/s/ElGEsJoh3Y1-BWlvz1yJ9w) +[@ChengzhiHuang](https://github.com/ChengzhiHuang):UIView 所有 iOS 开发想必都接触过,但底下的 CALayer 大家了解就相对偏少,本文适合刚入门的开发者查漏补缺。内容如下: + +- CALayer 是如何与 UIView 配合实现动画,以及 内部的三份树形结构:layer tree (model tree)、presentation tree、render tree +- CALayer 在页面的渲染流程中发挥的作用,通过 CALayerDelegate 可以实现手动绘制、异步绘制 +- bounds、position、anchorPoint 等属性的介绍,并总结了 frame 与其他属性的关系 + +## 文章 + +### 🌟 🐢 [深入理解 Swift 代码覆盖率](https://mp.weixin.qq.com/s/uKfrC2NB3njzF1JQUt_cbg) + +[@Parsifal](https://github.com/ParsifalC):对于基础架构团队,输出产物的稳定性是至关重要的,尤其是像字节这样一个超大型的客户端团队内。为了保障各项 SDK 的稳定性,提高自动化测试的覆盖率是很多团队的一个选择。若你也是 Swift 的长期使用者或关注者,不难发现自从 Swift 2 开始,官方便支持了 Swift 测试代码覆盖率的统计。对于一般的项目而言,只要简单在 Xcode 中开启对应开关,就可以轻松得到项目中的覆盖率。但本文讨论的是基于分布式编译和测试场景下的 Swift 代码覆盖率,这一场景下,精准统计覆盖率就变得不那么容易了。主要原因在于分布式执行 CI 任务,是在相对隔离的环境下进行的,每次任务间的编译路径并不相同,无法简单直接累加覆盖率合成实际完整的项目木覆盖率。抖音团队通过深入研究官方提供的覆盖率测试文档,具体的做法是: + +- 将每个测试结果的 `profraw` 文件解析为文本格式的 `profdata` 并且统一路径 +- 合并多个 `profdata` 得到真实的覆盖率数据 +- 使用 `llvm-cov -path-equivalence` 命令完成源码路径的映射 + +### 🌟 🐕 [Reverse Engineering UIKit to Fix Our Top Crash | PSPDFKit](https://pspdfkit.com/blog/2021/reverse-engineering-uikit/) + +[@Barney](https://github.com/BarneyZhaoooo):本文是 PSPDFKit 团队通过逆向修复 UIKit bug 的实践经验,分析问题的过程十分详细,值得学习借鉴。 + +- 崩溃问题定位,Hopper 反汇编。 +- 问题分析,拆解。 +- UIPageViewController 逆向。 +- 通过 swizzling 修复并验证。 +- 复盘总结 Floating-point precision errors are vicious。 + +### 🐢 [听说你想写个 DNS 服务器 - 代理](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486791&idx=1&sn=2695a508ea45e43527875058ad106e6d&chksm=cf55828ff8220b990eb722b4fb149b8cd424133d05646ea7e369ab4597c1e97503714a6f20dd&token=1722840270&lang=zh_CN#rd) +[@水水](https://www.xuyanlan.com): 作者用实际代码详细的描述如何编写一个 DNS 服务器的雏形,包括对查询包的解析,然后返回对应的响应包。 +整个流程如下: +- DNS 服务器开启本地 UDP 服务。 +- 本地 DNS 客户端发起请求。 +- DNS 服务器收到请求后,重新构造请求包,转发到公共 DNS 服务器。 +- 当收到公共 DNS 服务器的结果后,构造响应包,将数据返回给客户端。 + +系列关联文章 - [听说你想写个 DNS 服务器 - 记录类型扩展](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486727&idx=1&sn=a71ed08275433e15593069e010c31c02&chksm=cf5582cff8220bd96ce28f0dd8874f27064e3999792e6ad25d90a0cf2f56651278495a6927de&token=1722840270&lang=zh_CN&scene=21#wechat_redirect) + +### 🐎 [深入浅出贝塞尔曲线](https://juejin.cn/post/6995482699037147166) +[@Smallfly](https://github.com/iostalks):本文详细介绍了贝塞尔曲线的定义和推导过程,以及 iOS 提供绘制曲线能力的相关类和 API。通过实现波浪动图来展现二阶和三阶贝塞尔曲线的应用。最后还介绍了在已知曲线阶数的前提下,根据起点和终点反向推导控制点的计算过程。强烈推荐不了解贝塞尔曲线实现的同学阅读。 + +### [Stack Overflow 2021 开发者调查报告出炉,开发浪潮中的变与不变](https://mp.weixin.qq.com/s/E6R3dXGBa4YzzuekxPMgOw) + +[@Parsifal](https://github.com/ParsifalC):2021 年 5 月 25 日,Stack Overflow 举办的一年一度的开发者调查重新启动,就在 8 月 2 日,调查结果新鲜出炉,超过 80,000 名开发者参与了调查,JavaScript 连续 9 年获得最常用编程语言冠军,React.js 首次赶超 jQuery 成为最常用的 Web 框架,而 Svelte 后来居上夺得最受欢迎 Web 框架。Rust 连续第 6 年登顶最受喜爱语言,受到超过 86% 开发者的喜爱。我们一起看一看 2021 年,开发者发生了怎样的变化。 + +## 摸鱼周报 + +[@摸鱼周报 #22](https://mp.weixin.qq.com/s/JI5mlzX9cYhXJS81k1WE6A):第二十二期摸鱼周报,一起来看下本期概要: + +* 本期话题:聊聊 iOS 博客环境,公众号vs掘金。 +* Tips:Reachability 的使用建议,SQL 中 JOIN、UNION 的含义,如何在项目中区分 AdHoc 和 AppStore 包。 +* 面试解析:本期讲解 block 类型的相关知识点。 +* 优秀博客:如何做电量方面的优化,关于 MetricKit 的使用。 +* 学习资料:布朗大学的学生制作的「看见统计」课程;一个 Github 仓库 Hacker Laws,总结各种定律和法则。 +* 一个帮助学习正则表达式的在线工具:regex101。 + +## 工具 + +### [mxcl/xcodebuild](https://github.com/mxcl/xcodebuild) + +[@红纸](https://github.com/nianran):这是一个基于 Github Actions 的 Action,其作用是帮助开发者去构建签名打出产物包和进行单元测试。其优势在于轻量化的配置方式和 Github Action 完整的自动化体系,只需要一个配置文件即可完成整个配置。如果你的整个持续集成体系是基于 Github Action 的值得进行一试。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#172-2021.08.23.md b/Reports/2021/#172-2021.08.23.md new file mode 100644 index 000000000..e42886f02 --- /dev/null +++ b/Reports/2021/#172-2021.08.23.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #172 | 2021-08-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) 提出。 + +## 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,4 篇高质量内容已经发布,总更新文章已达 92 篇,实际包含 session 内容超过 100 个~ + +### [【WWDC21 10012 】App Clip 新特性](https://xiaozhuanlan.com/topic/2048796351) + +@昊泽:App Clip 是 WWCD20 的一大亮点,它提供了一种“即时使用”的方式,基于苹果提供的各种唤醒方式,让用户在特定场景下很方便地体验 App 内的核心功能。现在一年过去了,世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式,也一并完善和优化了本地体验,并提供了命令行工具来帮助开发者们生成轻应用码。 让我们一起来看看吧。 + +### [【WWDC21 10076】使用 Object Capture 创建 3D 模型](https://xiaozhuanlan.com/topic/8026419753) + +@Hays:Apple 自 2017 年推出 ARKit 以来一直在推动增强现实技术在其各个平台上的应用和发展,但 AR 内容的匮乏与高成本一直是制约开发者们投入 AR 的重要因素。在本次 WWDC 上,Apple 将 3D 模型的构建效率提升了到了前所未有的高度,RealityKit 2 框架中的新 Object Capture API 为我们提供了一种非常便捷的方式来为生活中的物体创建 3D 模型,而你需要的仅仅是为目标物拍摄几张照片。此外,配合 AR Quick Look 可以轻松将创建好的模型集成到你的应用之中。 + +### [【WWDC21 10109】探索 Foundation 新增功能](https://xiaozhuanlan.com/topic/7093142658) + +@leejunhui:`Foundation` 作为最核心的系统库之一,今年带来了三大部分的新内容,分别是属性字符串,格式化器以及自动语法协议。这些内容的核心要点都表明 `Apple` 想要摒弃掉 `Objective-C` 时代留下的繁琐的 `API` 以及编程范式。 + +### [【WWDC21 10153】基于苹果芯片的图像处理](https://xiaozhuanlan.com/topic/5796308412) + +@潘名扬:这篇 WWDC 的分享主要介绍了如何针对苹果芯片对图像处理应用进行优化,探索了如何充分发挥 Metal 渲染命令编码器、切片渲染、统一内存架构,以及 memoryless attachments 的优势。在文中的示例里,工程师为我们展示了如何针对苹果 GPU 的 TBDR 架构来降低应用的内存占用,减少能耗。通过本篇分享,你还可以了解到将应用中的图形运算从独立显卡迁移到苹果芯片的最佳实践。 + +## 新闻 + +### 🐎 ["同播共享"发布计划的更新](https://developer.apple.com/cn/news/?id=mxaeu6er) + +[@zvving](https://github.com/zvving):在最新的 iOS15 developer beta 6 中 SharePlay 被禁用。这意味着 iOS15 正式版发布临近,最初版本不会包含 SharePlay, SharePlay 会在后续更新版本中提供。 + +在开发 SharePlay、GroupActivities 相关功能的朋友可以从原文下载配置文件确保开发不被中断,同时需要留意近期 App 提交不要包含 GroupActivities 授权配置,等待对应功能放开后再进行提交。 + +## 文章 + +### 🌟 🐎 [Making efficient use of the libdispatch (GCD) · GitHub](https://gist.github.com/tclementdev/6af616354912b0347cdf6db159c37057) + +[@Barney](https://github.com/BarneyZhaoooo):本文针对 **libdispatch** 总结了很多使用技巧,列举了一些常见的误区。类似各种高效 tips 整合文章,方便大家找到自己不了解的地方深入学习。 + +### 🐕 [微信跨平台硬件直播组件](https://mp.weixin.qq.com/s/qK73om3ueP_S6i8qp8hgHQ) + +[@anotheren](https://github.com/anotheren):微信视频号已提供跨平台硬件直播组件,支持移动平台(iOS/Android)、PC 平台(Windows/macOS)和嵌入式平台(以 Raspberrypi 为例)。文章简要介绍了其解决的问题以及实现的方案。相比传统的移动平台,广大云厂商早已推出了各自的成套解决方案,微信视频号这次应该是奔着相关直播硬件而来,只是不知会擦出怎样的火花。有嵌入式硬件需求,或者在设计直播组件的同学都可以仔细看看。 + +### 🐕 [Creating Custom Parseable Format Styles in iOS 15](https://emptytheory.com/2021/08/14/creating-custom-parseable-format-styles-in-ios-15/) + +[@AidenRao](https://weibo.com/AidenRao):在 iOS 15 之前,为了将数字或日期转换为字符串,你通常需要多行代码,维护一个 Formatter 派生类,编码过程较复杂且不易维护。iOS 15 及更新的版本,不需要任何 Formatter,我们可以在大部分场景,一行代码搞定格式化。 + +如果需要更灵活的格式化方式,可以自定义新的格式样式,本文实现了一个将简单的电话号码,格式化成标准美国格式电话号码的示例,413555212 → (413) - 555-1212,作为实现参考。 + +## 摸鱼周报 + +[@摸鱼周报 #23](https://mp.weixin.qq.com/s/1Vs50Lbo0Z27dnU-ARQ96A):第二十三期摸鱼周报来啦,一起来看下本期概要: + +- 话题:本期邀请 CoderStar 聊一下他的公众号和学习方法。 +- Tips:简版 PromiseKit 的设计思路;如何通过 embedded.mobileprovision 区分包类型。 +- 面试模块:isMemberOfClass、 isKindOfClass 的含义与区别。 +- 优秀博客:整理了Swift 指针、Swift 属性包裹器相关的几篇文章。 +- 学习资料:介绍三个机器学习的网站。 +- 开发工具:帮助解析 Shell 脚本的网站:explainshell。 + +## 工具 + +### [onefetch](https://github.com/o2sh/onefetch) + +[@EyreFree](https://github.com/EyreFree):Onefetch 是一款由 Rust 编写的命令行 Git 信息展示工具,它能够在终端中展示本地 Git 仓库的项目详情和代码统计等内容。使用时不需要网络连接,完全离线可用。它会自动从文本中检测开源许可证,并为用户提供有价值的信息,例如代码分发、pending、依赖数量、主要贡献者、占用磁盘大小、创建日期、代码行数等。Onefetch 可以通过命令行参数进行配置,以准确显示您想要的内容和方式:您可以自定义 ASCII/文本格式、禁用信息行、忽略文件和目录、以多种格式输出(Json、Yaml)等等。有需要的朋友们快试试吧。 + +### [网页 ipa 一键砸壳](https://www.dumpapp.com) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS 中所有 APP 上传到 APP Store 后都会被加上一层保护壳,如果我们想拿到 IPA 进行研究分析, 需要对 IPA 进行脱壳。这个平台可以实现导出全网 IPA 进行自动脱壳功能,不过有些功能需要付费才能体验。 + + +## 代码 + +### [AnyCodable](https://github.com/Flight-School/AnyCodable) + +[@Smallfly](https://github.com/iostalks):[AnyCodable](https://github.com/Flight-School/AnyCodable) 对遵循 `Encodable`, `Decodable` 和 `Codable` 协议的 Model 进行包装,抹掉其具体的类型。当需要在不同模块之间传递数据时,可以使用它实现模块对 Model 的解耦。 + + +### [Epoxy - Airbnb 声明式 iOS UI 框架开源啦!](https://mp.weixin.qq.com/s/DQ8avDt3pgMxQcb7p3WkwA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):[仓库地址](https://github.com/airbnb/epoxy-ios) ,一套完整的 Swift 实现的声明式 UI 框架。Airbnb 团队遇到的问题是:更新页面时,会需要手动操作 indexPath 来进行动画刷新,而操作 indexPath 稍有差错就会导致 crash,同时繁复的计算逻辑可读性也较差。可以回忆下即使使用 IGListKit 这样强大框架的 ListDiffPaths 计算 diff 并刷新列表,也依旧较为复杂,更不用说还需要手动控制动画了。 + +因此 Airbnb 团队选择了声明式编程,**描述目标 - 让页面更新至最新内容**。 + +- 一套描述页面渲染内容的语义接口:使用「内容」和「样式」两种类型来描述一个 view,并分别封装在 Content 和 Style 里 +- 搭建能自动更新页面渲染内容的计算框架,使用了 fast O(N) diffing 算法 +- 应用单向数据流,进一步简化数据状态管理,使页面的行为更易理解 + +同时还提供了如 EpoxyLayoutGroups 、EpoxyPresentations 、EpoxyNavigationController 等组件,提供了 UI 层面的完整方案。 + +[英文原文](https://medium.com/airbnb-engineering/introducing-epoxy-for-ios-6bf062be1670) + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#173-2021.08.30.md b/Reports/2021/#173-2021.08.30.md new file mode 100644 index 000000000..9ce5b980b --- /dev/null +++ b/Reports/2021/#173-2021.08.30.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #173 | 2021-08-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) 提出。 + +## 新闻 + +### 🌟 [Apple 与美国开发者就 App Store 更新达成一致,这些更新将支持开发者业务,并持续为用户带来精彩体验](https://www.apple.com.cn/newsroom/2021/08/apple-us-developers-agree-to-app-store-updates/) + +[@Parsifal](https://github.com/ParsifalC):本周我们推送了一则短文 - [IAP 或将不再是唯一支付方式](https://mp.weixin.qq.com/s/vK3ilfP8MqdURooXEDH7kg),文章的主要内容便来自于苹果官方的这则新闻。新闻内容比较多,但最值得我们注意的便是苹果对于 IAP 使用条款的改变。虽然目前并没有明确说明,我们可以直接在应用内使用第三方支付,但从描述上看,苹果已经做出了比较大的改变,从原来不允许引导用户使用其他支付变为了可接受邮件等方式的引导。这些变更起源于美国的开发者群体与苹果的诉讼案,因而所有变更都仍需要那边的法庭最终同意才能正式推行。 + +## 新手推荐 + +### 🌟 [重磅首发|闲鱼构建Flutter企业级应用开发电子书新鲜出炉](https://mp.weixin.qq.com/s/DTLgVwUjfORBY5NCd9C-8g) +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 单看标题相信大家已经知道是什么了,没错,咸鱼团队出品的企业级 Flutter 应用开发指导书籍,本书从深度,广度,以及实用性几个方面着手,切合咸鱼项目的实际经验。对于正在学习和需要进阶的同学来说,可谓是不可多得的好资料,关键还免费 😄 + +## 文章 + +### 🌟 🐕 [How iOS 15 makes your app launch faster](https://www.emergetools.com/blog/posts/iOS15LaunchTime) + +[@Leo](https://github.com/leomobiledeveloper):对于 deployment targe 是 iOS 15 或者 macOS 12 的 App 来说,苹果使用了一种新的二进制格式来存储启动时候需要 bind 和 rebase 的信息。新的格式下 bind 和 rebase 被合并存储在 LC_DYLD_CHAINED_FIXUPS 段,合并后意味着更少的安装包占用,启动时需要的 page fault 也更少,进而提高启动速度。 + +### 🌟 🐕 [Building a token refresh flow with async/await and Swift Concurrency](https://www.donnywals.com/building-a-token-refresh-flow-with-async-await-and-swift-concurrency/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简述了如何使用 async/await 和 Swift Concurrency 构建刷新流,并配有流程图和代码示例,方便大家开启实践思路。 + +- 流程了解 +- **AuthManager** 的实现 +- 网络请求实践 + +### 🌟 🐕 [Flutter 疑难杂症系列:键盘原理及常见问题解决方案](https://mp.weixin.qq.com/s/snU-mNlmEnOUHw3I-DrJ_w) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Flutter 的键盘、输入框在双端的实现,大致都是借助 Native 的输入能力,通过 Channel 在 Flutter 和 Native 侧进行数据的同步。具体到 iOS 上,则是通过 FlutterTextInputPlugin 调用到了 Native 的 FlutterTextInputView 上,再调用 becomeFirstResponder 实现键盘弹出。 + +本文详细介绍了 Flutter 在如何实现:键盘调起之后页面的重绘逻辑、页面收缩动画。同时还列举了一些问题发现以及定位方法,值得细细钻研。其中Android部分机型的问题也有助于我们理解重绘的逻辑,具体如下: + +- 锁屏后键盘无法收回 +- Android 键盘动画卡顿 +- iOS 上搜狗输入法长按发送未换行 +- iOS 光标动画使得 CPU 飙升 +- iOS 上键盘收起之后,光标依旧存在 +- iOS12+ 长按系统输入法空格光标卡顿不灵敏 + +### 🐎 [Why Conditional View Modifiers are a Bad Idea](https://www.objc.io/blog/2021/08/24/conditional-view-modifiers/) +[@zvving](https://github.com/zvving):SwiftUI 中通过自定义视图修饰符(View Modifiers),能复用项目中的的定制视图逻辑,简化 View 声明代码。但是对于条件视图修饰符,并不像看起来那么美好。 + +使用条件视图修饰符(Conditional View Modifiers),初始样式一切正常,但是当条件变化时,动画可能并不符合你的预期,状态值也会在条件变化时莫名消失。这本质与 SwiftUI 中 if-else 内部实现有关:条件变化并非修改视图属性,而是对应的不同视图——在条件变化时移除或插入。文章详细解释这些问题背后的成因,相信能帮助你更好的使用 SwiftUI。 + +### 🐕 [降低 APP 卸载率,测试人员可以做些什么?](https://mp.weixin.qq.com/s/ogiOlV-eXkDFlGEp-pLgMQ) + +[@Smallfly](https://github.com/iostalks):随着移动互联网竞争白热化,各大厂商都希望能多抢占一些用户时间,App 的使用体验就变得越来越重要。对于不满足预期的 App,用户很可能会毫不留情的卸载。 + +闲鱼借鉴了马斯洛人类需求层次结构,从安全性、功能性、稳定性、易用性、愉悦性等五个逐级递增的层次,抽象出 App 用户体验金字塔模型。并介绍了他们在各个层次上做的具体改善措施,分别是: +* 隐私安全是底座 +* 跳出功能测试“陷阱” + * 探索性测试 + * 新用户视角测试 + * Bug Bash +* 重视全链路性能 +* 引入可用性测试 + +### 🐎 [Deprecating Workarounds](https://www.basbroek.nl/deprecating-workarounds) + +[@xiaofei86](https://github.com/xiaofei86):当我们在最新的系统版本遇到 BUG 时,往往直接判断当前版本,并提供将解决方案。这种情况下,如果下一个系统版本仍然存在此问题,就会导致线上 BUG。如果为大于当前版本的系统都应用此解决方案,如果下一个系统版本修复了此问题,那么我们的修复方案也会出现不可预知的情况。 + +本文提供了一个小 Tips 来更好的处理这种问题。我们定义单独的方法来解决此版本的问题,并将此方法标记为在下个版本废弃,这样我们可以在升级后获得一个编译警告提醒,以便于重新判断此问题是否已经被系统修复。如果没有被修复,就继续在下一个版本提醒,如果被修复就改为在特定版本应用。 + +## 摸鱼周报 + +[@摸鱼周报 #24](https://mp.weixin.qq.com/s/vXyD_q5p2WGdoM_YmT-iQg):第二十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:跟一位刚入职某一线大厂的同学聊一下最近的面试感受。 +* Tips:设计 OC 版本的 defer 功能;使用现有证书创建 Fastlane match 格式加密文件。 +* 面试模块:离屏渲染相关知识点。 +* 优秀博客:整理了Swift 闭包相关的文章。 +* 学习资料:介绍两个仓库,一个是大家容易读错的开发词汇汇总,一个是微软出品的物联网课程。 +* 开发工具:一款免费开源的跨平台密码管理工具:KeeWeb。 + +## 代码 + +### [swift-custom-dump](https://github.com/pointfreeco/swift-custom-dump) + +[@Damien](https://github.com/ZengyiMa):swift-custom-dump 库是针对 Swift App 中的数据进行调试、Diff 以及测试功能的工具集合,除此之外还具备了自定义扩展功能,有数据调试需求的同学不妨一试。 + +### [PreviewView](https://github.com/theoriginalbit/PreviewView) + +[@JonyFang](https://github.com/JonyFang):PreviewView 的作用是利用 SwiftUI 预览画布快速制作 UIViewController 和 UIView 原型。有类似需求的同学可以一试~ + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 抖音生活服务(上海/成都)招人,Android / iOS / Server 工程师,我们致力于将用户创建内容与用户兴趣相关业务、生活服务连接,通过生活服务带动抖音用户活跃度提升。 +> +> 简历发送至:fuxiang.666@bytedance.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#174-2021.09.06.md b/Reports/2021/#174-2021.09.06.md new file mode 100644 index 000000000..e149d1285 --- /dev/null +++ b/Reports/2021/#174-2021.09.06.md @@ -0,0 +1,127 @@ +# 老司机 iOS 周报 #174 | 2021-09-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) 提出。 + +## Apple 专家一对一 + +### 🌟 [第二期:探索 iPadOS 技术](https://developer.apple.com/cn/accelerator/) + +[@Parsifal](https://github.com/ParsifalC):苹果官方的一对一咨询活动第二期来啦!2021 年 9 月 14 日(下周二)举办主题为 “探索 iPadOS 技术”的在线研讨会。本次面向周报读者免费公开报名,**扫码即可参与**。独一无二的机会,直接向 Apple 的专家学习,**报名截止日 9 月 10 日,名额有限,报满即止**。 + +![image](https://user-images.githubusercontent.com/7930911/132127482-7eec524e-0fd8-4584-8ee2-ca812586a276.png) + +## 新手推荐 + +### 🐕  [Flutter 里的语法糖解析,知其所然方能潇洒舞剑](https://mp.weixin.qq.com/s/Wi2jJ8KnsSnrV8Dk_eIqDg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):以往大家都是从官方的介绍文档中认识 dart 的中的 关键字 / 语法糖 的,本文通过 [dump_kernel.dart](https://github.com/dart-lang/sdk/blob/master/pkg/vm/bin/dump_kernel.dart) 解析 dill 二进制执行文件,从编译产物的角度分析了 late 、 typedef 、extension 、 async / await 的具体实现。知道现象的你,如果也对下面的问题有所疑惑,在看了生成后函数就能明白底层是如何实现的。 + +- 当我们访问 late 声明的对象时,如果对象还没有初始化,为什么会返回一个异常? +- 使用 typedef 会不会对性能和运行结果产生影响? +- extension 关键字是如何在原对象基础上实现拓展呢? +- 为什么我们在外部对一个 Future 进行 try catch 不能捕获异常? + +想实操反解 dill 文件的同学可以参照这篇[文章](http://gityuan.com/2019/10/05/dart_vm/#25-%E6%9F%A5%E7%9C%8Bkernel%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F) 进行操作。 + +## 文章 + +### 🌟 🐕 [一文读懂字节跳动自研移动研发工具链 MBox](https://mp.weixin.qq.com/s/5_IlQPWnCug_f3SDrnImCw) + +[@Barney](https://github.com/BarneyZhaoooo):瓜神曾参与开发的 **Mbox** 终于开源了,文章从现状与问题开篇,详细介绍了 Mbox 诞生的背后思考、架构设计、核心功能、困难与挑战,给业内开发者带来了很好的参考。 + +### 🐕 [APP 隐私合规](https://mp.weixin.qq.com/s/_RP6EEYfYGJn877tRdXOFA) + +[@AidenRao](https://weibo.com/AidenRao):作者公司的 APP 收到通信管理局,关于 APP 侵害用户权益整治专项行动中核查整改问题的通知。整改要求是 10 天内完成对有问题 APP 的整改,并提交整改情况报告。 + +作者整理了中国网信网关于 APP 违规的认定标准,针对容易出现的违规问题,给出了整改方式建议。 + +### 🐕 [Reverse engineering a 5 year old Xcode issue](https://swiftrocks.com/reverse-engineering-xcode-issue-crash-symbol) + +[@Damien](https://github.com/ZengyiMa):你是否注意到 Xcode 中的 Organizer 中如果不是你本地机器打出的包将无法进行符号解析,作者通过 Hopper 等逆向手段定位到了 DVTAnalytics 框架中的一个 Bug,并且做了对应的修复,好奇是怎么实现的吗?对逆向感兴趣的同学值得一读。 + +### 🐢 [Swift 与 Objective-C 混编时,我们是如何将编译时间优化了 35%?](https://mp.weixin.qq.com/s/9BpfKhT1tQM_gAUNb2mQLg) + +[@Smallfly](https://github.com/iostalks):这篇文章比较长,详细地介绍了 58 同城在 Swift 和 Objective-C 混编过程中,编译速度优化的分析与实践。 + +Swift 和 OC 混编,要实现 Swift 引用 OC 文件,一种方案是添加桥接文件,另一种是采用 Module 化的方式引用,第一种方案有较高的维护成本,58 采用了第二种。 + +然而,在尝试 Module 化之后,整体的编译耗时比非 Module 化增加了,这和苹果官方给出的性能数据是不符的。 + +经过深层次的分析,最终通过 hmap 方案实现了编译耗时优化。对其他 App 的 Module 化有比较好的借鉴意义。 + +### 🐕 [添加编译警告的另一种方式:clang 开发入门](https://juejin.cn/post/7002999613984768031#heading-6) + +[@红纸](https://github.com/nianran):本文是一个 **clang** 插件开发的一个入门开发的实践文章。以检查 if 语句的过度嵌套提示 warning 为目标,对 AST 中 if 节点进行解析,输出 warning。对于没有了解过 clang 插件开发的同学,本文还是比较有意思的文章。 + +### 🐕 [Core Data with CloudKit (一)](https://www.fatbobman.com/posts/coreDataWithCloudKit-1/) + +[@JonyFang](https://github.com/JonyFang):WWDC 2019 Core Data 的更新引入了 `NSPersistentCloudKitContainer`,由此可以便捷的使用 Core Data with CloudKit 来进行多设备数据同步。本篇主要对 Core Data with CloudKit 的基础介绍,内容大概为: + +1. Core Data with CloudKit 的局限性 +2. Core Data with CloudKit 的优点 +3. 简介 Core Data 和 CloudKit +4. Core Data 对象 vs CloudKit 对象、 + +### 🐢 [Flutter Fish Redux 2.0 架构演进实践](https://mp.weixin.qq.com/s/5LUCFZWts9Q0lUNqtocADQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Fish-Redux 作为 Flutter 状态管理工具已经开源已久,也在大量应用和业务中被验证,特别是咸鱼。但随着业务和场景的复杂度不断增长,在有些场景下显得捉襟见肘,无法很好的满足,于是有了此次架构的演进,致力于解决复杂页面编排,动态 AB 问题,以及提升灵活度。 + +## 摸鱼周报 + +[@摸鱼周报 #25](https://mp.weixin.qq.com/s/LLwiEmezRkXHVk66A6GDlQ):第二十五期摸鱼周报来啦,一起来看下本期概要: + +* 话题:本期跟竹立交流一下关于求职和学习方法的话题。 +* Tips:如何清除启动图的缓存;如何优化 SwiftLint 流程。 +* 面试模块:本期解析一道 GCD 死锁题。 +* 优秀博客:整理了 Swift 泛型相关的几篇文章。 +* 学习资料:Adobe 的调色板网站:Adobe Color Wheel;知识小集的 Tips 汇总:Awesome-tips。 +* 开发工具:管理 Github 项目 Star 的工具:OhMyStar。 + +## 代码 + +### [swift-atomics](https://github.com/apple/swift-atomics) + +[@Parsifal](https://github.com/ParsifalC):去年 10 月,Apple 正式推出并开源了 swift-atomics,我们可以通过它使用纯 Swift 代码实现高性能的无锁并发数据结构。而近日,swift-atomics 终于发布了 1.0.0 版本,这也意味着 swift-atomics 有了一个正式的稳定版。 + +延伸: +- [Introducing Swift Atomics](https://swift.org/blog/swift-atomics/),非常详尽的官方介绍文档。 +- [【译】SE-0282 Low-Level Atomic Operations ⚛︎](https://kemchenj.github.io/2020-10-02/):周报编辑四娘翻译了 swift-atomics 的原始 Proposal,有助于更全面的了解它。 + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#175-2021.09.13.md b/Reports/2021/#175-2021.09.13.md new file mode 100644 index 000000000..48a6548f7 --- /dev/null +++ b/Reports/2021/#175-2021.09.13.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #175 | 2021-09-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) 提出。 + +## 新闻 + +### [有消息了,找你的。](https://mp.weixin.qq.com/s/FPml7P1RHTc0QBbFb3TKbg) + +[@Parsifal](https://github.com/ParsifalC):苹果今年的秋季发布会正式官宣将在北京时间 9 月 15 日凌晨 1 点举行,iPhone 13 和 iPad 9 等主要硬件设备有望悉数登场,另外近年来一直传言的 AR & VR 领域也值得期待是否会在这次有所透露~ + +## 新手推荐 + +### 🐕 [灵动的适配器模式 | Flutter 设计模式](https://mp.weixin.qq.com/s/w0msBQnDzkZ4rsL1EtPyVA) + +[@邦Ben](https://weibo.com/linwenbang):本文以 Flutter 的角度来说明了 Adapter 模式的用法,如果是 Android 的同学会对这个模式更为熟悉。文中给出了具体的例子,感兴趣的同学可以一看。 + +## 文章 + +### 🌟 🐕 [iOS 端容器之 WKWebView 那些事](https://mp.weixin.qq.com/s/39u-48KvO-Fmkn9t0nJ-fA) + +[@JonyFang](https://github.com/JonyFang):本文主要总结了阿里在端容器设计开发过程中,WKWebView 使用上遇到的一些经典问题和对应的解决办法,能够为受此类问题困扰的同学提供一些帮助。 + +主要细述了 3 件事情: +- WKWebView 使用中的典型问题有哪些? +- 为什么会出现这些问题? +- 这些问题的解决办法有哪些? + +### 🌟 🐕 [iOS 崩溃日志在线符号化实践](https://mp.weixin.qq.com/s/MIun-eV4_J1hXGDRjGoLaw) + +[@Barney](https://github.com/BarneyZhaoooo):由百度 App 技术出品的崩溃符号化实践,从什么是符号化等最基础的概念入手,深入浅出,详细描述了在线符号化落地的全过程。 + +- 什么是符号化 +- 符号化原理 +- 本地符号化 +- 在线符号化 +- 效果和收益 + +### 🐢 [iOS 符号解析重构之路](https://mp.weixin.qq.com/s/TVRYXhiOXIsMmXZo9GmEVA) + +[@水水](https://www.xuyanlan.com):本文介绍了几种单机解析工具的简单使用,并详细的介绍了字节跳动终端技术的在线符号解析服务的历史方案探索路程,结合最终方案深入的介绍了符号解析原理相关知识。 +读者能够通过此文深入的了解符号解析的原理,也能为正在搭建符号解析平台的读者提供参考。 + +> WWDC 21 内参中的 [iOS 符号化:基础与进阶](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491945&idx=1&sn=0d320492230940db88e34887dee96b76&chksm=eaa17e62ddd6f7747acf2fa6d86a9cf4aaf8e0ba6fd18a9d374b1ffcfbc1ca2e1a65c2cf9cc5&token=1941754559&lang=zh_CN#rd) 一文也值得大家学习。 + +### 🐕 [再探ARC,Autoreleasepool,NSString— —由一场直播 OOM 引发的故事](https://mp.weixin.qq.com/s/oU9DWR4OP8DMp6smMhIxZg) + +我们在日常的开发中,可能不会过多的关注内存的问题,因为 ARC 通常可以帮我们避免 99% 的内存泄漏问题,但是,ARC 毕竟不是万能的,对于剩下的 1% 内存问题,却可能造成很大的影响。快手最近就遇到了一个由 NSString 引发 的OOM 问题,本文详细回顾了问题的原因以及如果定位和解决的。 + +### 🐕 [在 SwiftUI 中使用 UIKit 视图](https://mp.weixin.qq.com/s/QEDd9cIHi3lk0O63fc-ApQ) + +[@zvving](https://github.com/zvving):SwiftUI 组件与细节功能日益完善,而实际项目中,但仍有大量的事情需要基于 UIKit 实现。如何封装 UIKit 组件,使其可以在 SwiftUI 中应用,怎样提供 SwiftUI 风格的调用方式,选择不同方案时又要注意哪些问题?本文从二者生命周期的不同出发,再通过实际代码带你了解 SwiftUI 使用 UIKit 的具体过程。 + +> 来自作者自荐:[@东坡肘子](https://www.fatbobman.com/) + +### 🐕 [一个 JavaScriptCore 框架中对象与 Timer 引发的死锁问题内幕](https://mp.weixin.qq.com/s/ywYj886iVoU3OvcV4pAC6g) + +[@Smallfly](https://github.com/iostalks):本文来自快手大前端团队,介绍了一个 Main Thread 与 JSC Heap Collector Thread 互相等待发生的死锁问题,并分享了相应的解决方案。其中详细的描述分析、验证、解决问题的过程,有不错的参考价值。 + +### 🐕 [Preventing Data Races Using Actors in Swift](https://swiftsenpai.com/swift/actor-prevent-data-race/) + +[@享耳先森](https://github.com/iblacksun):数据竞争一直是并行编程下的难点,其往往难以检测与解决。本文先介绍了数据竞争的的基础,再介绍 Swift 5.5 引入的 Actor 如何优雅的解决这个问题。 + +### 🐢 [Flutter 多引擎支持 PlatformView 以及线程合并解决方案](https://mp.weixin.qq.com/s/6aW9vbithMWTOJ_PGniQTA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):在多引擎使用 Flutter 时,会遇到一些问题,本文详述了使用 PlatformView 时遇到的问题。解决了 ``普通多引擎``与``轻量化多引擎`` 情况下 Platform Task Runner 与 GPU Task Runner (Raster Task Runner) 合并的问题,并以 PR 的方式合入了 Flutter 主分支。其中对源码的讲解十分有价值,有助于大家理解 engine 层的四大 Task Runner 是如何工作的。 +同时本文还介绍了给 Flutter 提 PR 时的一些步骤与经验。 + +### 🐎 [ARC 下还有 __NSStackBlock__ 吗](https://dengweijun.com/arc-nsstackblock-31c0c1d493974db5bd7f278dd20e223a) + +[@J_Knight_](https://github.com/knightsj):在 ARC 下,block 在赋值给强引用时会被复制到堆上,成为 __NSMallocBlock__ 类型的 block。本文作者结合代码介绍了如何在 ARC 下生成 __NSStackBlock__ 类型的 block 的方法,以及相关的 llvm 相关的在这方面做的优化。 + +## 摸鱼周报 + +[@摸鱼周报 #26](https://mp.weixin.qq.com/s/PnUZLoyKr8i_smi0H-pQgQ):第二十六期摸鱼周报来啦,一起来看下本期概要: + +* 话题:跟熊大聊一下独立开发和音视频开发。 +* Tips:对节流和防抖的再讨论;关于 TestFlight 外部测试的一些介绍。 +* 面试模块:本期解析 KVO 的实现原理。 +* 优秀博客:收录了一些 RxSwift 相关的文章。 +* 学习资料:靛青早期写的 RxSwift 学习教程。 +* 开发工具:公众号文章同步工具 Wechatsync。 + +## 代码 + +### [URLServiceRouter](https://github.com/lightank/URLServiceRouter) + +[@EyreFree](https://github.com/EyreFree):URLServiceRouter 是一个用 Swift 语言开发的基于 URL 的路由分发库,由一个高自由度的 nodeTree 和 RPC 来实现,可使开发者在 App 中很方便地实现诸如测试环境和生产环境切换之类的工作。 + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#176-2021.09.27.md b/Reports/2021/#176-2021.09.27.md new file mode 100644 index 000000000..de17600de --- /dev/null +++ b/Reports/2021/#176-2021.09.27.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #176 | 2021-09-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) 提出。 + +## 🌟 通知 + +[@Parsifal](https://github.com/ParsifalC):国庆长假即将到来,周报也将进入短暂休刊,**下一期发布时间将会是 10.18 号**,提前祝大家长假愉快~ + +## 新闻 + +### 🌟 得物技术 iOS 专场线下沙龙一期圆满结束 + +[@Parsifal](https://github.com/ParsifalC):9.25 日上周六,我们在上海与得物技术一起联合主办了 iOS 专场沙龙活动。我们邀请到了 4 位嘉宾前来分享。他们分别来自于得物技术、字节跳动和阿里巴巴团队,主题涵盖 《得物 iOS 工程演进之路》、《字节跳动自研移动研发工具链 MBox》、《视频特效揭秘》和《基于 MNN 的移动端人工智能实践》。大家的参与热情远超我们预期,甚至现场还临时开了一个分会场,感谢所有人的支持~**活动相关的 PPT 和视频等资料我们正在整理之中,一切就绪之后便会在周报公众号及时发布。** + +### 🌟 [Back-deploy concurrency 已合并在 Swift 5.5 Release](https://github.com/apple/swift/pull/39342) + +[@Parsifal](https://github.com/ParsifalC):Swift Concurrency 的向后兼容的提案已于近日被 merge 进 Swift 5.5 的发布分支中,这就意味着 Concurrency 特性并不是 iOS 15 独有了,我们最低可在 iOS 13 中使用该特性。各平台最低支持版本为 macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0。值得一提的是,微信目前最低支持 iOS 11,按目前迭代速度最迟 23 年,将很可能提到 iOS 13+。 + +> 由 [LeeCenY](https://github.com/LeeCenY) 推荐收录 + +### [Flutter 2.5 版本发布](https://medium.com/flutter/whats-new-in-flutter-2-5-6f080c3f3dc) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 官方 9 月 9 日正式发布了 2.5 版本,本次版本关闭了 4600 多个 issues,同时包含了诸多性能和工具上的优化,当然也有一些组件及插件上的更新: + +- 性能优化 + - 光栅化提升,时间缩减了 2/3 + - UI isolate 事件循环策略优化,帧处理现在优先于处理其他异步事件 + - GC 提升,使得未被使用图像内存能被及时回收 + - 消息通道性能提升 50% + - Flutter 构建适配 Apple Silicon M1 + - Dart 2.14, 新的语言格式化和特性,以及 lint + +- Widget 更新 + - Android 全屏模式适配 + - Float Action 更新 + - ListView 底部和滚动条优化 + - ScrollMetricNotification + - Android 设备上相机使用增强 + +- DevTools + - 事件追踪能力增强 + - 卡顿诊断加强 + - CPU Flame 增强 + - Widget Inspector 组件信息更加详细 + +### [App Store 现已开放 iOS 15 和 iPadOS 15 app 提交](https://developer.apple.com/cn/news/?id=f87q5n2j) + +[@Parsifal](https://github.com/ParsifalC):9 月 14 日起 App Store Connect 已经开放 iOS 15 和 iPadOS 15 App 的提交,同时苹果宣布自 2022 年 4 月起,所有提交至 App Store 的 iOS 和 iPadOS app 都必须使用 Xcode 13 和 iOS 15 SDK 构建。 + +## 文章 + +### 🌟 🐢 [Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述](https://mp.weixin.qq.com/s/UaQUkdTboYGU0_VYiAooVw) +[@Kyo](https://github.com/KyoLi):许多人期待已久的支付宝动态化方案 `Cube` 终于公开了,相比较于 Weex 或者 Flutter 这些跨平台方案,`Cube` 更加轻量级一些,尤其在首页卡片这类应用场景下非常适用。实际上,笔者个人也认为,在很多业务场景,这种自研的轻量跨平台动态化方案,其实是更好的选择,可以在技术上更加自主可控。本文是系列文章的第一篇,从项目背景、整体架构、应用场景上做了说明,期待后续的文章。 + +### 🌟 🐢 [企业微信超大型工程-跨全平台UI框架最佳实践](https://mp.weixin.qq.com/s/JdQmgQ57nWQM99JW_ueFVg) +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):企业微信这次给我们带来了他们在 Flutter 跨平台方面的深度探索。企业微信自身的特点是大量业务逻辑已经抽离为 C++ 的跨平台模块,但各端的 UI 依然还是独立的代码与框架,因此他们对 Flutter 的诉求上定位相当的清晰,那就是“跨平台的UI渲染”。本文重点从,native 与 Flutter 的混合栈开发模式,到单引擎/多引擎的复杂交互实现。从 Flutter 与 native 与 c++ 的通信通道建设,到 Flutter 的性能与体验优化。同时还展现了企业微信庞大的 Flutter 一系列开发提效工具链,非常的实用也非常的强大。最后文章末尾稍微提了一些他们在 Flutter 动态化方面的探索,只是写的非常浅,而且也是基于别的 DSL/Layout 框架,本质上已经脱离了 Flutter 这个整体框架,单独借用其渲染模块,对 Flutter 动态化有兴趣的读者,更推荐深入去了解他们在文中提到的另外 2 种具体框架的动态化实践 + +### 🐕 [Xcode 13 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes) + +[@Smallfly](https://github.com/iostalks):本周 Xcode 13 正式版发布,包含 iOS 15,iPadOS 15,tvOS 15,watchOS 8 以及 macOS Big Sur 11.3 SDK。Xcode 13 需在 macOS 11.3 及以上版本运行,支持 iOS 9,tvOS 9,watchOS 2 及以上系统设备调试。 + +本次更新包含 Swift、Clang、Linking 等二十几个模块的新特性,建议阅读原文了解全貌。 + +> 另外特别说明一下,Xcode 13 正式支持了 Vim,Vim 党奔走相告。 + +### 🐕 [The difference between Thread.sleep() and Task.sleep()](https://trycombine.com/posts/thread-task-sleep/) + +[@anotheren](https://github.com/anotheren):线程的休眠与任务的休眠,正如它们名字的字面意思。`Thread.sleep()` 是一个旧方法,来自 `Foundation`,它会在指定的时间内卡住线程(CPU无法响应其他工作);`Task.sleep()` 是全新的 async 方法,来自 `Swift Concurrency`,它只会让当前的 Task 暂停/休眠指定时间,而不是阻止线程,CPU 可以继续其他任务。更详细的对比与案例,请阅读原文。 + +### 🐕 [Linting vs Formatting: A Swift Guide Part 1](https://jasonzurita.com/linting-and-formatting-swift-part-1/) [Part 2](https://jasonzurita.com/linting-and-formatting-swift-part-2/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Part 1 对 Linting 与 Formatting 的概念进行了明确,举个例子:Linting 包含 检查函数的圈复杂度、强制拆包等,Formatting 包含 code style 等。Part 2 推荐了一些工具如 [tailor](https://github.com/sleekbyte/tailor)、 [SwiftLint](https://github.com/realm/SwiftLint) 等,并介绍了这些工具在 PR 或 CI 中的最佳实践。 + +### 🐕 [关于 Swift Package Manager 的一些经验分享](https://mp.weixin.qq.com/s/s2GZ13PVdVa5t-SABArtdA) + +[@四娘](https://kemchenj.github.io/):这是一篇来自字节跳动团队的 SPM 经验分享,介绍了 SPM 基本的使用方式,团队内部的实践经验,常见问题以及与 Cocoapods 的对比。 + +### 🚧🐕 [迁往 Swift 5.5 Concurrency 之路:重构方式的选择](https://imtx.me/blog/migrate-to-swift-5-5-concurrency-choices-of-refactor-method/) + +[@极速男孩](https://github.com/ztlyyznf001/):苹果在 Swift 5.5 中加入了 Concurrency 的支持,最早在 iOS 15 上支持,但是最近苹果完成了 Back-Deploy 的开发支持 iOS 13 以上的系统。本文主要介绍了如何用 Xcode 中的 Refactor 工具将你的老的回调方法迁移到 async await 方法中去。 + +### 🐕 [Alibaba iOS 工程架构腐化治理实践](https://mp.weixin.qq.com/s/gS9yC4HUWxi0vkjQPdo5tw) + +[@红纸](https://github.com/nianran):本文为作者在工程架构上的腐化治理实践,其主要问题是初期没有明确的项目规范导致工程环境混杂,出现一系列的蝴蝶效应:头文件都添加到了 search path -> import 没规范 -> 模块依赖没有补全 -> 循环依赖,模块强耦合 -> 子项目没办法打包 -> Swift 没办法进行。 + +面对这样一个混杂的工程环境,作者从依赖树开始着手分析,四象限分层治理模块和依赖。利用自动化脚本,分析模块依赖关系、补全模块间依赖、自动生成 umbrella 头文件、修改不规范头文件等等来对腐化的工程进行整治。光治理还不够,为了防止项目继续腐化,在构建流水线末端设置构建卡口,设置规则防止不合规的代码继续产生。 + +### 🐎 [你真的了解符号化么?](https://mp.weixin.qq.com/s/6Odq8JTYXL0bA8xyWEO1Og) + +[@Jimq](https://github.com/waz0820):周报第 175 期推介了两篇关于符号化的文章,分别来自字节和百度,本篇文章来自搜狐,可以对照着一起看。字节文侧重于符号化的在线解析,针对在 Linux 服务器上规模化部署的痛点,对最终方案的实现原理、解析流程中每个节点的具体实现进行了深入讲解。百度文本地符号化与线上符号化并重,内容比较全面。本文侧重于 macOS 上的本地符号化,详细列举了相关参数、流程和工具,更加规整实用,方便开发者个人快速上手及日后查阅。 + +## 摸鱼周报 + +[@摸鱼周报 #27](https://mp.weixin.qq.com/s/WvctY6OG1joJez2g6owroA):第二十七期摸鱼周报来啦,一起来看下本期概要: + +* 访谈内容:跟 RunsCode 聊聊编程和兴趣爱好,以及如何在 1min 之内复原魔方😏。 +* Tips:iOS 识别虚拟定位调研;使用 App Store Connect API Key 解决 Fastlane 双重验证问题。 +* 面试模块:KVC 取值和赋值过程的工作原理。 +* 优秀博客:关于 Combine 的相关文章推荐。 +* 学习资料:阮一峰最新发布的 C 语言入门教程,GitHub 漫游指南。 +* 开发工具:Xcode 工程管理工具 XcodeProjects。 + +## 代码 + +### [ScriptWidget](https://github.com/everettjf/ScriptWidget) + +[@JonyFang](https://github.com/JonyFang):ScriptWidget 开源了,使用 React JSX 样式的代码产生 iOS 上的小组件,repo 目前仅支持了 iOS,也是 SwiftUI 动态化生成界面的雏形。 + +## 赞助者 + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#177-2021.10.18.md b/Reports/2021/#177-2021.10.18.md new file mode 100644 index 000000000..1ee9530dc --- /dev/null +++ b/Reports/2021/#177-2021.10.18.md @@ -0,0 +1,132 @@ +# 老司机 iOS 周报 #177 | 2021-10-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) 提出。 + +## 新闻 + +### 🌟 [王炸候场中,19 号等你来。](https://mp.weixin.qq.com/s/5k9_up9CdWHVF5J8zzKSHg) + +[@Parsifal](https://github.com/ParsifalC):北京时间 10 月 19 日凌晨 1 点,也就是明天凌晨,苹果将举办新一期的硬件发布会。市场预期苹果将会发布 M1X 的 MacBook Pro,考虑换代的朋友们可以准备起来了~ + +## 新手推荐 + +### 🐕 [从《虾票票》带你入门 iOS 系列](https://mp.weixin.qq.com/s/lj1zYvVitD6v7z0gjl13qg) + +[@享耳先森](https://github.com/iblacksun):这是 [Bo2SS](https://bo2ss.ml) 在公众号连载的系列文章,适合想从零入门 iOS 的同学,建议和 Apple 的教程一起阅读,目前连载到第四篇: +- [从《虾票票》带你入门 iOS(1)—— 定位与目标](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484201&idx=1&sn=bbc328b36d7bcd5737d6508dcc2a03b2&chksm=cedca8aef9ab21b8bb10a5cc04e349c58b257e6a24886255c19373dac7265bd0dc7356f82636&scene=178&cur_album_id=1755942094336000006#rd) +- [从《虾票票》带你入门 iOS(2)—— iOS 简史与工程创建](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484230&idx=1&sn=5570b91784500b2da61e7779d095a302&chksm=cedca8c1f9ab21d72ed3368e9613e25a385ae37ff1840834f6ef5ddd24caeff4ffb2700ff153&scene=178&cur_album_id=1755942094336000006#rd) +- [从《虾票票》带你入门 iOS(3)—— iOS 常用 UI 组件](https://mp.weixin.qq.com/s/lj1zYvVitD6v7z0gjl13qg) +- [从《虾票票》带你入门 iOS(4)—— 调试](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484371&idx=1&sn=2f1e8cb8f074114ed548f4da3bc9f77d&chksm=cedca854f9ab2142ad67c2a76ab2774fb26f6fbf14bddedaef093eff753016983b84022de47c&scene=178&cur_album_id=2056906778021298177#rd) + +> 自荐人 [Bo2SS](https://bo2ss.ml) + +## 文章 + +### 🌟 🐢 [Telegram-iOS 源码导读](https://hubo.dev/2020-05-07-source-code-walkthrough-of-telegram-ios-part-1/) + +[@AidenRao](https://weibo.com/AidenRao):Telegram 是市场上最受欢迎的即时通讯工具之一,其 MAU 已突破 5 亿。大多数 Telegram 客户端应用程序都是开源的,以证明其安全性,这是一系列关于 Telegram-iOS 源码的文章。 + +该代码库展示了它对其他 iOS 工程师,会遇到的许多实际工程问题的解决方案。例如可靠的网络、安全存储、复杂的列表 UI、对系统控制器的自定义等。 + +基础: +[Telegram-iOS: Part 1](https://hubo.dev/2020-05-07-source-code-walkthrough-of-telegram-ios-part-1/),[Telegram-iOS: Part 2](https://hubo.dev/2020-05-11-source-code-walkthrough-of-telegram-ios-part-2/),[Telegram-iOS: Part 3](https://hubo.dev/2020-05-15-source-code-walkthrough-of-telegram-ios-part-3/) + +协议: +[Telegram-iOS Part 4: MTProto Connections](https://hubo.dev/2020-06-05-source-code-walkthrough-of-telegram-ios-part-4/) + +UI 架构: +[Telegram-iOS Part 5: AsyncDisplayKit](https://hubo.dev/2020-06-14-source-code-walkthrough-of-telegram-ios-part-5/),[Telegram-iOS Part 6: Bubbles](https://hubo.dev/2020-06-22-source-code-walkthrough-of-telegram-ios-part-6/) + +内容消费: +[Telegram-iOS Part-7: Link Preview and Instant View](https://hubo.dev/2020-07-12-source-code-walkthrough-of-telegram-ios-part-7/) + +> 由 [0x1306a94](https://github.com/0x1306a94) 推荐收录 + +### 🌟 🐕 [AttributedString——不仅仅让文字更漂亮](https://mp.weixin.qq.com/s/4P8hX7WoBUeUtvBOS4Tx7g) + +[@Barney](https://github.com/BarneyZhaoooo):本文从四个方面介绍了 WWDC 2021 上公布的新功能 AttributedString。 + +- **AttributedString vs NSAttributedString** 对比 +- **基础用法** +- **本地化** +- **Markdown 解析** + +### 🐎 [Swift-DocC is Now Open Source](https://swift.org/blog/swift-docc/) +[@Smallfly](https://github.com/iostalks):WWDC21 苹果发布了一款新的 Swift 文档编译器 Swift-DocC,它能更高效的把代码注释生成文档,以及为代码库生成综合性的在线文档。它的文档 API 支持 Markdown 格式的注释和长文,甚至能够集成图片。 + +Swift-DocC 被集成在 Xcode 13 的工具链中,帮助用户在代码中写出更详细的文档。现在苹果宣布 Swift-DocC 正式开源了,阅读原文可了解更多特性和用法。 + +### 🐎 [Apple documentation | canOpenURL:](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc) + +[@J_Knight_](https://github.com/knightsj):来自苹果官方文档:在 iOS 15后,限制了 LSApplicationQueriesSchemes 数量最多为50个。详情可以见文档中的内容。 + +> 推荐阅读:[LSApplicationQueriesSchemes](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/plist/info/LSApplicationQueriesSchemes) + +### 🐕 [The Mysterious CodableWithConfiguration Protocol](https://www.andyibanez.com/posts/the-mysterious-codablewithconfiguration-protocol/) + +[@xiaofei86](https://github.com/xiaofei86):每年苹果都会在 WWDC 为我们带来许多新的 API,但那些不是 “big things” 的更新并不会在 Session 中提及。本篇文章将为你介绍一个有趣新接口 —— CodableWithConfiguration。 + +如果你已经知道如何使用 Codable,那么你可以非常快速地开始使用这个新的 API。CodableWithConfiguration 允许你做与普通 Codable 完全相同的事情 —— 对来自不同格式的对象进行序列化,例如 JSON。 + +但 CodableWithConfiguration 允许我们将自定义的配置对象注入可编码类型的编解码过程。你可以根据配置灵活地控制编解码过程,例如:有选择地解码或编码一些键,或者转换它们。这打开了一个充满可能性和更整洁代码的世界,阅读原文了解更多的使用场景。 + +### 🐎 [Faster Builds with Code Signing Hacks](https://eisel.me/signing) + +[@老峰](https://github.com/gesantung):Code Sign 是为数不多的增量构建与 Clean 构建所需的时间一样的耗时操作之一,而且应用程序的规模越大,需要的时间也越长。本文介绍了在 Debug 环境下通过配置签名算法、签名规则等技巧,加快 Code Sign 速度,提升构建效率的轻量方案。 + +## 摸鱼周报 + +[@摸鱼周报 #29](https://mp.weixin.qq.com/s/TVBQgYuycelGBwTaCSfmxQ):第二十九期摸鱼周报来啦,一起来看下本期概要: + +* Tips:关于低电量模式的一些介绍。 +* 面试模块:Objective-C 的消息机制(下)。 +* 优秀博客:整理了几篇 Swift Tips 的文章。 +* 学习资料:gitmoji:一个 GitHub 提交信息的 emoji 指南😎。 +* 开发工具:能够使用 Swift 开发安卓应用的工具:SCADE;可视化解析 `.ndjson` 文件的工具:Privacy-Insight。 + +本期访谈内容独立成篇了,介绍一位拿下微软 iOS 岗位 Offer 的朋友准备和面试的经历,完整内容可以查看:[人物访谈--微软Offer之路](https://mp.weixin.qq.com/s/nh9Rr7lFMy49bEUMWQO3-g) + +## 工具 + +### [tuist](https://tuist.io) + +[@红纸](https://github.com/ninaran):Tuist 是一个命令行工具,其旨在 Xcode 项目的生成、维护和交互。其采用了清单格式来描述项目(使用 Swift 编写),可以彻底解决 xcode 项目文件的代码冲突问题。支持 Cocoapods、Carthage、SPM。 + +## 代码 + +### [swift-markdown](https://github.com/apple/swift-markdown) + +[@Parsifal](https://github.com/ParsifalC):苹果官方开源的 Markdown 工具,基于 Swift 编写,参考的是 GitHub 风格解析器。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#178-2021.10.25.md b/Reports/2021/#178-2021.10.25.md new file mode 100644 index 000000000..6e4dea057 --- /dev/null +++ b/Reports/2021/#178-2021.10.25.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #178 | 2021-10-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) 提出。 + +## 新闻 + +### 🌟 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/) + +[@老峰](https://github.com/Gesantung):苹果上周宣布启动开发者参与的全新在线系列演讲 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/),包括 100 多场直播和超过 1500 小时的会谈时间,将在接下来的 8 周内展开。Tech Talks 将使开发者们有机会直接与 Apple 专家交流,深入了解新技术、解决疑难杂症以及相关指南与工具的理解,同时也包括分享他们在开发 App 与在 App Store 分发 App 的经验。[Tech Talks 2021](https://developer.apple.com/cn/tech-talks/) 面向 Apple 开发者计划和 Apple 开发者企业计划的现有成员开放,报名已开启,每两周会发布新演讲与会谈时间预约。关于日程和报名的信息,可访问 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/),感兴趣的 iOSer 快去报名吧~ + +## 文章 + +### 🌟 🐕 [Flutter 难点问题之 GPU 后台 Crash](https://mp.weixin.qq.com/s/KVux8rYCPXcvDODUskinBQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了后台访问 GPU 导致 App 后台被杀的修复方案。通过在主线程接收 App 退到后台的通知(退到后台即表示 GPU 不可用),并设置一个 bool 变量,在实际渲染的线程中根据 bool 变量,来进行分支处理:GPU 可用时照常使用 GPU 渲染;GPU 不可用时降级用 CPU 渲染。一般使用 SyncSwitch 时,语义都带 ``GpuDisabled`` ,因此 SetIfTrue 中才是 CPU 渲染的降级调用。 + +同时本文还介绍了通过 ``xxx_impl.h`` 来暴露方法,既免去了解决过多头文件的担心,也得以使改动通过单元测试。 + +### 🌟 🐕 [探究 iOS 编码对包大小的影响](https://juejin.cn/post/7015861914370736136) + +[@JonyFang](https://github.com/JonyFang):文中以分析属性为例子,从二进制文件层来分析编码对包大小的影响。介绍了属性、方法调用、函数调用、direct 方法调用、block 调用在汇编下的区别,能让我们对编写的代码在汇编时的表现有大概的认知。推荐阅读~ + +### 🐎 [MetalKit.org 总结:What’s new in Metal at WWDC21](https://metalkit.org/2021/06/18/whats-new-in-metal-at-wwdc21/) + +[@莲叔](https://github.com/aaaron7):WWDC2021 Apple 发布了一系列激动人心的新的 Metal Feature。本篇文章的作者从用 Metal 来实现光线跟踪的各个环节的关键技术为例,说明了一系列新的 API 的使用场景和作用,比如 intersection query、Bindless 等新的 API 机制,以及 Xcode 针对光线跟踪的调试器,能够可视化算法中的许多关键信息。文章整体比较专业,不太适合新手观看,对于图形图像有开发经验的同学可以研究一下。 + +### 🐎 [macOS 上 Flutter Desktop 与 Electron 的性能对比](https://mp.weixin.qq.com/s/uTHi8SfCvXJfbie1A1YNVA) + +[@Damien](https://github.com/ZengyiMa):Electron 和 Flutter Desktop 是当下最流行的 2 种跨端方案,本文分别从应用大小、运行效率、渲染机制、内存、帧数、CPU/GPU 等方面做了详细的对比。对 2 者的比较感兴趣的同学不妨一读。 + +### 🐕 [微信终端自研 C++ 协程框架的设计与实现](https://mp.weixin.qq.com/s/c17DaD7JbKlDFT6J8haEFw) + +[@老驴](https://weibo.com/u/6090610445):微信客户端团队自研了一套跨平台 C++ 协程框架:owl(然而还没有开源)。文中微信团队解释了为什么需要重复造轮子,以及在设计过程中对语法,堆栈,调度,并发的一些思考。文章中干货不少,适合开发底层框架的同学阅读学习。(还是催一下,啥时候开源哈) + +### 🐕 [干货:探秘 WKWebView](https://mp.weixin.qq.com/s/l9D4V0ON3uJ0HfsJ7bpJiQ) + +[@享耳先森](https://github.com/iblacksun):讲 `WKWebView` 应用的文章之前推过不少,这篇算是最全的了,基本包含了使用层的方方面面,特别是缓存及 `Cookie` 机制,建议阅读。 + +### 🐢 [SwiftUI by Example](https://jaywcjlove.gitee.io/swiftui-example/) + +[@kemchenj](https://kemchenj.github.io/):SwiftUI 示例,技巧和技术集合,可以帮助我们构建应用程序,解决常见问题以及了解 SwiftUI 的实际工作方式。 + +这个网站翻译自 [hackingwithswift.com](https://www.hackingwithswift.com/quick-start/swiftui),内容所有实例都是在 macOS Big Sur 系统上运行,基于 Xcode 12.4 开发。 + +> 由 [lijianfeigeek](https://github.com/lijianfeigeek) 推荐收录。 + +## 摸鱼周报 + +[@摸鱼周报 #30](https://mp.weixin.qq.com/s/KNyIcOKGfY5Ok-oSQqLs6w):不知不觉已经到第三十期摸鱼周报了,来看下这期内容概要: + +* Tips:分享 WKWebView 几个不常用的特性。 +* 面试模块:一道 Tagged Pointer 相关题目。 +* 优秀博客:本期博客整理了 Codable 在一些特殊场景的处理方式,Swift 处理 JSON 解析时的一些技术细节。 +* 学习资料:Xcode Build Settings 的参数说明网站;来自 Microsoft 的 Data Science 基础课程。 +* 开发工具:免费且开源的 Coding 时间追踪工具:wakapi。 + +本期访谈对象是一位学习能力很强的在校生,可以通过这篇文章对他进行一定的了解:[人物访谈|一位在校生的 iOS 之路](https://mp.weixin.qq.com/s/9Z7-8trqc7MmIlrjHqbtsA) + +## 代码 + +### [Apple Store 库存监控助手](https://github.com/Sunnyyoung/AppleReserver) + +[@anotheren](https://github.com/anotheren):今年没有抢到 iPhone 13 Pro 首发,并决定等到双十一的同学可能有点郁闷,不仅价格没啥变化,库存还异常紧张。如果你的城市有 Apple Store,那么预约线下取货也是快速拿到新手机的靠谱方式。这是一个线下门店放货监控的脚本工具,同时工具本身也使用 Swift 编写,同样是个学习的案例。 + +### 🐢 [Dflat: Structured Data Store for Mobile](https://github.com/liuliu/dflat) + +[@zvving](https://github.com/zvving):对于复杂应用,结构化数据的持久存储一直是值得反复讨论的命题。CoreData、Realm、WCDB、FMDB 各自有不同的设计权衡和适用场景,Dflat 这个崭新的库尝试带来一些不同的思考与探索: + +- 使用 Swift 从头开始构建,充分利用语言定义类型(Struct、Enum 等),提供带有类型检查的查询、Combine 订阅等现代特性,更适合单向数据流的编程模型 +- 数据获取均为不可变数据类型,对并发/同步编程、数据传递有着良好的支持,支持 多写/多读 or 单写/多读 模式 +- 引入 [FlatBuffers](https://halfrost.com/flatbuffers_schema/) 生成 Swift 模型代码(with [Bazel](https://bazel.build/)),方案在序列化、内存占用等方面有明显优势,常规应用场景的性能对比也[明显优于](https://dflat.io/benchmark/)传统 DB 方案 +- 存储方案目前基于 SQLite,设计上兼容切换不同存储方案 + +项目虽在早期阶段,文档规划清晰,非常值得提前了解学习:[官方文档](https://dflat.io/)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#179-2021.11.01.md b/Reports/2021/#179-2021.11.01.md new file mode 100644 index 000000000..440579957 --- /dev/null +++ b/Reports/2021/#179-2021.11.01.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #179 | 2021-11-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) 提出。 + +## 新闻 + +### [App 内活动正式开放](https://developer.apple.com/cn/news/?id=zghdvfza) + +[@Parsifal](https://github.com/ParsifalC):WWDC 21 中提到的 App 内活动于 10 月 27 日正式开放了。需要注意的是,要开始相关操作,**帐户持有人需要在 App Store Connect 里加入新版 App Store 提交体验**。您将能够体验更多功能,包括在一次提交中包含多至 10 个活动、**不使用新的 App 版本即可提交活动**等。创建活动后,App Store 中进入对应 App 的主页后就会弹出该活动卡片,并允许分享至社交平台,后续苹果也会继续迭代优化 App 内活动的运营数据等功能。 + +### [TestFlight 公开链接名额管理策略调整](https://developer.apple.com/cn/testflight/) + +[@Parsifal](https://github.com/ParsifalC):TestFlight 是苹果官方提供的内测平台,苹果也一直在优化它的使用体验。最近一次比较大的更新或许是 2019 年推出的公开链接,也自那个时候开始,国内也越来越多的厂家采用了 TestFlight 进行内测。按照 TestFlight 的使用文档,开发者可以通过公开链接提供 10000 个名额给内测用户。以往在实际使用中,部分开发者都会通过删除已经接受邀请的用户来释放名额,从而突破 10000 额度的限制。但最近,苹果似乎调整了这一策略。经过测试,目前单个 App 的 10000 个额度将会锁定在 90 日以内不变,也就是说不管是通过新建测试组、更新 build,还是通过删除已邀请用户或手动过期 build 等等这些方式,均不能释放 10000 以内的名额。 + +## 文章 + +### 🌟 🐕 [iOS 性能检测新方式 - AnimationHitches](https://mp.weixin.qq.com/s/SQgxvBztLQFZ6QV43iN2Vg) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍了 RenderLoop 及新的一帧展现给用户的整个流程。着眼于什么是卡顿,及它的两种类型:提交卡顿和渲染卡顿,最终定义了卡顿时间比,用以测量当前 App 的卡顿程度和性能。本篇可以带着读者对整个渲染循环和卡顿类型有更清晰的认识,日常编码中也可以尽量避免这些问题。 + +### 🌟 🐕 [58 同城 iOS 混编项目无用代码检测方案介绍](https://mp.weixin.qq.com/s/RU8jhQJ_LSFEJcZX3bXmLg) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了混编项目无用代码检测在 58 的实践步骤和心得,已开源。 + +- **混编项目无用代码检测的几种手段** +* OC 和 Swift 各自的实现 +- 遇到的困难 + +### 🐎 [苹果官方 “隐私洞见” 来了](https://mp.weixin.qq.com/s/jo9sb2AfrnzZWpDDuqJnCw) + +[@Smallfly](https://github.com/iostalks):苹果在 iOS 15.2 测试版中引入了应用隐私报告,旨在向用户提供已开启隐私权限的应用被获取敏感信息的频率。其中包括位置、联系人、相机、麦克风和照片等信息。 + +Apple 还会记录应用程序在后台访问了哪些域名,这个功能可以说让偷窥应用无处遁形。 + +通过如下方式可以启用隐私报告: +* 打开 **设置** 应用程序 +* 进入 **隐私** 页面,滑到底部 +* 点击 **应用隐私报** 告,打开「应用隐私报告」页面 +* 点击 **打开应用隐私报告** + +### 🐢 🚧 [iOS 隱私與便利的前世今生](https://medium.com/zrealm-ios-dev/ios-隱私與便利的前世今生-9a05f632eba0) + +本文综述性的介绍了从 iOS 7 到 15 Apple 在隐私方面做的持续改进:这些改进背后的原因以及对用户来说有什么好处? + +> 推荐人 [zhgchgli0718](https://github.com/zhgchgli0718) + +### 🐕 [干货 | 携程 APP Native/RN 内嵌 Flutter UI 混合开发实践和探索](https://mp.weixin.qq.com/s/yqChBHJ_QEpjuGYdIJsVzg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):携程当前 Flutter 的使用占比逐步提高,而老页面的技术栈还有 Native 或者 RN,因此做出了混栈的尝试。RN 嵌套 Flutter 的具体实现,其他资料相对较少,方案较为原始,仅供参考。相对于 RN 底层还是原生控件,Native 与 Flutter 交互还有很多细节值得研究。 + +携程团队当前的选择可能基于历史负担,但个人还是不推荐同时维护三种技术栈,新项目选型更是不可取:内存问题与开发成本都将逐步不可控。可以观察携程团队的后续的取舍。 + +### 🐕 [【译】 Flutter 延迟加载组件 【包体积优化 | 动态化】](https://juejin.cn/post/6970870114316976142) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 2.2 带来了很多新的功能,其中就有一个大家期待已久的功能: 按需加载「Deferred Components」。 这一特性可以让我们将 Flutter 产物拆分为多个组件,并在需要时再进行下载。 借助于这一特性,官方 Gallery 演示程序安装时的大小压缩了 46% (200KB 的代码和 43MB 的资源减少)本文向大家介绍,如何使用延迟加载功能。遗憾的是,该功能只能在 Android 平台使用,iOS 上不可用 😄。 + +## 摸鱼周报 + +[@摸鱼周报 #31](https://mp.weixin.qq.com/s/DQpsOw90UsRg6A5WDyT_pg):第三十一期周报来啦,从本期开始周报里面会尝试加入一些 Apple 最近公布的相关活动介绍。 + +* 本期话题:关于 In-App Events 的一些介绍。 +* Tips:优化 Xcode 增量编译的几个小技巧。 +* 面试模块:一道 RunLoop 相关题目。 +* 优秀博客:本期博客主题是 Swift 的高级中间语言:SIL。 +* 学习资料:raywenderlich 新出的 Flutter 教程;一份认知者偏差手册。 +* 开发工具:一个终端命令补全工具:fig。 + +## 工具 + +### [Aquarius](https://github.com/CrazyFanFan/Aquarius/blob/master/README_CN.md) + +[@红纸](https://github.com/nianran): Aquarius 是一个解析 Podfile.lock 的 GUI 工具,输出相比于 [cocoapods-graph](https://github.com/erickjung/cocoapods-graph) 的图输出更加友好(依赖数量、依赖关系等),其使用 SwiftUI 进行编写,开发者可以定制自己的各种需求~ + +> 推荐人:[lijianfeigeek](https://github.com/lijianfeigeek) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#180-2021.11.08.md b/Reports/2021/#180-2021.11.08.md new file mode 100644 index 000000000..d637de599 --- /dev/null +++ b/Reports/2021/#180-2021.11.08.md @@ -0,0 +1,123 @@ +# 老司机 iOS 周报 #180 | 2021-11-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) 提出。 + +## 新闻 + +### [macOS 版 TestFlight 正式发布](https://developer.apple.com/cn/news/?id=0bemba6j) + +[@Parsifal](https://github.com/ParsifalC):TestFlight 正式支持 macOS 应用 分发了,规则总体与 iOS 版 TestFlight 差不多,总共 10000 个测试名额,支持分组等功能。另外,由于 Mac Catalyst 的存在,在 macOS 的 TestFlight 上体验 iOS App 的或许也会是一项新的分发尝试方向。 + +## 新手推荐 + +### 🌟 🐕 [GitHub - twostraws/Unwrap: Learn Swift interactively on your iPhone.](https://github.com/twostraws/Unwrap) + +[@Barney](https://github.com/BarneyZhaoooo):Unwrap 是一款开源的 Swift 应用程序,可以通过 100 节核心课程,或是运行代码进行实践,来更高效快速的学习 Swift。 + +### 🐕 [Xcode 中代码注释编写小技巧](https://juejin.cn/post/7020590213361565726) + +[@老峰](https://github.com/gesantung):写好注释是每一个程序员的一个基本素养,本文介绍了使用 Xcode 为 Objective-C&Swift 代码添加以及修改注释的小技巧。 + +## 文章 + +### [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/TdTGK21S-Yd3aD-yZDoYyQ) + +[@邦Ben](https://weibo.com/linwenbang):看这篇之前可以先看下[闲鱼Flutter图片框架架构演进(超详细)](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247485142&idx=1&sn=b416f1d0c8f3fd2077075441154df090&scene=21#wechat_redirect),了解一下闲鱼之前对图片的一些优化,逐步递进更容易理解,闲鱼在基于原有的外接纹理优化的前提,继续尝试了 dart:ffi 的方式进行优化(dart:ffi 提供了同步调用 native c++ 层的能力,因为是直接调用,因此性能高于常规的 channel 调用),闲鱼通过外接纹理和 ffi 组合使用的方式,进一步优化了: + +- 支持加载 ui.image,特殊场景可以使用 +- 支持预加载 +- 新增纹理缓存,统一图片缓存 +- 支持模拟器 +- 完善自定义图片类型通道 +- 完善的异常捕获与收集 +- 支持动图 + +结论: +- Texture 适用于日常场景,优先选择; +- FFI 更适用于: + - flutter <= 1.23.0-18.1.pre 版本中,在模拟器上显示图片 + - 获取 ui.Image 图片数据 + - flutter 侧解码,解码前的数据拷贝影响较小 + +关于开源: +目前还没开源,文中说计划12月底开源,可以期待一下 + +参考链接: +- [dart:ffi 官方文档](https://dart.dev/guides/libraries/c-interop) + + +### 🐎 [工程实践 | 在 Flutter 中实现一个精准的滑动埋点](https://mp.weixin.qq.com/s/Q0HLJdqeRcYg6GKQQWq4CQ) + +[@Damien](https://github.com/ZengyiMa):埋点,为了对行为特征的数据进行量化分析、优化产品,我们常常需要在特定的时机上报数据埋点,而滑动埋点曝光埋点则是其中的一个高频使用场景。本文将会提供在 Flutter 中如何实现自动滑动曝光埋点实现思路,对此领域感兴趣的同学可以详细阅读此文章。 + +### 🐕 [Introducing Swift Distributed Actors](https://www.swift.org/blog/distributed-actors/) + +[@xiaofei86](https://github.com/xiaofei86):Actor 模型是一种适用性非常好的通用并发编程模型。它不仅可以应用于共享内存架构,更适合应用于分布式内存架构,解决地理分布型的问题。如今,Swift on Server 生态也迎来了 [Swift Distributed Actors](https://github.com/apple/swift-distributed-actors/),一个面向服务器的完整集群库,用于即将推出的 Distributed Actors 语言功能。 + +Distributed Actors 是 Swift 并发模型演变的下一步,本文除了介绍这项新特性外,也通过 [SwiftNIO](https://github.com/apple/swift-nio)、[Swift Service Discovery](https://swift.org/blog/swift-service-discovery/)、[Swift Cluster Membership](https://swift.org/blog/swift-cluster-membership/) 等 Swift 生态搭建具备服务通信、服务发现等功能的服务集群 Demo 做功能演示。感兴趣的同学可以阅读原文持续关注。 + +### 🐕 [Flutter PlatformView 在闲鱼直播业务中的实践](https://mp.weixin.qq.com/s/u-nYmDm6doIMBoh8cTDzlQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):咸鱼直播的场景是 Flutter 套全屏的 Native 组件(通过全屏的 PlatformView ),特点是处于页面最上层且背景透明。需要解决“点击透明区域的时候让下层响应,点击非透明区域时 PlatformView 自己响应”的问题。 + +文章首先介绍了 PlatformView 的实现原理,即:通过 DelayingGestureRecognizer 延迟其他手势的响应,并将消息处理转发至 Flutter,遵循 Flutter 内部的优先级处理机制;如果应该由 PlatformView 响应,则由 ForwardingGestureRecognizer 进行转发,走熟悉的 iOS 手势处理。 + +因此咸鱼直播选择:在点击非透明区域时,在禁用 PlatformView 的两个手势,走 Native 手势处理;点击透明区域时,恢复 PlatformView 的两个手势,走 Flutter 内部处理。由此解决了全屏 PlatformView 的交互问题,有较大的借鉴意义。 + +同时,即使实际开发中不会选择这么使用 PlatformView,对 PlatformView 的源码剖析也很值得一读。 + +## 摸鱼周报 + +[@摸鱼周报 #32](https://mp.weixin.qq.com/s/6CyL0B6Zkf6KXRrfocohoQ):第三十二期摸鱼周报来啦,一起看下本期内容概要: + +* 话题:Mac 版 TestFlight 已经上线。 +* Tips:介绍了关于中间层的一些概念,前后端之间的现状以及需要解决的问题等。 +* 面试模块:能否向编译后的类增加实例变量?能否向运行时动态创建的类增加实例变量?为什么? +* 博客主题:Swift 关键字。 +* 学习资料:来自字节跳动的 OKR 学习网站;一个关于 SwiftUI 的 Cheat Sheet —— Fucking SwiftUI。 +* 开发工具:一个允许你在 App Store 上搜索 iOS 应用程序并下载应用程序包的命令行工具 —— ipatool。 + +## 工具 + +### [PillowTalk - iOS/Lite](https://github.com/Co2333/mobilePillowTalkLite) + +[@极速男孩](https://github.com/ztlyyznf001):一个使用 SwiftUI 编写的在 iOS 上对 linux 中的 RPC 服务进行监控的工具。 + +## 音视频 + +### 🐢 [5G,华为,土耳其——我花了两个月,搞懂了5G背后的秘密](https://www.bilibili.com/video/BV1fq4y1g7hq) + +[@zvving](https://github.com/zvving):5G 技术中的极化码是一个非常复杂的通信概念,UP 主作为一个『通信小白』,暴肝三个月,梳理信息论、信道容量、香农极限诸多知识,在此基础上介绍极化码及其背后的故事。视频是在讲解 5G 技术,更是表述刨根问底、用平和心态长期坚持的科研精神,分享给每一位有好奇心的朋友们。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#181-2021.11.15.md b/Reports/2021/#181-2021.11.15.md new file mode 100644 index 000000000..e09da305d --- /dev/null +++ b/Reports/2021/#181-2021.11.15.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #181 | 2021-11-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) 提出。 + +## 新闻 + +### [针对在线多人活动的 app 内购买项目规定提醒](https://developer.apple.com/cn/news/?id=yeyd5xuh) + +[@Parsifal](https://github.com/ParsifalC):在多次推迟**在线多人活动 (一对几和一对多的实时服务体验)实行 IAP 制度**后,苹果终于决定正式实施了。在 2022 年起,若你的 App 存在在线多人活动的功能而又不是使用 IAP 进行支付的话,苹果将会予以拒绝。值得注意的是,仅在两个人之间提供实时一对一服务体验 (例如,学生辅导、医疗咨询、看房服务或健身训练) 的 app,则允许使用 app 内购买项目以外的购买方式。 + +### [年末假期接受 app 提交](https://developer.apple.com/cn/news/?id=y4fgrhhe) + +[@Parsifal](https://github.com/ParsifalC):往年这个时候,苹果总是开始提醒开发者将会在圣诞节等假日期间停止接受 App Store Connect 审核,而近期苹果宣布了 App Store Connect 这次不放假!但同时,苹果也提醒开发者,在 11 月 24 日至 28 日以及 12 月 23 日至 27 日期间,完成审核可能需时较长。 + +## 新手推荐 + +### 🌟 🐕 [Understanding how and when SwiftUI decides to redraw views](https://www.donnywals.com/understanding-how-and-when-swiftui-decides-to-redraw-views/) + +[@JonyFang](https://github.com/JonyFang):SwiftUI 的使用逐渐普遍起来,本篇从实例出发深入分析了 SwiftUI 视图重绘的方式及时间节点,结合重绘的原理,可以在后续开发里更巧妙的发挥 SwiftUI 的优势。 + +## 文章 + +### 🐕 [What Is a Deprecated API on iOS?](https://pspdfkit.com/blog/2021/what-is-a-deprecated-api-on-ios/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS SDK 包含大量的类、方法和其他接口,其中每一个都可以称为应用程序编程接口 (API),所有这些 API 共同构成了 iOS SDK 的 API。那么 Apple 是如何随着时间发展弃用其中的 API 呢? + +- 介绍 API +- Apple 意识到 API 存在问题,它被标记为已弃用但继续工作,引入替代 API +- 之后,Apple 宣布将删除该 API +- 之后,API 被删除 + +当 API 被弃用时,这意味着 Apple 不建议使用该 API,但该 API(几乎总是)仍然有效,弃用可能意味着 Apple 打算在未来的某个时候删除 API,并提供较长的过渡期。API 演进是在改进 API 和维护现有应用程序兼容性之间的平衡。 + +### 🐕 [闲鱼唤端的背后](https://mp.weixin.qq.com/s/MQ2XlroLF6vhM7qP1H-tBQ) + +[@享耳先森](https://github.com/iblacksun):如果你的 App 非常重运营,那么你一定非常想知道在每个运营活动中,带来多少新用户或日活,本文介绍了闲鱼 App 是如何做跨 App 启动以及所见即所得的。所见即所得依赖各端统一的数据上报与解析逻辑。 + +### 🐎 [Dangerous Logging in Swift](https://indiestack.com/2021/10/dangerous-logging-in-swift/) + +[@Damien](https://github.com/ZengyiMa):你在 Swift 中使用 NSLog 你是否会遇到 Crash 的场景呢?本文作者通过自己的代码中的转义引发 Swift 中使用 NSLog 的 Crash 问题为背景,深入的研究了 Swift 中使用 NSLog 的崩溃风险。感兴趣的同学不妨一读。 + +### 🐎 [聊聊__attribute__这个关键字吧~](https://mp.weixin.qq.com/s/FTC-IYVCqzGU-00nj5bVfw) +[@Smallfly](https://github.com/iostalks):本文通过实践探索了 `__attribute__` 关键字在不同参数下的作用,能够帮助读者多维度地了解该关键字的使用场景。 + +### 🐎 [端智能助力西瓜视频业务实践](https://mp.weixin.qq.com/s/qiVCG2ME8ppzia34txN9Rw) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文详细分析了在预加载视频的场景中``规则预测``的局限后,选择了``模型预测``。并基于业务场景与安全合规的考虑,放弃常规的云智能,选择了端智能的方案,最后获得了巨大的业务收益。其中对于场景的剖析和特征处理值得借鉴,另外可以看出 Pitaya 这套框架的完成度还是不错的,动态下发算法包以及对应的监控都较为完善。 + +### 🐢 [Core Image Tutorial for iOS: Custom Filters](https://www.raywenderlich.com/25658084-core-image-tutorial-for-ios-custom-filters) + +[@anotheren](https://github.com/anotheren):来自 raywenderlich 的 Core Image 自定义 Filter 教程。本文介绍了使用 Metal Shading Language 来创建自定义 CIKernel、应用滤镜的、以及如何 Debug 的详细流程,有图片/视频处理需求的小伙伴可以尝试一下。 + +### 🐕 [狐友iOS客户端埋点的前世今生](https://mp.weixin.qq.com/s/be4knvdFsMpykNKVSBnGwA) + +[@Barney](https://github.com/BarneyZhaoooo):本文以**狐友**iOS客户端埋点的实践为例子,向大家介绍了不同的埋点实现方案及一些问题总结。 + +- **认识埋点** +* **客户端埋点实现** +- **实践过程中遇到的问题** + +## 摸鱼周报 + +[@摸鱼周报 #33](https://mp.weixin.qq.com/s/nznnGmBsqsrWcvZ4XFMttg):第三十三期摸鱼周报来啦,一起看下本期概要: + +* 话题:感恩节和圣诞节期间 AppStore 将正常接受审核。 +* Tips:使用 os_signpost 标记函数执行和测量函数耗时;混编|将 Objective-C typedef NSString 作为 String 桥接到 Swift 中。 +* 面试模块:LeetCode - #1 Two Sum。 +* 优秀博客:本期为大家整理了一些关于图像识别框架 Vision 的文章。 +* 学习资料:Vue Color Avatar,一个纯前端实现的头像生成网站;一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章。 +* 开发工具:swiftenv。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#182-2021.11.22.md b/Reports/2021/#182-2021.11.22.md new file mode 100644 index 000000000..c37547bc0 --- /dev/null +++ b/Reports/2021/#182-2021.11.22.md @@ -0,0 +1,137 @@ +# 老司机 iOS 周报 #182 | 2021-11-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) 提出。 + +## 新闻 + +### 🌟 [Tech Talks 2021 - 中文专场](https://developer.apple.com/cn/tech-talks/) + +[@Parsifal](https://github.com/ParsifalC):新一批的 Apple Tech Talks 2021 中文专场来了,本次更新了 5 个专题,欢迎大家扫码报名~ + +- [为 ProMotion 屏幕进行优化(普通话)](https://developer.apple.com/events/tech-talks/dashboard/6SJQVA7UR3/dashboard) +- [核心设计原则(普通话)](https://developer.apple.com/events/tech-talks/dashboard/BPMX7VDZB3/dashboard) +- [提升游戏手柄的支持(普通话)](https://developer.apple.com/events/tech-talks/dashboard/3Y7S665W96/dashboard) +- [充分利用 App Review 流程(普通话)](https://developer.apple.com/events/tech-talks/dashboard/SF7CY9GMFR/dashboard) +- [在您的app中为 Center Stage 和 Video Effects 添加控制 (普通话)](https://developer.apple.com/events/tech-talks/dashboard/U3JA83J3D3/dashboard) + +![image](https://user-images.githubusercontent.com/7930911/142759509-636fc4c9-0707-436a-8780-401510e71a16.png) + +### [Apple 宣布将推出自助维修计划](https://www.apple.com.cn/newsroom/2021/11/apple-announces-self-service-repair/) + +[@Parsifal](https://github.com/ParsifalC):未来我们可以直接从官方购买零件和工具进行自己维修设备啦!苹果近期宣布将推出自助维修计划,首先将会在明年初于美国率先试运行,而后逐步推广至其他国家。这对于平常喜欢自己动手拆机而又不想从网上到处找靠谱零件的朋友无疑是一个福音,如果未来推出的零件价格合适,相信很多朋友都会尝试自助维修了~ + +### [新版 Flutter 中文开发者网站发布](https://mp.weixin.qq.com/s/JOm2-TBh4m3nJZKWbfjoug) + +[@Parsifal](https://github.com/ParsifalC):2021 年 Google 开发者大会 (Google Developer Summit) 于近日顺利举办,包含众多最新 Google 技术产品更新的线上演讲,干货满满。大会上发布了新版 Flutter 中文开发者网站和 DartPad。 + +## 新手推荐 + +### 🐎 [Swift Playgrounds App Projects](https://skyaaron.com/posts/swiftpm-app-projects/) + +[@老峰](https://https://github.com/gesantung):Swift Playgrounds 是由苹果公司在 2016 年 6 月 14 日苹果全球开发者大会 WWDC 上发布的 Swift 编程语言学习 App。上周 Apple 发布了 Xcode 13.2 Beta1 带来了 Swift Playgrounds 4,它提供了新的 *.swiftpm 格式可以与 Xcode 兼容;支持 UIKit 的完整 API,支持 Swift Package Manager,支持 Objective-C、C 和 C++,对 Swift Playgrounds 4 感兴趣的新手朋友推荐尝试。 + +## 文章 + +### 🌟 🐢 [从野指针探测到对iOS 15 bind 的探索](https://mp.weixin.qq.com/s/jNiRinGYeV3LiF5Zjt-x0w) + +[@J_Knight_](https://github.com/knightsj):本文从野指针的探测这一问题展开,介绍了 bind 流程的机制,以及它在 iOS 15下的改动。同时也介绍了 fishhook 的工作流程以及其他 2种 hook C 函数的方案,同时也讲解了 LC_DYLD_INFO_ONLY 以及 LC_DYLD_CHAINED_FIXUPS 的机制。 + +### 🌟 🐕 [美团外卖终端容器无关化研发框架](https://tech.meituan.com/2021/11/11/meituan-waimai-containerless-framework.html) + +[@JonyFang](https://github.com/JonyFang):美团外卖研发了一款终端容器无关化框架 - React2X,与服务无关化(Serverless)的概念类似,即在保持顶层业务研发语言不变更的情况下,在下层可以兼容性地升级、替换终端容器的能力,让用户无需关心终端容器的运维,只要将精力聚焦到业务逻辑上。React2X 解决了业务需求在多端容器需要重复开发的难题,通过代码复用实现开发提效,实现了几个目标: + +- 解决公司内部多终端容器开发痛点,统一开发规范,抹平开发差异,并提供对其他容器的扩展能力; +- 建设跨容器动态化能力,可以解决美团外卖业务客户端发版限制和小程序包大小限制的问题,帮助业务实现快速发版上线以及线上问题热修复的能力; +- 建设容器无关的开发生态体系,解决的容器差异性,统一的技术生态能力建设,为多终端容器开发场景提升生产和运维效率。 + +### 🐎 [分享我成为 GDE(Google 开发者专家)的经历](https://mp.weixin.qq.com/s/14TpW7-EqZ_6XO1vYRnhiQ) + +[@老驴](https://weibo.com/u/6090610445):Google 开发者专家是 Google 给积极推广 Google 技术的开发者和布道者颁发的认证。最近几年因为有国内开发者积极参与推广,所以得到了越来越多人的关注。本文的作者 AlexV525 就在最近获得了 Flutter GDE 的认证。 Alex 分享了自己从申请到面试的全过程。有兴趣想拓展自己在开发者圈影响力的同学们也可以试试 GDE。 + +### 🐎 [Flutter 多插件本地化问题](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486934&idx=1&sn=b1f809e93ffcf0ab051b0862c1f8eb03&chksm=cf55821ef8220b085333ffc8622f17cdec599bf53c0b95cfe1a50f901b85d778316a1feb7e39&token=290590453&lang=zh_CN#rd) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者在多插件开发的过程中,发现使用 Flutter intl 插件来自动生成本地化代码后,最终展示的文案不符合预期。在研究源码后发现是共用了一个 messageLookup 对象导致,并提供了能自动化解决的[脚本](https://github.com/silan-liu/flutter_app_localization/blob/main/scripts/intl.rb),有同样需要本地化开发的同学可以借鉴。 + +> 由本文作者 [summer-liu](https://https://github.com/silan-liu) 推荐收录。 + +### 🐕 [Introducing XCRemoteCache: The iOS Remote Caching Tool that Cut Our Clean Build Times by 70% : Spotify Engineering](https://engineering.atspotify.com/2021/11/16/introducing-xcremotecache-the-ios-remote-caching-tool-that-cut-our-clean-build-times-by-70/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了 Spotify 的 **XCRemoteCache** 实践,如标题所说,效果显著。 + +- 背景 +- 原理分析 +- 如何在工程中集成 XCRemoteCache + +### 🐎 [How to use Github Copilot with Swift using Visual Studio Code?](https://antran.app/2021/github_copilot_swift/) + +[@Smallfly](https://github.com/iostalks):[Github Copilot](https://copilot.github.com/) 是一款人工智能编程伴侣,它能根据输入的上下文代码或注释,「智能化」地生成代码段,支持主流的一些编辑器,但不支持 Xcode。 + +本文介绍了如何在 Visual Studio Code 中支持使用 Github Copilot 生成 Swift 代码的流程。 + +## 摸鱼周报 + +[@摸鱼周报 #34](https://mp.weixin.qq.com/s/P0HjLDCIM3T-hAgQFjO1mg):第三十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Apple 宣布推出自助维修计划。 +* Tips:混编|NS_SWIFT_NAME。 +* 面试模块:二叉树的三序遍历。 +* 优秀博客:几个 Swift 三方库的解析文章。 +* 学习资料:棒棒彬·技术参考周刊。 +* 开发工具:Mounty:一个在 macOS 下以读写模式重新挂载写保护的 NTFS 卷的免费的小工具。 + +本期摸鱼周报的访谈系列邀请的是一位参加过 WWDC 的同学,因为是 17 年,还是线下,所以有很多有趣好玩的事情。看完全内容可以点击这里:[人物访谈 | 一位参加过 WWDC 的 iOSer](https://mp.weixin.qq.com/s/5Z8n2bFPbZlG3R0MgqdGDQ) + +## 工具 + +### [SwagGen](https://github.com/yonaskolb/SwagGen) + +[@AidenRao](https://weibo.com/AidenRao):SwagGen 是一个库和命令行工具,用于解析和生成 OpenAPI/Swagger 3.0 规范的代码,完全用 Swift 编写。 + +[OpenAPI 规范](https://github.com/fishead/OpenAPI-Specification/blob/master/versions/3.0.0.zhCN.md)(OAS),是定义一个标准的、与具体编程语言无关的 RESTful API 的规范。OpenAPI 规范使得人类和计算机都能在“不接触任何程序源代码和文档、不监控网络通信”的情况下理解一个服务的作用。如果您在定义您的 API 时做的很好,那么使用 API 的人就能非常轻松地理解您提供的 API 并与之交互了。 + +如果您遵循 OpenAPI 规范来定义您的 API,那么您就可以用文档生成工具来展示您的 API,用代码生成工具来自动生成各种编程语言的服务器端和客户端的代码,用自动测试工具进行测试等等。 + +## 代码 + +### 🌟 [SwiftTreeSitter](https://github.com/ChimeHQ/SwiftTreeSitter) + +[@四娘](https://kemchenj.github.io):语法高亮的实现一直困扰着 GitHub/Atom 的工程师,网页和编辑器并不像 IDE 那样,它们没有完整的上下文,它们不了解每个单词背后代表着的是变量还是函数。 + +除此之外,性能也是一个问题,传统的多次正则匹配会让性能变得很差,而且不支持增量解析,这意味着每次敲下一个字编辑器都需要重新完整地解析一次,这对于大文件来说尤其致命。 + +TreeSitter 就是为了在这个场景下更好地进行词法分析的一个解析器,输入文件就可以输出 AST,它真正地实现了词法解析,支持增量解析,支持多语法的解析,例如 html 里的 javascript 和 css 也可以被正确解析,目前 GitHub 已经在线上启用了很长一段时间。 + +这个项目是 TreeSitter 的 Swift Binding,让我们可以使用 Swift 去调用 TreeSitter 的相关功能。另外,对于 Tree-sitter 感兴趣的同学也可以看一下[他们的工程师在某个技术大会上的演讲介绍](https://www.youtube.com/watch?v=Jes3bD6P0To)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#183-2021.11.29.md b/Reports/2021/#183-2021.11.29.md new file mode 100644 index 000000000..2eef467f7 --- /dev/null +++ b/Reports/2021/#183-2021.11.29.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #183 | 2021-11-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) 提出。 + +## 文章 + +### 🐕 [用苹果官方 API 实现 iOS 备忘录的扫描文稿功能](https://www.fatbobman.com/posts/docScaner/) + +[@anotheren](https://github.com/anotheren):iOS 系统自带的备忘录看似简单,实则功能强大。本文来自一位独立开发者,使用系统 API 尝试重现备忘录的扫描文稿功能。其主要使用了 VisionKit、Vision、NaturalLanguage、CoreSpotlight 等系统框架,推荐一读。 + +### 🐕 [Flutter 实现完美的双向聊天列表效果,滑动列表的知识点](https://mp.weixin.qq.com/s/LfsYzXv4GomyIbLysb-eNg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): IM 列表算是 Scrollable 视图比较常见的一个需求场景,本文从原理层面教你如何正确的使用 Flutter 开发一个 IM 滑动列表, 请仔细阅读 Center 讲解那块,非常干哟 😄 + +### 🐢 [干货 | 聊聊移动端安全加固](https://mp.weixin.qq.com/s/yCB2R8QPWNp2lJrQD4l_hw) + +如今,我国智能手机用户达到 12 亿,移动端的安全问题也被各大家开始广泛关注,比如我们熟知的反编译、注入攻击、设备篡改等手段严重威胁到了用户的数据安全以及公司的利益。本文从 iOS 平台着手,介绍了在 iOS 上如何进行安全加固,了解一些这方面的知识,即使不做安全这一块,也有助于我们更好理解系统的运行,以及写出更安全的代码。 + +### 🐕 [如何系统性治理 iOS 稳定性问题](https://mp.weixin.qq.com/s/M6dekf2_jbpkZqArPx7wgA) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要从以下四个章节介绍了 iOS 稳定性治理在字节的实践,并结合了很多线上问题排查经验来加以解释,深入浅出,干货满满。 + +- 稳定性问题分类 +- 稳定性问题治理的方法论 +- 疑难问题归因 +- 总结回顾 + +### 🐕 [百度 APP 移动研发平台及 DevOps 实践](https://mp.weixin.qq.com/s/XHv5NiEgKwt_shRyJQodhw) + +[@Smallfly](https://github.com/iostalks):随着移动开发团队规模和业务规模不断增长,研发效率和质量都会受到挑战。百度 App 移动研发平台 Tekes 提供一站式服务,极大地提高了研发团队的交付效率。本文主要介绍了 Tekes 的核心功能,以及实现原理。 + +Tekes 经过多年的演进,目前主要包括三个大的功能: + +1. 自动化研发流程 +2. 组件和 App 的防劣化 +3. 全局知识库 + +### 🐕 [Flutter 实现动态化更新 - 技术预研](https://juejin.cn/post/7033708048321347615) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者调研了市面上开源的三套 Flutter 动态化方案,以及相对通用的 webview 增强、UI 库模版化,共五套方案。在维护难度、学习成本、迁移成本等多个角度比较了各个方案的优劣,是一份详尽的调研结论,如果有运营相关的动态化需求,可以作为选型参考。 + +总体来说动态化的难度还是比较大的,挑选适合产品形态、团队规模、技术实力的方案才是最优的选择。 + +### 🐕 [拒绝编译等待 - 动态研发模式 ARK](https://mp.weixin.qq.com/s/2tnU4sHf9XVEaJYgyTXoaw) + +[@红纸](https://github.com/ChengzhiHuang):在大型工程面前,编译链接慢是通病。本文作者从动态库入手,平台提供基线 ipa 包,本地研发阶段时下载。同时研发仓库做动态库编译,替换原有基线 ipa 包中动态库,重签名,形成完整包,再进行装机调试。在这种模式下,本地的代码仓库就能做到最小化,编译链接时间明显缩短,再也长时间没有爆内存的烦恼了。 + +### 🐕 [Xcode Cloud: Automated Workflows](https://blog.devgenius.io/xcode-cloud-automated-workflows-730277773c37) + +[@Parsifal](https://github.com/ParsifalC):Xcode Cloud 是今年 WWDC 很受关注的特性功能,近期应该也有很多开发者陆续收到了 Beta 邀请。这是苹果官方的 CI/CD 工具,自然有着最适配苹果自身平台的优势,并且目前并没有看到相关收费的信息。 + +> 同时推荐小专栏里的 3 篇 Xcode Cloud 相关 session 解读: +> +> - [【WWDC21 10268/10269】探索 Xcode Cloud Workflows](https://xiaozhuanlan.com/topic/5493872016) +> - [【WWDC21 10267】一窥 Xcode Cloud](https://xiaozhuanlan.com/topic/2946158037) +> - [【WWDC21 10267/10268/10269】窥探 Xcode Cloud](https://xiaozhuanlan.com/topic/7496513820) + +## 摸鱼周报 + +[@摸鱼周报 #35](https://mp.weixin.qq.com/s/fCEbYkAPlK0nm7UtLKFx5A):第三十五期摸鱼周报来了,一起来看下本期摘要: + +* Tips:count vs isEmpty +* 面试模块:Swift 中 struct 和 class 的区别,值类型和引用类型的区别。 +* 优秀博客:本期继续介绍几个优秀的 Swift 开源库。 +* 学习资料:戴铭的 Swift 小册子,黑五软件打折优惠整理。 +* 开发工具:PhotoSweeper,一款快速而强大的重复照片清理器。 + +本期访谈系列邀请到的是一位在游戏行业工作的 iOS 开发。文中围绕他的工作日常,对于未来阶段 IAP 是否会支持三方支付,以及他如何坚持写博客这些事情展开讨论。感兴趣的同学可以点击这里查看全文:[人物访谈 | 一位游戏行业的 iOSer](https://mp.weixin.qq.com/s/tzYu-7H_GccjYhQh0u7zLQ) 。 + +## 工具 + +### [Learn X in Y minutes](https://learnxinyminutes.com/) + +[@Parsifal](https://github.com/ParsifalC):一个非常全面的教程大全网站,基础算法、数据结构和各类编程语言等等应有尽有,而且提供不同的翻译版本,值得加书签收藏一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 上海「哔哩哔哩主站直播」招人,加入后,会主要参与 B 站直播的「平台向/业务向」开发维护工作。本次为组内直推,效率会更高,[详情查看](https://mp.weixin.qq.com/s/gYobO5hM0wPSFRNJzGBGIA)~欢迎加微信:jony_chunfang + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#184-2021.12.06.md b/Reports/2021/#184-2021.12.06.md new file mode 100644 index 000000000..9b48f6f15 --- /dev/null +++ b/Reports/2021/#184-2021.12.06.md @@ -0,0 +1,117 @@ +# 老司机 iOS 周报 #184 | 2021-12-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) 提出。 + +## 线下沙龙 + +### 🌟 [有赞移动技术沙龙火热报名中~](https://mp.weixin.qq.com/s/EdiV-CO80ONqx9-bKgciAA) + +[@Parsifal](https://github.com/ParsifalC):老司机今年联合企业举办的最后一场技术沙龙来啦~这次我们与有赞移动技术团队一起带来 **「质量·极致」** 为主题的线下沙龙活动。本次沙龙将涵盖中大型团队中把控线上稳定性的方方面面,共有 5 个主题,欢迎大家来现场学习!扫码即可参与报名! + +- 《有赞移动 APM 实践》 +- 《爱逛 Flutter 图片优化实践》 +- 《有赞 Flutter 热修落地实践》 +- 《有赞移动质量提升探索与实践》 +- 《有赞移动质量保障体系》 + +![image](https://user-images.githubusercontent.com/7930911/144743442-165b0f36-d75a-4d38-8150-941960647068.png) + +## 🌟 [Tech Talks 2021 - 中文专场 1217](https://developer.apple.com/cn/tech-talks/) + +[@Parsifal](https://github.com/ParsifalC):Tech Talks 2021 最后一批中文专场来啦~ + +- [探索出色 AR 体验的要素 (普通话)](https://developer.apple.com/events/tech-talks/dashboard/SR68FKF3QV/dashboard) +- [充分利用 App Review 流程(普通话)](https://developer.apple.com/events/tech-talks/dashboard/74LR339842/dashboard),错过第一场的可以参加这次 +- [设计出色的 iPad app(普通话)](https://developer.apple.com/events/tech-talks/dashboard/K2J9AL6RYT/dashboard) +- [将高性能视频与Metal集成(普通话)](https://developer.apple.com/events/tech-talks/dashboard/3VMP4RXSC4/dashboard) +- [使用 StoreKit 2 和 App Store Server API 为客户提供支持(普通话)](https://developer.apple.com/events/tech-talks/dashboard/7DH6V3D8RM/dashboard) + +![image](https://user-images.githubusercontent.com/7930911/144744488-48e43b3c-835e-40bc-b06a-ffc9d993dff1.png) + +## 新手推荐 + +### 🌟 [戴铭的 Swift 小册子](https://github.com/ming1016/SwiftPamphletApp) + +[@老峰](https://github.com/Gesantung):[小册子](https://github.com/ming1016/SwiftPamphletApp) 内容主要包括 Swift 语法特性、 Swift 官方社区动态、SwiftUI 等几个板块,面向 Swift 零基础的同学,包括一些直接可用的小例子,例子可以直接在工程中用或自己调试着看,可以使用作者开发的 macOS 程序来浏览,特别的程序是 Swift 写的,按照声明式 UI,响应式编程范式开发,源码也可以看看,推荐 Swift 新手及感兴趣的同学学习使用。 + +## 文章 + +### 🌟 🐢 [“杀死” App 上的疑难崩溃!](https://mp.weixin.qq.com/s/dHAiuHeF2n34DaPIGOtJaw) + +[@水水](https://www.xuyanlan.com): 作者分享了一个 58 同城 App 上遇到的疑难的崩溃,引出了 bugly 符号化不能正确解析的一些解决方案,过程中又发现了弱符号的问题,并按照这个研究方向在集团内做了一系列工具并解决了多个版本的历史遗留问题。 + +crash 解决方案是开发者需要持续关注的问题,周报中也多次推荐一些好的 crash 解决思路、工具等。小编建议读者们不管是否遇到类似问题都可以加以关注和思考。 + +### 🌟 🐎 [Solving Mysterious Logout Issues on iOS 15](https://sourcediving.com/solving-mysterious-logout-issues-on-ios-15-8b818c089466) + +[@Smallfly](https://github.com/iostalks):Cookpad App 在 iOS 15 上冷启动登录状态异常登出,作者经过一系列的排查,最终定位到和 iOS 15 系统的「pre-warm」机制有关,该机制的相关内容目前还不多,感兴趣的同学可以关注下。 + +### 🐕 [Web API Client in Swift](https://kean.blog/post/new-api-client) + +[@JonyFang](https://github.com/JonyFang):有了 Async/Await 和 Actors 的特性,现在在 Swift 中设计自定义 Web API 相比以往可以通过少量的抽象,使代码易于理解和扩展,文中进行了一些实践演示应用。 + +### 🐕 [自己搞一个 MemoryGraph 工具行不行?](https://mp.weixin.qq.com/s/pggPc5gWpV6ZX0rnVpN22Q) + +[@Barney](https://github.com/BarneyZhaoooo):答案是行!本文主要记录了自己搞一个 MemoryGraph 的调研过程,对比了业内方案,有自己的分析和思考。 + +### 🐕 [如果 Safari 做不到对,快有何用?](https://coderemixer.com/2020/10/21/safari-is-fast-but-so-what/) + +[@JonyFang](https://github.com/JonyFang):描述了 Safari cache POST 请求和 Safari cache GET requests with cache disabled 问题的现象和复现过程。 + +### 🐎 [What role do Tasks play within Swift’s concurrency system?](https://www.swiftbysundell.com/articles/the-role-tasks-play-in-swift-concurrency/) + +[@zvving](https://github.com/zvving):Swift5.5 引入的并发编程,Task 带来结构化并发 API,提供创建、组织、取消任务的简明方式;Actor 提供良好数据隔离方式,保障并发安全。本文作者通过页面中后台加载网络数据并主线程刷新内容的例子,介绍如何更好的使用 Task + MainActor。 + +### 🐎 [Editing Multiple Constraints](https://useyourloaf.com/blog/editing-multiple-constraints/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了批量编辑 Interface Builder 里约束的方法,习惯用 Interface Builder 的读者可以参考借鉴。 + +### 🐎 [M1 设备的 Xcode 编译问题深究](https://juejin.cn/post/7037037120158269448) + +[@Parsifal](https://github.com/ParsifalC):苹果推出 M1 芯片的 MacBook 已经一年了,不少小伙伴都陆续用其进行开发。M1 芯片是属于 ARM 架构,而之前的 Intel 则是 x86_64 架构,这对于我们做 iOS/Mac 开发就有了些不同,比如原来 64 位设备后模拟器架构只包含 x86_64,现在多了个 ARM64。虽然为了方便开发者平滑过渡,苹果已经尽可能地解决了一些问题,但实际开发过程中仍然会存在部分问题。这篇文章归纳总结了 M1 设备推出后 Xcode 可能存在的编译问题,并都给出了解决方案。 + +## 摸鱼周报 + +[@摸鱼周报 #36](https://mp.weixin.qq.com/s/K_JHs1EoEn222huWIoJRmA):第三十六期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Typora 开启收费模式,支持!(补充:目前国内网站被封锁,暂无法访问) +* Tips:混编|为 Objective-C 添加枚举宏,改善混编体验。 +* 面试模块:事件传递及响应链。 +* 优秀博客:几篇关于 Swift 字符串的优秀博客。 +* 学习资料:独立开发者经验分享。 +* 开发工具:思源笔记,一款本地优先的个人知识管理系统, 支持细粒度块级引用和 Markdown 所见即所得。 + +本期访谈邀请到的是一位优秀的 iOS 程序媛,一起来聊一下她眼中的 iOS。可以点击这里查看全文:[人物访谈 | 一位 iOS 程序媛](https://mp.weixin.qq.com/s/XIaiNY2oNEtayPcGNSos_A) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#185-2021.12.13.md b/Reports/2021/#185-2021.12.13.md new file mode 100644 index 000000000..f597e5272 --- /dev/null +++ b/Reports/2021/#185-2021.12.13.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #185 | 2021-12-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://www.36kr.com/p/1519790525222278) + +[@Parsifal](https://github.com/ParsifalC):Epic Games 与苹果之间的诉讼仍然在博弈中,9 月份法院宣判苹果败诉后,苹果也已经宣布会在 12 月 9 日前发布正式政策允许使用第三方支付。而就在限期到达前,苹果又向法院申请到了暂缓执行这一命令,并已经继续提起上诉。 + +## 文章 + +### 🐎 [如何构建异步渲染聊天框架](https://mp.weixin.qq.com/s/CAoTWjjnPBzALPBDZaU54g) + +[@JimQ](https://github.com/waz0820):本文前半部分侧重于“异步渲染”,概述了异步渲染的必要性,以及使用传统方案 TextKit 异步渲染的优缺点,针对其劣势引入了 Texture。后半部分侧重于“如何构建聊天框架”,基于 IM 输入框的实践,通过代码集中诠释了如何利用状态机和状态驱动来驱动 UI 的变化,从而降低用户使用框架的门槛。 + +### 🐎 [Support customers with StoreKit 2 and App Store Server API](https://developer.apple.com/videos/play/tech-talks/10887/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):苹果官方宣传 StoreKit 2 ,[中文](https://developer.apple.com/events/tech-talks/dashboard/7DH6V3D8RM/dashboard)的直播将在 12 月 15 日举行,感兴趣的同学可以预约。本次 Tech Talk 并没有新的 API 或者新特性出现,主要是重复介绍 StoreKit 2 的新特性,详细展开了:正常支付、用户续订用户、处理退款,三个场景的最佳实践。 + +想了解 StoreKit 2 的细节,可以查看三篇 WWDC21 的翻译。 +[【WWDC21 10175】IAP 用户退款与客诉处理优化](https://xiaozhuanlan.com/topic/8670251439) +[【WWDC21 10174】 IAP 后台通信优化与实践](https://xiaozhuanlan.com/topic/3768514920) +[【WWDC21 10114】 初见 StoreKit 2](https://xiaozhuanlan.com/topic/6138790425) + + +### 🐕 [淘特 Flutter 流式场景的深度优化](https://mp.weixin.qq.com/s/H2VqX6qSJ1KLkXB5p4S0dw) + +[@邦Ben](https://weibo.com/linwenbang):本文从底层原理,思路到最终实现,进行递进的讲解,Flutter 表现一直以来是堪比原生,但是终归有些场景还是原生占优,列表场景则是最为常用的场景了,本文主要的优化点是局部刷新。如果有需要对 Flutter 列表进行优化的,可以参考一下。 + +参考链接: +- [他把闲鱼APP长列表流畅度翻了倍(良心教程)](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247486101&idx=1&sn=171d269a324748f01e5c92fbaa54854f&chksm=fd54de84ca2357920b822902ea8b23137d83e2f4f7340fabae819182cba2585181be5455e5b2&scene=21#wechat_redirect) +- [ListView流畅度翻倍!!Flutter卡顿分析和通用优化方案](https://juejin.cn/post/6940134891606507534) + + +### 🐕 [iOS Pod Update 指数级变慢?看 Flutter 新一代版本仲裁算法 Pubgrub 如何解](https://mp.weixin.qq.com/s/Ulz9FafWwtbefVuikTMj7Q) + +[@红纸](https://github.com/nianran):本文介绍了 CocoaPods 在出现包版本冲突情况下,Molinillo 仲裁算法使用回溯 DFS 父节点的方式解决冲突问题。但在大型工程下,依赖图异常复杂,回溯成本较高,会出现严重的降速问题。一般都会在 Podfile 中声明好具体依赖来减轻仲裁负担。本文还介绍新一代的仲裁算法 Pubgrub 推导不兼容性算法的数学逻辑来解决依赖仲裁问题。感兴趣的同学可以看一看~ + +关于 Molinillo 的详细介绍可以看这篇文章: [Molinillo 依赖校验](https://mp.weixin.qq.com/s/Kux4B4piqR43RLwiHRcHUQ)。 + +> 自荐:[BlackTea](https://juejin.cn/user/4406498332782141) + +### 🐕 [My worst tech interview experience · Jesse Squires](https://www.jessesquires.com/blog/2021/12/01/my-worst-tech-interview-experience/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了作者早期去面试 Apple Watch 团队的不愉快体验,结合后来的成长经历,表达了自己对如何面试的一些思考。 + +### 🐢 [浅谈 swiftinterface 文件](https://mp.weixin.qq.com/s/LVxFTp4nLHZDU_PqdsnX6Q) + +[@anotheren](https://github.com/anotheren):swiftinterface 是什么?文章以 **模块稳定性(Module Stability)** 为切入点,介绍了 .swiftinterface 文件的工作原理以及常见的误区,最后介绍了 `@_alwaysEmitIntoClient` 关键字以及它的实现原理。干货满满,还有不少作者的思考结论,推荐阅读。 + +### [Get started with in-app events](https://developer.apple.com/videos/play/tech-talks/10889/) + +[@享耳先森](https://github.com/iblacksun):从 Apple 在 WWDC 21 提起 In-app events 开始,到前段时间正式开放已经有一段时间了,建议回顾下本视频,包含了 in-app events 的一些建议和最佳实践。 + +### [Flutter 2.8 release 发布,快来看看新特性吧](https://mp.weixin.qq.com/s/7J_eLYO1DiPu8A2XsF99nw) + +[@Parsifal](https://github.com/ParsifalC):Flutter 继续稳步更新,2.8 版本正式发布。本次更新依然围绕着稳定性和性能方面。包含以下几点: + +- 改进了应用的启动延迟问题,尤其是 Android 低端设备上 +- 继续优化内存占用 +- Android systrace 的支持 +- Flutter DevTools 提高对性能调试的支持 +- Web platform views 的优化 +- WebView 3.0 + +## 摸鱼周报 + +[@摸鱼周报 #37](https://mp.weixin.qq.com/s/PwZ2nIHRo0GDsjMx7lSFLg):摸鱼周报第三十七期来啦,一起来看下本期概要: + +* 话题:苹果正式开放 AppStore 的 2 个重磅功能:自定义产品页和产品页优化。 +* Tips:设备启动流程的梳理。 +* 面试模块:HTTP/1.0,HTTP/1.1,HTTP/2 有哪些区别? +* 优秀博客:几个音视频相关的优秀仓库介绍。 +* 学习资料:计算机教育中缺失的一课(中文版)。 +* 开发工具:myyearwithgit,开启你的年度报告。 + +## 音视频 + +### 🚧 🐢 [Scale By The Bay 2021 : Konrad Malawski, Distributed Systems with Swift](https://www.youtube.com/watch?v=7yu6mEq8R2Q&ab_channel=FunctionalTV) + +[@老驴](https://weibo.com/u/6090610445):Swift 在最近几年添加了很多新的语言特性,极力试图突破 Apple 生态圈。这个视频就是 Apple Swift 团队的工程师来介绍如何使用 Swift 中新添加的特性如 distributed actor 来写大型分布式系统。不过还是要温馨提醒一下有兴趣的同学,分布式系统不是单单一个语言的问题,所以不妨自己尝试尝试以后再在生产环境中使用。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#186-2021.12.20.md b/Reports/2021/#186-2021.12.20.md new file mode 100644 index 000000000..e734087aa --- /dev/null +++ b/Reports/2021/#186-2021.12.20.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #186 | 2021-12-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) 提出。 + +## 新闻 + +### iOS 15.2 新增相册卡死 + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):12 月 15 日,苹果发布了 iOS 15.2 的正式版。不幸的是这次升级带来了卡死。在还未向用户申请相册权限时,即 ``[PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized`` 时,如果调用 ``[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:xxx];`` 添加监听,则会卡死。苹果开发者论坛也有同学[反馈](https://developer.apple.com/forums/thread/696131),目前苹果还未有回应,可以看到这个问题在 15.2 beta 版中就存在了,需观察苹果后续会如何处理。 + +临时方案可以在注册前进行判断,如果没有权限,则不注册观察者。 + +## 文章 + +### 🌟 🐕 [浅谈 Swift Dictionary](https://mp.weixin.qq.com/s/yIHaAaGRX7Ru_OetdX0_Vg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者分析字典下标访问方法,并将源码与汇编结合,便于读者加深理解,推荐一读。阅读需要对汇编有些基础了解,例如[保留字 qword、byte 等](http://c.biancheng.net/view/3465.html)。 + +同时本文还包含了: +- 字典的内存布局,主要关注 count、scale、rawKeys/Values 这些固定布局结构,和 bitset、Keys/Values 这些不固定布局的结构。 +- 简单介绍动态调试 Swift 源码的方案。 + +### 🌟 🐕 [FlutterWeb 性能优化探索与实践](https://mp.weixin.qq.com/s/fE11vs2qnRIHAWYv1af-gA) + +[@Damien](https://github.com/ZengyiMa):2021 年 3 月份,Flutter 2.0 正式对外发布,意味着 Google 更加坚定了多端复用的决心。本文是美团外卖商家团队基于 HTML Render 模式对 FlutterWeb 性能优化进行了探索和实践,主要包括: +- SDK(Dart-SDK、Framework、Flutter_Web_SDK)的精简 +- 静态资源产物优化(例如:JS 分片、文件 Hash、字体图标文件精简、分平台打包等) +- 前端资源加载优化(预加载与按需请求) + +使得 JS 产物由 1.2M 减少至 0.7M(非业务代码),页面完全加载时间 TP90 线由 6s 降到了 3s 的不错成绩,并且提出更加长期规划,对 FlutterWeb 感兴趣的同学不妨一读。 + +### 🐢 [不甘当学渣,努力作学霸,最终是学民](https://mp.weixin.qq.com/s/lZzX_1pLeied7e4jkvcVJQ) + +[@Smallfly](https://github.com/iostalks):本文记录了一名「普通」程序员在近两年工作,学习,旅行上不平凡的经历。 + +### 🐕 [从 350ms 到 80ms,打造新零售场景下 iOS 短视频的极致丝滑体验](https://mp.weixin.qq.com/s/qYsfyw2K77hKMfHd_uTp-Q) + +[@anotheren](https://github.com/anotheren):来自盒马的短视频优化方案,其核心方案依然是 3 点:提前缓存视频数据、视频文件编码/体积优化、提前准备播放器。 + +## 摸鱼周报 + +[@摸鱼周报 #38](https://mp.weixin.qq.com/s/a1aOOn1sFh5EaxISz5tAxA):第三十八期摸鱼周报来了,一起来看下本期概要: + +* 话题: Xcode 13.2 和 iOS 15.2 的正式版值得关注的几项新功能。 +* Tips:内存相关的一些机制。 +* 面试模块:dealloc 在哪个线程执行;NSString *str = @"123" 这里的 str 和 "123" 分别存储在哪个区域。 +* 优秀博客:SwiftUI 相关的几篇优秀博客。 +* 学习资料:软件随想录,Joel Spolsky 的 Blog 纸质版文集。 +* 开发工具:Dropshelf,一款 Mac OS 下的拖拽效率应用。 + +本期人物访谈邀请的是_夏天_,他是摸鱼周报的一位主编,主要负责 Tips 部分的编写和审核。曾参与掘金翻译计划,翻译过很多篇优质博客内容,也翻译过像是 iOS Crash Dump Analysis Book 这一类的外文图书。这次拉他来聊一聊关于外文翻译和他个人的一些工作感悟,完整内容可以点击查看:[人物访谈 | 一位普通的 iOS 程序员](https://mp.weixin.qq.com/s/60o6UKcDjf9lAy2o2AQ_tw)。 + +## 工具 + +### [Zealot](https://github.com/tryzealot/zealot/) + +[@JonyFang](https://github.com/JonyFang):推荐一个开源自部署 iOS、Android 及 macOS 应用分发平台,提供 iOS、Android SDK、fastlane 等丰富组件库,打包分发流程、简化了应用上传、可独立部署,是对开发者、测试者友好的开源项目。 + +## 代码 + +### [AppFlowy](https://github.com/AppFlowy-IO/appflowy) + +[@AidenRao](https://weibo.com/AidenRao):[Notion](https://www.notion.so/) 是深受团队和个人欢迎的生产力应用。AppFlowy 是 Notion 的开源替代品,支持主流的移动和桌面端系统,技术选型很有趣,前端选择了 Flutter,后端使用 Rust 编写,通过 FFI 进行通信。 + +## 音视频 + +### [佛系技术翻译组 SwiftGG 的过去与现在](https://www.xiaoyuzhoufm.com/episode/61b451ff0506e510b35d71d0?s=eyJ1IjogIjVlN2M4NjIxYjNjNWJjYTVmNjQxMzlmMiJ9) + +[@Parsifal](https://github.com/ParsifalC):老卓的播客这次邀请到了 SwiftGG 的两代负责人 梁杰 和 MM 一起谈谈社区组织 SwiftGG 的往事。SwiftGG 翻译组一直负责着 Swift 官方文档的翻译工作,并得到了官方的认可,还曾举办了国内的 Swift 大会和上海 T 沙龙活动。老卓也是老司机技术周报的创始人,并且周报编辑组也有多位成员参与了 SwiftGG。3 个人在这期播客里,聊到了很多做社区组织背后的小故事,分享了这些年来的经验和体会。 + +### [Explore and manipulate data in Swift with TabularData](https://developer.apple.com/videos/play/tech-talks/10100/) + +[@xiaofei86](https://github.com/xiaofei86):本期 Tech Talks 带了新的框架 TabularData,用来导入、组织和准备数据表以训练机器学习模型。除了为机器学习任务预处理数据外,你也可以将加载、浏览和操作 CSV、JSON 等非结构化数据的能力用在 App 中。 + +观看视频了解此框架如何帮助你处理大型数据集,并将多个数据表连接在一起进行过滤。视频还将向你展示如何使用 DataFrame 来驱动 App 的所有以数据为中心的功能。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/2021/#187-2021.12.27.md b/Reports/2021/#187-2021.12.27.md new file mode 100644 index 000000000..bd867ed50 --- /dev/null +++ b/Reports/2021/#187-2021.12.27.md @@ -0,0 +1,168 @@ +# 老司机 iOS 周报 #187 | 2021-12-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) 提出。 + +## 通知 + +[@Parsifal](https://github.com/ParsifalC):这是今年的第 44 期周报,也是 2021 年最后一期周报,同时也是我作为周报主编的最后一期。2017 年底老卓创办了老司机技术周报,然后是 2018 年底我继任主编,成刊整整 4 年,经历过各种各样的事情,但周报都没有因为非节假日原因断更过,这是我们编辑组所有人都可以引以为傲的事情。而今我也要将主编这个身份交接给了我们下一任负责人 - Damon,也就是大家所熟悉的老王~老王也是编辑组的 OG,并且主导了编辑组与社区近两年的 WWDC 内参活动,过去也参加了编辑组很多运营工作,这次算是正式接棒上任了。后续周报的更新、纳新、对外合作以及各类内容发布等等运营相关事宜,都可以直接联系老王协商。我们一直说编辑组最大的资本就是我们 30 多位优秀的编辑,我很荣幸成为其中一员,即使往后不再参与运营工作,但我也会是周报最忠实的读者。感谢大家多年以来的支持,提前祝大家新年快乐啦! + +## 🌟 [Tech Talks 2022 - 中文专场 0104](https://developer.apple.com/cn/accelerator/) + +[@Parsifal](https://github.com/ParsifalC):2022 年第一期 Tech Talks 中文专场来了!扫码即可报名~ + +### 使用 Group Activities 将共享群组体验引入您的 app + +SharePlay 让您可以将您的 app 整合到 FaceTime 中,并以这种全新的方式将用户聚集起来。通过 Group Activities API,您可以比以往更加容易地将您的 app 中的电影、电视、音乐和其他共享媒体带入到人们已经在用来相互联系的空间。您可以了解如何提供全新的卓越用户体验,以及用户之间的推荐为您的 app 带来的自然增长。 +名额有限。请在 2022 年 1 月 3 日前报名参加。 + +![image](https://user-images.githubusercontent.com/7930911/147406439-3d5a3463-84ed-4f50-90ee-da08f32d9e49.png) + +## 新闻 + +### 🐎 [Log4j Xcode vulnerability](https://developer.apple.com/forums/thread/696785) +[@Smallfly](https://github.com/iostalks):近期 Java 日志库 Log4j 漏洞影响了很多国内外主流的大平台,有用户在苹果论坛上指出,Xcode 在上传应用到 App Store 时使用了 Java 运行环境,疑似存在风险。苹果团队回应 Xcode 确实包含 Log4j 副本,Xcode 13.2.1 会自动更新到修复版本。 + +建议及时升级 Xcode。 + +## 文章 + +### 🌟 🐕 [Flutter疑难杂症系列:实现支持复杂需求的列表](https://mp.weixin.qq.com/s/CtcxDtTgcEh0L77Z2g9HFg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 列表页面在移动端开发可谓是一个必然面对的场景,复杂业务下的列表优化也是个老生常谈的话题,在 Flutter 中也是如此,本文是由字节跳动基础架构团队奉献,详细讲解了 Flutter 中如何应对复杂需求下的列表页,从原理到实践,到性能分析,再到功能扩展,一步步抽丝剥茧,值得每一位 Flutter 开发者细读,小编强烈推荐。 + +### 🌟 🐕 [Swift代码优化指南 | 如何最大化实现性能提升?](https://mp.weixin.qq.com/s/xGeLeqcXBeBw1zMPqBZKYA) + +[@JonyFang](https://github.com/JonyFang):本篇从语法角度优化代码,长远来看有益于养成良好的代码习惯,某种程度上从根源减少错误的产生。详细内容: +1. 编译速度优化 + - 费时类型判断; + - 现实运用中的取舍; +2. 内存分配与占用 + - 关于 struct 的使用; + - 用轻便的 Enum 替代 String; + - 优化集合类型(内存分配策略、预分配内存、惰性序列); + - 减少不必要的桥接(ContiguousArray 替换 NSArray); + - 善用写时复制; +3. 运行时速度优化 + - 介绍三种函数派发; + - 使用 final、private 优化派发方式; + + +### 🐕 [错误处理原则及其在Swift中的应用](https://mp.weixin.qq.com/s/DJKuCXzqxBg7LPmtPMgglw) + +[@Barney](https://github.com/BarneyZhaoooo):本文讨论了容易被大家忽视的错误处理,以及一些Swift中的应用。 + +- 错误处理的目标 +- 错误处理的方案 +- 异步函数的错误处理 +- Swift标准库的行为 + +### 🐢 [A roadmap for improving Swift performance predictability: ARC improvements and ownership control](https://forums.swift.org/t/a-roadmap-for-improving-swift-performance-predictability-arc-improvements-and-ownership-control/54206) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Swift 的开发者为我们带来了基于 ARC 内存管理的新特性 roadmap ,总体思路是在不影响主要代码逻辑阅读的前提下,在参数定义时增加特定的一些关键字来优化标明持有关系,使 debug/release 下的表现一致,辅以编译器的强提示来保证安全性;相较 C++ 严格的作用域模型,Swift 会略微宽松一些,同时也能避免在 deinit 时有先后顺序的依赖导致的问题。特别强调,目前只是 roadmap ,后续可能还会有变更。同时对目前 debug/release 释放时机不明确可能导致的问题进行了举例:例如在 deinit 时会调用 free ,而 free 对 errno 有影响,如果判定对象能够提前被释放,就有可能导致程序在 debug/release 下有不同的表现。 + +主要内容如下: +- 通过 move() 方法,在函数内显式转移控制权,这样原本的变量就不再被持有,那就被编译器认为可以被释放,可以避免 Copy-on-write 的多余操作。同时在函数内期望最后的一次使用该变量时,也可以调用此方法,防止该变量后续再被调用。 +- 通过在函数声明时对参数标注 consuming/nonconsuming 来传达持有关系。 +- 通过将 getter/setter 函数替换为 read/modify 来避免对 Array/Dictionary/Set 等类型的无用 Copy-on-write 。 +- 通过对参数标注 @noImplicitCopy 来保证:在函数体内,如果传递该参数到标明 consuming 的方法时,则需要显式调用 copy 方法,来确认参数的所有权。如果不显式调用,则会在编译期报错。 +- 对参数也可使用 @nonescaping 进行标注。 +- 上述 @nonescaping/@noImplicitCopy 的变量统称为 move-only 类型,会对参数列表中包含 move-only 类型的 API 进行性能优化。 + +### 🐕 [Introducing Swift for Visual Studio Code](https://forums.swift.org/t/introducing-swift-for-visual-studio-code/54246) + +[@老峰](https://github.com/gesantung):本文介绍了 VSCode Swift 扩展,该扩展可以提供 VSCode 下 Swift 开发,可以方便的处理 Vapor 项目,值得注意的是这是一个 0.1.0 版本,因此它的功能不完整,主要包括以下功能: +- 自动创建任务 +- 包依赖视图 +- 代码补全 +- 跳转到定义、查看定义、查找所有引用、符号搜索 +- 自动生成用于调试的启动配置 + +## 摸鱼周报 + +[@摸鱼周报 #39](https://mp.weixin.qq.com/s/DolkTjL6d-KkvFftd2RLUQ):第三十九期摸鱼周报来了,一起来看下本期概要: + +* Tips:混编|为 Swift 改进 Objective-C API。 +* 面试模块:HTTPS 证书有效性的验证过程。 +* 优秀博客:Core Data、Realm、MMKV 这几个库相关的一些介绍。 +* 学习资料:一个学习正则表达式的网站。 +* 开发工具:一个安装 Xcode 的 CLI 工具 `xcinfo`,一款开源的 Markdown 编辑工具 Mark Text。 + +本期访谈对象是老司机周报的主编:Parsifal。本次访谈主题分两部分,一部分是老司机周报的发展故事和他的行业观察,另一部分是他对开发者的一些建议。详情可以点击:[人物访谈 | 老司机周报主编 Parsifal 专访](https://mp.weixin.qq.com/s/HWbPbPBPYgFJsM-oc_4tvw) + +## 工具 + +### [ipatool](https://github.com/majd/ipatool) + +[@Parsifal](https://github.com/ParsifalC):一款通过终端下载 App Store IPA 的脚本工具,两行命令即可下载已经上架的 App 了(前提是你已经在手机上下载过该 App,即这个工具只是从你「已下载 App」里同步 IPA)。另外需要注意的是,如果账号开启了两步验证,则需要多试一次。第一次尝试会触发两步验证的验证码,第二次继续尝试并且将第一步获取到的验证码直接拼接到你账号密码后面即可。 + +```shell +#先执行一次 +ipatool download -b com.apple.testflight -e olddriver@gmail.com -p YourPassword$110 +==> ℹ️ [Info] Querying the iTunes Store for 'com.apple.testflight' in country 'US'... +==> ℹ️ [Info] Authenticating with the App Store... +==> ❌ [Error] An unknown error has occurred. + +#拿到上一次触发的验证码,比如123456,拼接到密码后面 +ipatool download -b com.apple.testflight -e olddriver@gmail.com -p YourPassword$110123456 +==> ℹ️ [Info] Querying the iTunes Store for 'com.apple.testflight' in country 'US'... +==> ℹ️ [Info] Authenticating with the App Store... +==> ℹ️ [Info] Authenticated as 'Old Driver'. +==> ℹ️ [Info] Requesting a signed copy of '899247664' from the App Store... +==> ℹ️ [Info] Downloading app package... [100%] +==> ℹ️ [Info] Saved app package to com.apple.testflight_899247664_v1.5.0_465.ipa. +==> ℹ️ [Info] Applying patches... +==> ℹ️ [Info] Done. +``` + +## 书 + +### [阅读亚马逊逆向工作法的几点收益](https://mp.weixin.qq.com/s/-FHtH2C8f7oKLh3QJ9DFWw) + +@叶孤城:推荐一本书叫做《亚马逊逆向工作法》,我买来看了一遍,受益匪浅。少有的在讲管理时,实操性极强,而不谈玄学的书。 + +## 音视频 + +### 🐢 [编码人声:新人该怎样入坑开源项目](https://dao.fm/2021/12/09/vol-333-编码人声:新人该怎样入坑开源项目?/) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):开源对普通程序猿来说似乎是很遥远的事情,这期播客请到了几位开源领域的大咖,聊一聊如何开始你的开源之旅。本期播客的主要内容: +- 嘉宾参与开源项目的心路历程 +- 开源的经济价值和社会价值 +- 如何开始参与一个开源项目 +- 只有程序员才能参与开源么 +- 开源对企业的价值在哪里 +- Github等开源平台的生态和挑战 +- 自海外诞生的开源文化,在中国会如何 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#188-2022.01.10.md b/Reports/2022/#188-2022.01.10.md new file mode 100644 index 000000000..748d662ec --- /dev/null +++ b/Reports/2022/#188-2022.01.10.md @@ -0,0 +1,181 @@ +# 老司机 iOS 周报 #188 | 2022-01-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) 提出。 + +> 各位新年好呀!过去的 2021 年对于老司机周报来说发生了很多事情,我们也为此写了份 [年终总结](https://mp.weixin.qq.com/s/v-ZBo0uQjJWyBKvQqWK_TQ) 给到大家,非常感谢各位读者长期以来的支持与关注。这是周报的第 188 期,也是 2022 年的第 1 期,新的一年大家一起加油! + +## 🌟 [App 加速器 - 线上活动](https://developer.apple.com/cn/accelerator/) + +[@Damonwong](https://github.com/Damonvvong):2022 年第 2/3 期「App 加速器 - 线上活动」来了!扫码即可报名~ + +### 在您的 app 中训练自定义 Core ML 模型 + +了解如何通过在您的 app 中动态训练 Core ML 模型来构建自适应和个性化体验。首先,我们将回顾您可以在本地创建哪些类型的模型,包括基于图像的任务 (比如风格迁移和图像分类)、音频相关的任务 (如自定义声音分类) 以及使用表列回归器。我们还将向您展示您的 app 如何学习人们的个人行为以构建更智能、更直观的功能。 + +### 使用 StoreKit 2 和 App Store Server API 为客户提供支持 + +了解如何使用 StoreKit 2、App Store Server API 和 App Store Server Notifications 为您的客户创造出色的应用内购买体验,并提供支持和退款。我们将探索实施方法,提供最佳实践,并和您一起实现如何进行客户管理和退款管理。 + +![image](https://user-images.githubusercontent.com/11873526/148687044-1daf6e8c-066c-423c-a849-c78bbb86af92.png) + +## 新闻 + +### 🌟 🐢 [阿里自研标准化协议库 XQUIC 正式开源](https://mp.weixin.qq.com/s/OrvjikvYyqlHAzGamLmpsw) + +[XQUIC](https://github.com/alibaba/xquic) 是阿里自研的 IETF QUIC 标准化传输协议库。XQUIC 是基于 IETF QUIC 协议实现的 UDP 传输框架,包含加密可靠传输、HTTP/3 两大块主要内容,为应用提供可靠、安全、高效的数据传输功能,可以极大改善弱网和移动网络下产品的用户网络体验。手淘图片、短视频等场景已经落地 GQUIC,并拿到了一定的网络体验收益。 +XQUIC 是一个轻量、高性能、标准化的跨平台协议库,具有以下优势: +- 轻量性 - Android/iOS 双端的编译产物均小于 400KB +- 高性能传输 - 相对于内核态 TCP+HTTP/2 优化 20% 的网络请求耗时 +- 标准化 - 实现了整套 IETF QUIC 标准协议,包含传输层、加密层、应用层协议栈 +- 易用性 - 支持 Linux/Android/iOS/Mac 等平台,客户端可以通过 SDK 方式很方便地接入并使用、完善的文档(中文/英文对照)、demo 示 例和单测 + +### [Swift implemented in Swift](https://github.com/apple/swift/tree/main/SwiftCompilerSources) + +[@kemchenj](https://kemchenj.github.io):Swift 仓库近日添加了一个 Swift implemented in Swift 的项目,旨在使用 Swift 实现 Swift 编译器的部分功能。目前实现了 SIL 的桥接和部分简单的 SIL Pass,短期目标是将 SIL Optimizer 的功能改为使用 Swift 进行实现。 + +### [苹果“换芯”之路再起波折,M1 芯片功臣被英特尔挖走了](https://www.infoq.cn/article/wLXQeEayVLEdQSJyd6Eq) + +1 月 6 日,苹果 Mac 系统架构总监 Jeff Wilcox 在领英上宣布,他将离开苹果,前往英特尔担任新职位。他将担任英特尔研究员和设计工程组的首席技术官的领导职位,专注于客户端 SoC 架构。Jeff Wilson 说,他计划与英特尔一起打造开创性的 SoC。 + +## 文章 + +### 🌟 🐕 [小程序容器首屏秒开优化实践](https://mp.weixin.qq.com/s/7qeBZZ1KusME_SO3_A4L9g) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了饿了么 APP 小程序秒开的实践干货。 + +- 1、包和包信息(前置预请求、APP内预置、异步更新) +- 2、Render 创建、资源加载(前置预创建、资源前置分阶段预加载) +- 3、Worker 创建、资源加载(前置预创建、资源前置分阶段预加载) +- 4、首屏接口预请求(前置预请求) +- 5、首屏渲染(加载首屏快照) +- 6、Appx 框架(Appx2.0) +- 7、检测工具和数据验证 + +### 🌟 🐎 [Xcode13 自适应瀑布流 Layout 在 iOS15 上对 crash 的定位及修复](https://mp.weixin.qq.com/s/sdj5Ym186VkpxXwExIpC0A) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了排查特定构建环境,配上特定系统遇到的死循环案例。排查时作者逐步减少可能因素的过程较有学习价值。 + +同时也能看出本地开发环境与打包构建环境保持一致的重要性,推荐更快地适配新版 Xcode,如果确实有困难也应该设置 deadline,在 deadline 到来前集体完成升级。除了能减少维护多套打包资源,还能减少遇到兼容性问题排查的成本。 + +### 🌟 🐕 [Flutter 轻量级引擎实践与优化](https://mp.weixin.qq.com/s/n6rA0KyUSMGnnzG6Ij6edA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 开发中一直以来在 View 角度的使用和展示都是棘手问题,在 Flutter 2.0 之后 Flutter Engine Group 功能得以改善,字节跳动端团队从 Engine Group 上解决 View 级别的使用实践出发,并针对 Engine Group 场景下做了大量优化: +- 入口参数配置 +- 多引擎数据通信 +- 数据更新同步 +- 图片缓存共享 +- iOSSurface 释放 + +### 🐢 [TCA - SwiftUI 的救星?](https://onevcat.com/2021/12/tca-1/) + +[@zvving](https://github.com/zvving):从 UIKit 到 SwiftUI,声明式布局、数据传递、状态管理都带来极大的变化,在复杂项目中,如何通过 SwiftUI 构建可组合、易维护、可测试的项目架构本身就是一件很有挑战的事,受 [Elm](https://elm-lang.org) 启发诞生的 [TCA (The Composable Architecture)](https://github.com/pointfreeco/swift-composable-architecture) 是可能的答案之一。 + +- 通过 Reducer 统一 Action 带来的 State 变化,调试、测试更友好 +- 分割 Store/ViewStore:避免不必要的 view 更新,细粒度 view 有灵活的组合能力 +- 跨 UI 框架能力:为 UIKit 到 SwiftUI 提供更稳妥的过渡路径 +- 单个 Feature 有能力自由组合成为更大的 feature,这也是 Composable 名称的来源 + +[@onevcat](https://onevcat.com/tabs/about/)通过系列文章,用逐步完善的计数器例子介绍 TCA,目前已推出 [一](https://onevcat.com/2021/12/tca-1/)、[二](https://onevcat.com/2021/12/tca-2/),更多精彩内容敬请期待! + + +### 🐕 [赵海平与张宏波谈编程语言](https://mp.weixin.qq.com/s/FI2WFOENBxgCbykvy9wBYQ) + +[@莲叔](http://aaaron7.github.io/):伴随着各个领域的技术体系的升级,编程语言一直在持续的迭代和发展。拿移动端来说,Swift/Kotlin 方兴未艾。竟还横空出世了 Rust,成为移动技术领域的新宠。服务端技术也一样,微服务的大火让 GO 也成为主流的服务端开发语言。本篇文章是两个在编程领域颇具名气的前辈针对时下流行的编程语言的设计背景、优劣势进行讨论,很有价值。其中也讨论到了编程语言设计的核心标准:解决当下面临的痛点问题。 这也能够帮助我们在学习语言的时候对于语法和最佳实践有更深刻的认识。 + +### 🐕 [Swift 在 58 安居客房产实践](https://mp.weixin.qq.com/s/xMhVbw2-z2sDQbF9I8_0uA) + +[@xiaofei86](https://github.com/xiaofei86):随着苹果对 Swift 的大力推广,越来越多以 Objective-C 为基础的老项目逐渐以混编的形式开始尝试 Swift。本文 58 安居客房分享了自己的产品率先从 Objective-C 向混编改造的经验,以及在改造过程中遇到各种问题的分析及解决过程。 + +## WWDC21 内参 + +### 🌟 [检测和诊断 App 内存问题](https://mp.weixin.qq.com/s/E80VEIJma66fj7BZy1cCeQ) + +本 Session 讲解了如何使用 Xcode 检测和诊断内存问题。首先需要了解内存构成,内存占用对 App 的影响、以及一些常见的内存问题,最后学习使用一些工具来分析并解决内存问题。 + +### [iPhone 相机拍摄新变化](https://mp.weixin.qq.com/s/swzI8C1NHeDFQNBbkQQhUQ) + +去年 Apple 对 iPhone 的相机升级是非常明显的,比如增加了 10-bit HDR 视频的拍摄,Apple ProRaw 的支持等。同时得益于 M 系列/A 系列芯片强大的算力,Apple 目前对于拍摄上的思考和提升更多走的是 [计算摄影](https://zh.wikipedia.org/zh-hans/%E8%AE%A1%E7%AE%97%E6%91%84%E5%BD%B1) 路线,而非在光学硬件上做大幅度提升。所以今年的 WWDC Apple 将相机的更多能力开放给开发者使用。 + +### [更好用的 sheet](https://mp.weixin.qq.com/s/AR3SH9ddgKAiBDOVuPPUug) + +在 WWDC19 的 [Modernizing Your UI for iOS 13](https://developer.apple.com/videos/play/wwdc2019/224) 中,苹果介绍了 sheet 这种 present 视图控制器的方式。在 WWDC21 的 [Customize and Resize sheets in UIKit](https://developer.apple.com/videos/play/wwdc2021/10063/) 上,苹果介绍了对 sheet 展示方式的一系列优化,包括自定义视图大小、背景可交互等一系列新能力。让我们一起具体了解下吧 ~ + +## 工具 + +### [RegexLearn](https://regexlearn.com/zh-cn) + +[@红纸](https://github.com/nianran):RegexLearn 是一个正则表达的学习网站,与其他网站不同的是,它是一个游乐场,通过实践来学习和测试正则模型。 + +> 推荐人:[KeithBird](https://github.com/KeithBird) + +### 🐎 [用 rust 实现苹果的 atos 工具,atosl-rs 发布啦](https://mp.weixin.qq.com/s/Oy9jXMnVMYF55nqUpN2WXQ) + +[@Smallfly](https://github.com/iostalks):iOS 符号解析是非常基础的需求,苹果在 macOS 平台上提供了 `symbolicatecrash`, `atos` 等工具。作者使用 Rust 语言实现了一个跨平台的解析工具 `atosl-rs`,并做了开源,有兴趣可以围观。 + +## 代码 + +### [Rainbow](https://github.com/onevcat/Rainbow) + +[@享耳先森](https://github.com/iblacksun):Rainbow 是 [@onevcat](https://onevcat.com/tabs/about/) 开源的一个控制台和终端日志输出库,可以给文字添加颜色、背景色、样式等信息,支持 Apple 和 Linux 平台。 + +### [CreateAPI](https://github.com/kean/CreateAPI) + +[@Damien](https://github.com/ZengyiMa):CreateAPI 是用 Swift 编写的 OpenAPI 规范生成代码的工具,它具备 4 大优势: + +* 快速:在不到一秒的时间内处理 100K 行 YAML 的规范。 +* 智能:生成的 Swift 代码看起来就像手写的一样标准。 +* 可靠:在 100 万行公开可用的 OpenAPI 规范上测试,每次都能生成正确的代码。 +* 可定制:提供大量的定制选项来完成各种精细化控制 + +## 音视频 + +### 🚧 🐢 [Springboard: the secret history of the first real smartphone (Full Documentary)](https://www.youtube.com/watch?v=b9_Vh9h3Ohw&ab_channel=TheVerge) + +[@老驴](https://weibo.com/u/6090610445):科技行业总有存在一些超越时代的产品,他们生不逢时,最后不一定会成功,甚至大部分都失败了,但是他们对行业的引导性让之后的其他人,最终在合适的时间,合适的地点,做出合适的产品。就比如智能手机,现在的代表是 iPhone,但是在 iPhone 之前,有一些公司已经做了一些对智能手机的尝试。Verge 做了一期纪录片,采访了当时最早那批坚信移动互联网革命的人,他们来自 Handspring,第一个做出了世界上真正意义上的智能手机:Treo 系列。Handspring 后来也被 Palm 收购,而当时 Handspring 坚信的移动浪潮也最终来临。 + +### 🌟 卖鱼桥分桥 - 老司机技术周报四周年纪念 + +[@Damonwong](https://github.com/Damonvvong): 上周受周报创始人 [@卓同学](https://github.com/lacklock) 之约,我和 [@Parsifal](https://github.com/ParsifalC) 一起做客了他播客节目「卖鱼桥分桥」,聊了聊关于老司机技术周报的一些背后的故事,如果你对我们的故事也比较感兴趣可以在闲暇之余听一下哈~ + +- [老司机技术周报四周年纪念(上):成立、纳新、技术沙龙](https://www.xiaoyuzhoufm.com/episode/61d2baf2cb0f5d7d1b7ccc44?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D) +- [老司机技术周报四周年纪念(下):主编交接](https://www.xiaoyuzhoufm.com/episode/61d442e0cb0f5d7d1b7ccca8?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D) + +## 摸鱼周报 + +[@摸鱼周报 #40](https://mp.weixin.qq.com/s/y4229I_l8aLILR7WA7y01Q):第四十期摸鱼周报来了,一起来看下本期概要: + +* 话题:我们启用了新封面 +* Tips:Swift 中的预编译 +* 面试模块:dyld 2 和 dyld 3 的区别;Objective-C 及 Swift 编译流程 +* 优秀博客:包依赖管理工具 +* 学习资料:从头开发一个迷你 Go 语言编译器 +* 开发工具:git 资源库浏览工具 Tig + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +公众号回复「WWDC」可以获取往年《WWDC 内参》,回复「PPT」可获取往期线下沙龙 PPT 材料。 + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#189-2022.01.17.md b/Reports/2022/#189-2022.01.17.md new file mode 100644 index 000000000..85d49a350 --- /dev/null +++ b/Reports/2022/#189-2022.01.17.md @@ -0,0 +1,164 @@ +# 老司机 iOS 周报 #189 | 2022-01-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) 提出。 + +## 新闻 + +### 手机 QQ 体积暴增,接近 900M + +[@Damonwong](https://github.com/Damonvvong): 上周手机 QQ 迎来今年的第一次升级,给大家带来了一个巨大的 “惊喜”,iOS 版本的安装包已经达到了 879M,有眼尖的网友发现内置了一个 UE4 虚幻引擎,但是用在了哪个功能至今还未发现。手机 QQ 和元宇宙会擦出怎么样的火花,让我们拭目以待 ~ + +### [“App 分析”现已可用于 app 内活动](https://developer.apple.com/cn/news/?id=pa0x2dzk) + +App Store Connect 中的“App 分析”能有效帮助您了解用户如何发现您的 app 并与之互动。您现在可以查看有关 app 内活动的信息,包括活动页浏览量、提醒和通知数据,以及由 app 内活动带来的下载和重新下载次数。每个指标都可以按照地区、来源类型、设备以及更多分类进行查看,让您能轻松了解您的 app 内活动如何推动了 app 的增长和成功。 + +### 🐎 [字节跳动技术 iOS 技术沙龙正式报名开启](https://mp.weixin.qq.com/s/yPTIOxJtl4BsjkDN0rXDdw) + +[@Leo](https://github.com/leomobiledeveloper):字节跳动第三次技术沙龙,本次主题是关于 iOS 开发的,可以通过这次沙龙了解「抖音 iOS 基础技术」的技术细节。本次分享的主题涉及架构、构建、自动化、性能、稳定性等领域,内容很丰富,时间在1月22日下午,进入文章即可免费报名,获取在线观看地址。 + +## 新手推荐 + +### 🐎 [iOS 浮点类型精度问题小记](https://juejin.cn/post/7047767024931438605) + +[@极速男孩](https://github.com/ztlyyznf001):浮点数精度丢失的问题是不少人都会面临的问题。本文主要介绍了在 iOS 中如何避免精度丢失的问题,并且解析了精度丢失的主要原因。 + +### 🐎 [Loop](https://www.swiftbysundell.com/basics/loops/) + +[@享耳先森](https://github.com/iblacksun):Swift 有多种内置语法对集合类型进行迭代:`for` `forEach` `enumerated()` `while` 等,本文介绍了各种语法的具体差异,建议阅读。 + +## 文章 + +### 🌟 🐢 [【译】SE-0302 Sendable 和 @Sendable 闭包](https://kemchenj.github.io/2022-01-07/) + +[@四娘](https://kemchenj.github.io/):去年 WWDC 里 Swift 更新了 Concurrency 相关的功能,后续的更新提供了一定程度的向后兼容,让 iOS 13 的程序也可以用上这些功能。 + +虽然 WWDC 上大部分篇幅都是在介绍 async/await,结构化并发和 Actor,但实际接入过程中这些功能并没有带来太多问题,反而是 Sendable 的检查难住了我,深入了解之后才发现这个功能是帮助 Concurrency 走向 type-safe 的关键。 + +通过翻译这篇文章解答了很多我在这个过程中的疑惑,非常推荐想要接入 Concurrency 的同学进行阅读: + +> Swift Concurrency 的功能渴望建立一个安全而强大的编程模型。我们希望实现这三件事: +> +> 1. 我们希望 Swift 程序员在试图 跨并发域传递 可能引入不受保护的共享可变状态 时得到一个静态的编译器错误。 +> 2. 我们希望高阶程序员能够实现包含复杂技术的库(例如并 ConcurrentHashTable),并且能够让其他人以一种安全的方式去使用。 +> 3. 我们需要拥抱现有的世界,其中包含了很多在设计时没有考虑到 Swift 并发模型的代码。我们需要一个平滑和渐进的迁移策略。 + +### 🌟 🐢 [基于 dylib 注入原理实现 iOS 热重载框架 CocoaHotReload](https://mp.weixin.qq.com/s/XsfYUBD2YK9Tq4cfoGW4JA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):非常详细的热重载实现原理介绍,支持真机(iOS 13+)、Swift 的 4 种函数派发方式都能支持、支持 Storyboard & xib 资源文件等等。方案十分完整,关键实现也已贴出代码,推荐一读。文章主要内容如下: + +- Mac app,主要职责是根据修改文件查找对应的编译指令并执行生成 .o 文件,接着链接 .o 文件及依赖的库生成 dylib 动态库 +- iOS Framework,主要职责是 动态库注入 和 资源包更新 + - ObjC 类替换,Swift 函数替换,C函数替换(Dobby 实现) + - hook 函数处理,解决函数调用栈丢失与死循环的问题 +- 解决 Swift 函数热重载问题 +- 解决部分库设置 Symbol hidden by Default 为 YES 导致的 Symbol not found 问题 + +### 🌟 🐕 [基于 Web 内核的微信小程序框架实践](https://mp.weixin.qq.com/s/vEu2Ft4c6LHPeUBHChjfFA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 微信小程序技术一直作为业界跨端方案的标杆一样的存在,此次小程序在内核上大跨步式改动,从类 PWA 转入 Chrome 内核以获得在 PC 层面的更多能力,并集成了 Node ,目前还未在 iOS 上应用,但作为跨端方案还是很有借鉴意义的,推荐相关同学深入阅读。 + +### 🐢 [A short-term roadmap for C++ interop](https://forums.swift.org/t/a-short-term-roadmap-for-c-interop/44768) + +[@Damien](https://github.com/ZengyiMa):本文是 Swift 社区提出的 Swift 和 C++ 交互的 roadmap 规划。其中主要目标是希望在接下来的几个月里,Swift 编译器可以完全导入 libc++ 头文件、LLVM 头文件和 Swift 头文件而不崩溃。对 Swift 编译相关感兴趣的同学建议一读。 + +### 🐢 [Swift 在手淘商品评价的技术重构与实践](https://mp.weixin.qq.com/s/J4wxvr5JvibG7vUtRz3ing) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文主要是对手淘探索 Swift 业务落地的一个总结。更快、更安全且更具备表达性的 Swift,这些年明显比 OC 发展的更好,国内外混编应用的占比持续增高,长远来看,使用 Swift 几乎是日常开发的不二之选。对于大型项目,引入 Swift、从哪些业务模块引入 Swift、引入 Swift 对当前项目架构的冲击等都是需要慎重考量的,文中也都有详细阐述,旨在希望可以给大家在技术选型或探索避坑的时候给到一点帮助。 + +### 🐎 [Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践](https://mp.weixin.qq.com/s/BApDWf9acuFBSONzV2OnEQ) + +[@老峰](https://github.com/gesantung):2021 年 12 月 08 日,苹果推出 App Store 产品页的新功能,在 App Store 中开发者可以针对 app 产品页的不同版本上使用不同的图标、截屏和 app 预览,通过 A/B Test 找出效果最佳的版本。本文主要介绍了使用 Xcode 13 在 Assets.xcassets 创建多套测试的图标的操作细节以及要注意的一些点。 + +### 🐎 [让 UIKit 更优雅易用:Block 回调改造](https://juejin.cn/post/7045133536495403015) + +[@JonyFang](https://github.com/JonyFang):HWBlocksUI 对 UITableView,UITextField,UIButton,UISwitch 等常用的 UIKit 类进行了扩展,将之前需要 Delegate 或 target+selector 回调的方式改成了 Block。使用 Block 的优势体现在: + +1. 代码紧凑,无需声明协议,可以将相关代码逻辑集中在一起,降低开发调试成本; +2. 允许访问上下文变量,无需再专门抽出实例变量供不同代理方法共享; + +### 🐢 [Cube 技术解读 | Cube 小程序技术详解](https://mp.weixin.qq.com/s/Sm2xtyxPMGucUHtaUy_aOQ) + +[@Leo](https://github.com/leomobiledeveloper):在动态化或者跨端开发里,小程序是一个业界典型的实现方案。Cube 是阿里出品的轻量级小程序技术栈,具有体积小、启动快、内存占用低等特点。本文详细介绍了 Cube 小程序技术栈与技术演进实践,包含了布局计算、样式能力、组件支持、引擎优化等方方面面,推荐阅读。 + +### 🐢 [Swift Playgrounds 4 娱乐还是生产力](https://mp.weixin.qq.com/s/Uyd9Nf12HpmslYR0zOQaEQ) + +[@anotheren](https://github.com/anotheren):赶在 2021 年底,苹果终于发布了 Swift Playgrounds 4,作为近年来最具革命性意义的版本,Swift Playgrounds 4 提供了在 iPad 上开发并发行 App 的能力。本文介绍了这个版本的最新功能。如果你还没入门,不妨再读一下下面这个系列: + +- [玩转 Xcode Playground(上)](https://mp.weixin.qq.com/s/rHNrTt7CReTLL8aubz0SqQ) +- [玩转 Xcode Playground(下)](https://mp.weixin.qq.com/s/_kggsB9kL5jYi-40KDMsrQ) + +### [一场开源 RSA 库引发的“血案”](https://mp.weixin.qq.com/s/UM_Nrfd2I0oVosD6iQDn5w) + +[@老驴](https://weibo.com/u/6090610445):58 同城团队的一篇使用开源库踩坑的分享。简单来说就是 58 团队在使用了开源库后,上线发现频繁崩溃吗,debug 后发现原作者没有正确处理多线程。这类问题其实并不少见,很多人在使用开源库的时候,并没有去仔细调研库,而使用以后出现问题,甚至很难自己修复。也希望这篇文章能对大家是个提醒,最好在用开源库之前,先读一读代码,理解一下代码的意思,这样即便真的踩坑,需要 debug,也会轻松不少。 + +## WWDC21 内参 + +### [SwiftUI 技术内幕](https://mp.weixin.qq.com/s/Q8EuaXei9Q0q-3OyD6n9Bw) + +通过阅读本文,带你一起深入解读 SwiftUI,提高应用程序的性能。 + +### [初探 Swift 算法和集合](https://mp.weixin.qq.com/s/WpvuuUXQPwBHZpk8OmuPDg) + +本文主要介绍 Swift 的算法和集合开源包。列举了其中的几个算法和数据结构,深入了解 Swift 实现和优化方式。 + +## 工具 + +[Automatically merging conflicts in Xcode project files](https://blog.kulman.sk/automatically-merge-xcode-project-conflicts/) + +对于大一些的项目工程,参与提交代码的人比较多时,常常会遇到需要处理代码冲突的时候。常规的代码冲突只需要通过代码片段确认逻辑就可以解决,而有些文件格式,可读性很差,解起来很麻烦,例如 Xcode 项目文件(project.pbxproj)。Kintsugi 是一个轻量级工具,可以自动解决 Xcode 项目文件中的冲突。只需要通过 gem 安装: +``` +gem install kintsugi +``` +然后执行下面的命令,kintsugi 会帮助解决冲突,非常方便 +``` +kintsugi App/project.pbxproj +``` + +## 代码 + +### [Flipper](https://github.com/facebook/flipper) + +[@Barney](https://github.com/BarneyZhaoooo):Flipper 是 Facebook 开源的一个面向移动端(Android/iOS)开发者的桌面调试平台。 + +其主要包含: + +- macOS 的桌面应用程序 +- Android 和 iOS 的原生 SDK + +## 摸鱼周报 + +[@摸鱼周报 #41](https://mp.weixin.qq.com/s/DNXrfZgx0JaXyvfVZ4sYVA):第四十一期摸鱼周报来啦,一起来看下本期概要吧: + +- 话题:In-App Events 数据分析上线了;线上沙龙:抖音 iOS 基础技术大揭秘。 +- Tips:在 Objective-C 中标记构造器为指定构造器。 +- 面试模块:如何检测内存泄露。 +- 优秀博客:野指针的捕获与防护。 +- 学习资料:一份可视化的 Web 技能列表。 +- 开发工具:SwiftInfo 是一个 CLI 工具,用于提取、跟踪和分析对 Swift 应用程序有用的指标。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#190-2022.01.24.md b/Reports/2022/#190-2022.01.24.md new file mode 100644 index 000000000..d1fbbef98 --- /dev/null +++ b/Reports/2022/#190-2022.01.24.md @@ -0,0 +1,183 @@ +# 老司机 iOS 周报 #190 | 2022-01-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) 提出。 + +## 文章 + +### 🌟 🐕 [Bazel](https://bazel.build/) + +[@红纸](https://github.com/nianran):Bazel 是最近比较热点的话题之一。作为新的构建系统,它具有远端缓存、远端执行、跨平台、高度扩展、高性能等诸多特性。不仅仅局限于 iOS 的构建领域,在其 Rules 的帮助下,可以扩展很多可能性。 +这边为大家稍作整理,给大家作为参考: +- 几篇入门: + - [Bazel 官网](https://bazel.build/) + - [Bazel 入门 - 放浪者](https://zhuanlan.zhihu.com/p/262171925) + - [Bazel - Sunxxxxx丶](https://www.jianshu.com/p/727cbf544c47) +- 几篇分享: + - [用 bazel 更快更稳定的构建 iOS 项目](https://bilibili.github.io/2020/07/22/bazel_ios.html) + - [基于 Bazel的 iOS MonoRepo 实践](https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw) + - [Improving Build Performance of LINE for iOS with Bazel](https://engineering.linecorp.com/en/blog/improving-build-performance-line-ios-bazel/) +- 几个工具、库: + - [PodToBUILD](https://github.com/pinterest/PodToBUILD):将 Cocoapods 的仓库转化为 Bazel 的 BUILD 文件 + - [cocoapods-bazel](https://github.com/bazel-ios/cocoapods-bazel):Cocoapods 的 bazel 插件 + - [tulsi](https://github.com/bazelbuild/tulsi):将 Bazel 的 BUILD 工程转成 Xcode 识别的 xcodeproj 工程 + - [xchammer](https://github.com/pinterest/xchammer):将 Bazel 的 BUILD 工程转成 Xcode 识别的 xcodeproj 工程 +- Awesome Rules: + - [bazelbuild/rules_apple](https://github.com/bazelbuild/rules_apple) + - [bilibili/rules_apple](https://github.com/bilibili/rules_apple) + - [line/rules_apple_line](https://github.com/line/rules_apple_line) + +> PS1: 内容比较多,大家可以慢慢消化一下。关于 Bazel 的讨论,也欢迎加入我们粉丝群进行交流,详情 @老王。 +> PS2: 字节于 2022/01/22 进行了 JoJo 构建系统的分享,Bazel 作为其核心的组成部分之一。分享文章跟视频暂时没有发布,大家可以等待一下。 + +### 🌟 🐕 [GCDAsyncSocket 在 iOS15 出现 -[_NSThreadPerformInfo dealloc] 崩溃排查笔记](https://mp.weixin.qq.com/s/Tn8SN1eNaGkR1ddEKTkzPQ) + +[@邦Ben](https://weibo.com/linwenbang):从 iOS 15.0 Beta5 开始,集成开源库 GCDAsyncSocket 的 APP 开始出现 -[_NSThreadPerformInfo dealloc] 相关的崩溃,作者从堆栈开始分析,讲述整个排查过程思路,并且每个步骤的分析以及原理都进行了很深入的研究,从而得到了最后的 crash 原因以及给出解决方案,结论先放出来,但是过程非常推荐一看。 + +- 结论:经过前面的分析,我们可以得知,iOS 的新系统中存在一个 bug,该 bug 导致即使我们通过将参数waitUntilDone 设置为YES 的方式阻塞当前线程时,仍然存在触发悬垂指针的可能。 +- 方案: + 1、通过单例持有 GCDAsyncSocket,避免调用 -[GCDAsyncSocket dealloc] + 2、先主动调用-[GCDAsyncSocket disconnect],再释放GCDAsyncSocket的实例 + 3、通过调整withObject:的参数,避免将 GCDAsyncSocket 的实例进行传递 + +### 🐕 [浅谈软件开发架构模式](https://mp.weixin.qq.com/s/cWp4J-XmvaoWHRMeuVDzPQ) + +[@Smallfly](https://github.com/iostalks):架构对开发者来说都不陌生,然而相同的架构模式在不同场景下可能有所区别。本文作者结合具体的问题和案例,从个人角度阐述了对 MVC/MVVM/VIPER 等架构模式的理解及运用。 + +### 🌟 🐕 [字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路](https://mp.weixin.qq.com/s/qzA1g4mAH_Kgzc4fwVK2Rw) + +[@Leo](https://github.com/leomobiledeveloper):卡顿、卡死会造成应用体验大幅下降,进而影响留存、时长等核心业务数据。本文介绍了字节 APM 框架 Heimdallr 是如何监控卡顿卡死的,细节在字节系应用上验证和完善,被证明了是一套全面、稳定、可靠的技术方案。 + +### 🐢 [移动域全链路可观测架构和关键技术](https://mp.weixin.qq.com/s/grW6r_cpmrxEJ-pMacKtGg) + +[@xiaofei86](https://github.com/xiaofei86):监控告诉我们系统的哪些部分是工作的,而可观测性告诉我们那里为什么不工作了[[1]](https://xie.infoq.cn/article/598fd893709f01ae751dbd7b8?utm_medium=article)。相比传统的监控,可观测性能够通过结合数据,并且将数据有机联系在一起,产生更好的连接,帮助我们更好的观察系统的运行状况,快速定位和解决问题。 + +本文淘宝 App 基础团队通过对可观测理念的理解并结合客户端在运维排查、度量监控、全链路优化等方面遇到的实际问题,阐述团队对移动领域全链路技术理念的原创性应用。读者将收获移动技术域体验优化的思路转变,以及软件定义体验的沉淀和研发实践。 + +### 🐕 [iOS 如何记录堆栈信息?](https://juejin.cn/post/7049267131036205086) + +[@AidenRao](https://weibo.com/AidenRao):在 APP 卡顿、Crash 以及某些特定时机,开发者会想记录一下当前的堆栈信息。这篇文章主要从 [BSBacktraceLogger](https://github.com/bestswifter/BSBacktraceLogger) 源码入手,去理清记录堆栈信息的原理:回溯栈帧,获得函数调用地址,解析 MachO 文件获取函数名。 + +### 🌟 🐕 [从 0 到 1:美团端侧 CDN 容灾解决方案](https://mp.weixin.qq.com/s/BA55Op8A29sXq-_SHv1igg) + +[@JonyFang](https://github.com/JonyFang):本文结合美团外卖业务中的具体实践,介绍了一种在端侧感知 CDN 可用性状况并进行自动容灾切换的方案,通过该方案可有效降低业务对CDN异常的敏感,提高业务的可用性,同时降低CDN运维压力。 + +### 🐎 [静态库冲突问题思路全解](https://mp.weixin.qq.com/s/LAFS-6Oycnzu5kOhS9d7pA) + +[@AidenRao](https://weibo.com/AidenRao):iOS 开发中经常会遇到静态库冲突的问题,Xcode 报错关键词是duplicate symbol xxx,造成冲突的常见原因一般有两种: + +- 项目中引入了命名不同的同一个静态库。 +- 引入了不同的 SDK,SDK 中引用了同一个静态库。 + +本文介绍了解决冲突的多种方案,并对优缺点进行了对比。 + +### 🐕 [淘宝小部件 Canvas 渲染流程与原理全解析](https://mp.weixin.qq.com/s/o772Ziaxj64IOXXnckPFNQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要阐述 Canvas 在小部件下的渲染原理。从端上技术视角看,小部件首先是一个业务容器,它的特点是**DSL标准化、跨平台渲染、跨场景流通** + +- **端侧整体技术架构** +- **多视角看渲染流程** + +### 🐎 [從前端視角看 SwiftUI](https://blog.kalan.dev/2022-01-09-learn-swiftui-from-frontend-view/) +[@Smallfly](https://github.com/iostalks):SwiftUI 和 React 同为声明式框架,在使用上存在相似之处。本文站在前端视角,分别从组件化,响应式机制,状态管理,数据绑定等几个维度对比了两者使用上的异同点。而在开发体验上,Swift 作为静态编译型语言和 JavaScript 的动态性相比仍有差距。 + +### 🐎 [Apple’s use of Swift and SwiftUI in iOS 15](https://blog.timac.org/2021/1219-state-of-swift-and-swiftui-ios15/) + +[@anotheren](https://github.com/anotheren):在最新的 iOS 15 中,Swift/SwiftUI 在内置 App 的使用率进一步提升,如果你还在犹豫新技术的使用,看看 Apple 对于有内置 App 的改变。 + +### 🌟 🐕 [iOS 之深入理解 Image 与 MachO](https://juejin.cn/post/7053289480131706911) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Mach-O 以及其三个主要部分:Header、Load Commands 和 Data 的数据结构和功能。也介绍了 image、 Segment 和 Section 的相关操作 API + +### 🌟 🐕 [iOS 线上野指针探测实践与展望](https://mp.weixin.qq.com/s/BNIWBwemmz4isbjBb9-pnQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):野指针问题线下难以复现,crash发生时的堆栈也大概率不是问题的直接原因,因此线上的野指针检测方案是很值得探索的。为了尽量减小对帧率与内存的影响,作者也进行了三个方向的优化: + +- 仅监控必要的类型,对于系统类则通过基于 Bind 信息的方案,监控项目中使用到的系统类 +- dealloc 中减少耗时操作:不要调用任何 OC 代码、不要使用 objc_setAssociatedObject、先判断 isTaggedPointer +- 多线程处理对象释放与入池;用堆栈距离 (UInt64)&_mh_execute_header 的偏移替代堆栈,用 memcpy 替代 vm_read_overwrite + +### 🐕 [用 SwiftUI 实现一个开源的 App Store](https://juejin.cn/post/7051512478630412301) + +[@JonyFang](https://github.com/JonyFang):App Store 在 iOS 11 之前,App 排行榜一直是衡量开发者 App 活跃度的指标,在 iOS 11 后苹果弱化了榜单功能,改为了二级入口,相对之前榜单查询变得困难。编者通过 SwiftUI 结合开放 API 实现了一个可查看 App 榜单、搜索、信息、发布生效等功能的 App,该项目已开源。入门 SwiftUI 的同学,可以作为参考项目学习 SwiftUI。 + +### 🌟 🐕 [干货 | Dart 并发机制详解](https://mp.weixin.qq.com/s/WCvv7DXzWXNRaMtM-0u7pA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在日常的 Flutter 开发中最常接触到的便是 async-await 异步机制,鲜少有碰到使用 isolate 的情况,本文从 async-await 切入带你详细了解 isolate 的原理,生命周期、多 isolate 之间通信等,小编推荐所有 Flutter 开发同学仔细学习。 + +### 🐕 [在 SwiftUI 下定制手势](https://mp.weixin.qq.com/s/V_8jP3OPJa58eRz442LlQA) + +[@老峰](https://github.com/gesantung): SwiftUI 目前提供了 5 种预置手势,分别为点击、长按、拖拽、缩放和旋转,其本身没有采用对 UIGestureRecognizer(或 NSGestureRecognizer)进行包装的形式,而是重构了自己的手势体系,由于缺乏提供底层数据的 API,严重制约了开发者的深度定制能力,本文通过如下示例讲解了 SwiftUI 下定制手势: +- 轻扫:DragGesture 获取判断移动方向的数据,根据偏移量判断方向 +- 实现一个可以记录时长的按压手势:通过计时器在指定时间间隔后向闭包传递当前按压的持续时间。使用 GestureState 保存点击开始的时间 +- 实现提供触摸位置信息的点击手势:使用 simultaneously 将两种手势联合起来,从 DrageGesture 中获取位置数据,从 TapGesture 中退出 + +### 🐕 [iOS瘦身!一个让50%本地图片消失的方案](https://juejin.cn/post/7053978539523047437) + +[@水水](https://www.xuyanlan.com): 安装包瘦身一直是老生常谈的问题,这篇文章尝试了一个比较有意思的图片管理尝试 - 云端图片资源管理方案。基本思路是把可能未使用的图片通过脚本剔除出项目,在App启动后动态加载那些被剔除图片的zip包。具体实施方案和注意事项文章中都有提到,正在为安装包瘦身烦恼的读者朋友,感兴趣的可以看看~ + +### 🐕 [手机 APP 是不是在偷听我说话?](https://mp.weixin.qq.com/s/FCOrMXeV53YcoKgQ869aYw) +相信很多读者会有一个疑问,手机是不是在偷听我说话?可能今天刚刚跟同事说了买什么东西,结果一打开某个 app,第一页就正好显示了刚说的东西,这看起来很可怕。最近一期“猿桌派”节目,几位嘉宾就告诉了我们这个问题的答案,想知道答案的不妨听一听这期界面,除了这个问题,还有很多关于数据打点等的干活哦。 + +## 摸鱼周报 + +[@摸鱼周报 #42](https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU2MDQzMjM3Ng==&scene=124#wechat_redirect):第四十二期摸鱼周报来啦,一起来看下本期概要: + +* 话题:2022年1月31号之后提交的应用需提供账号删除功能。 +* Tips:openssh 8.8 默认禁用 ssh-rsa 加密算法导致 git 验证失效。 +* 面试模块:如何治理 OOM。 +* 优秀博客:一些优秀开发者的年终总结。 +* 学习资料:程序员考公指南;Vim 从入门到精通(中文)。 +* 开发工具:摸鱼单词,专注于利用碎片时间学习记忆英语单词。 + +## 代码 + +### [XMachOViewer](https://github.com/horsicq/XMachOViewer) + +[@Damien](https://github.com/ZengyiMa):XMachOViewer 是支持 Windows、Linux 和 MacOS 的 MachO 文件查看器和编辑器。它具备以下能力: + +* 启发式扫描 +* 字符串查看器 +* 十六进制查看器 +* 汇编查看器( x86/64, ARM, PPC, m68k) +* 熵值查看器 +* 哈希查看器 +* 密码搜索 +* 名称符号解析 + + +### [PAG](https://mp.weixin.qq.com/s/FncvW2ObIJGafk4X7EAZ-A) +[@莲叔](http://github.com/aaaron7):PAG 是近期技术社区比较热门的话题。PAG 是腾讯出品的一款特效 SDK,能够直接将设计师在 AE 设计的特效转换后直接在手机端展示,应用场景复杂的可以延伸至视频编辑的各种转场、贴纸特效,简单的也可以作为 Lottie 的替换,来实现端内一些 UI 动画效果。腾讯开放这款 SDK 的使用已经有一段时间,近期正式宣布了开源。开源意味着接入的成本与风险大大降低,对于业务有了更大的可控性,同时能享受到 PAG 的各种性能优化。如果你的业务有相关的场景,不妨可以了解一下。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#191-2022.02.14.md b/Reports/2022/#191-2022.02.14.md new file mode 100644 index 000000000..a600f47e5 --- /dev/null +++ b/Reports/2022/#191-2022.02.14.md @@ -0,0 +1,159 @@ +# 老司机 iOS 周报 #191 | 2022-02-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) 提出。 + +## 新闻 + +### [非公开 app 分发](https://developer.apple.com/cn/support/unlisted-app-distribution/) + +AppStore 现在已经支持将不适合公开分发的 app 以非公开方式在 App Store 上发布,使其仅可通过直接链接发现。非公开 app 不会出现在任何 App Store 类别、推荐、排行榜、搜索结果或其他列表中。但可以通过 Apple 商务管理和 Apple 校园教务管理访问。面向特定组织、特别活动或调查研究的 app,或者用作员工资源或销售工具的 app,都非常适合进行非公开分发。 + +### [Apple Ads 现已支持自定产品页](https://developer.apple.com/cn/news/?id=ay7673lx) + +![image](https://user-images.githubusercontent.com/11873526/153762704-e740d339-e78b-4f71-bb3e-9dafb4b454aa.png) + +借助自定产品页功能,您可以创建多达 35 个额外的 App Store 产品页版本,以展示您 app 的不同功能、内容或促销活动。现在,自定产品页更与 Apple Ads 无缝集成,助您轻松地在 App Store 上针对不同受众群量身打造更好的广告版本。 + +##  Developer - 设计开发加速器 + +### [探索 A15 芯片的 Metal 高级功能](https://developer.apple.com/cn/accelerator/) + +2022 年 2 月 15 日(报名截止 2022 年 2 月 14 日) + +通过本次演讲您将了解如何使用 Metal 和 A15 芯片提升 app 和游戏的性能。我们将介绍 Apple GPU Family 8 的最新 Metal 功能:如何运用低损压缩节省内存,通过稀疏深度和模板纹理深入研究复杂的阴影映射技术,以及借助 SIMD 混洗和填充指令更快地处理图像。 + +### [在您的 App 中构建隐私保护](https://developer.apple.com/cn/accelerator/) + +2022 年 2 月 17 日 (报名截止 2022 年 2 月 17 日) + +Apple 认为隐私是一项基本人权。我们将会带大家了解我们的四项核心隐私原则,以及您如何运用这些原则实现 app 特性和提升用户体验。探索您该如何在 app 中实现数据最小化、本机处理、透明度和控制权以及安全保护措施。 + +![2022 2 event qrcode footer](https://user-images.githubusercontent.com/11873526/153765863-59bb7dc3-b714-4374-83d5-9f2b2fda8774.jpeg) + +## 新手推荐 + +### 🐎 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/) + +[@享耳先森](https://github.com/iblacksun):`Protocol` 是 `Swift` 中非常重要的基石,可以实现代码复用。本文详细介绍了利用 `Protocol` 的 `Extension` 及 `Conform` 特性实现代码复用与隔离。 + +### 🐎 [Swift 演进之路](https://ming1016.github.io/2022/02/10/swift-evolutionary-path/) + +[@老峰](https://github.com/gesantung):本篇主要梳理了 Swift 1.0 ~ Swift 5.5 演进过程中各版本新增的特性,Codable、dynamicCallable、SPM,Async await,能够更加全面和详细了解 Swift 语言的发展,文章中提到的 Swift 各版本的语法示例代码,及本文内容都可以在 Swift 小册子里对应栏目里找到,Swift 初学者推荐阅读。 + +### 🐎 [Swift 子数组提取性能优化分析](https://mp.weixin.qq.com/s/5oZkKX03C4DBUcN16f9u3w) + +[@xiaofei86](https://github.com/xiaofei86):本文通过对 for 和 while 的对比,逐个赋值与 memcpy 的对比,以及不同编译选项 Optimization Level 的对比,得出在极限情况下提取 Swift 子数组的最佳性能方案。阅读原文了解各种方案选型的取舍。 + +## 文章 + +### 🌟 🐕 [如何监控 iOS 的启动耗时](https://ai-chan.top/code/launch-monitor/#hook-%E5%8D%87%E7%BA%A7%E6%96%B9%E6%A1%88) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文通过 IPC 方案监控用户的启动耗时,方案与[抖音通过 applicationDidBecomeActive:](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247487757&idx=1&sn=a52c11f6a6f217bd0d3283de9b00c8bc&chksm=e9d0daefdea753f954cfcb15d5d0f90302a9f45ba06968377644ffe9e5757a69c5b0132d2c8b&scene=178&cur_album_id=1568330323321470981#rd)有些不同,理论上更接近真实用户体验。技术方案为通过 hook BSXPCServiceConnectionMessageReply 的 @selector(send) 实现。 + +本文主要内容如下: +- 介绍 iOS 的渲染机制 Render Loop +- 分析 Render Loop 中的 Commit 阶段 +- 尝试 hook 系统 api 实现,初次的目标函数由于调用是由 b 直接跳转而失效,最终通过 hook send 方法得以实现 + +### 🌟 🐕 [超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)](https://mp.weixin.qq.com/s/dFkGjCgZeXbYxsu3F40L-Q) + +[@J_Knight_](https://github.com/knightsj):本文整理了在今年1月22日下午举办的第三期字节跳动技术沙龙《抖音 iOS 基础技术大揭秘》的5个主题内容,分别是: +1. 《大型 App 开发架构演进及挑战》 +2. 《抖音 iOS 自动化服务:容器化和规模化探索》 +3. 《超级 App 构建效能提升 40%!JOJO,字节自研 iOS 构建系统》 +4. 《抖音 iOS 体验优化:流畅性优化探索》 +5. 《抖音 iOS 稳定性优化与探索》 + +对这些主题感兴趣的读者可以按需阅读,而且文章底部也有获取 PPT 和回放视频的方法 + +### 🌟 🐕 [音视频基础概念合集:148 个问题带你快速上车音视频](https://mp.weixin.qq.com/s/X1idBFp7T5zhnqPmYSbQDw) + +[@JonyFang](https://github.com/JonyFang):音视频是一个有一定技术门槛的垂直领域,对于刚开始接触音视频开发的同学,最头疼的问题应该是音视频纷繁庞杂的概念。本文通过 148 个问题带你快速了解音视频基础概念,对音视频开发感兴趣的 iOS 开发同学也许有用。 + +### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/) + +[@Smallfly](https://github.com/iostalks):[WWDC NOTES](https://www.wwdcnotes.com/) 涵盖近十年 WWDC 视频的观看笔记,数量达上百篇,是一个开源社区驱动的网站。 + +推荐结合老司机周报出品的 [WWDC 内参](https://xiaozhuanlan.com/wwdc21)阅读。 + +### 🐕 [WebAssembly 2021 年回顾与 2022 年展望](https://mp.weixin.qq.com/s/aKNfdQIMC_uJ6Fx7SytdBA) + +[@邦Ben](https://weibo.com/linwenbang):该文对 WebAssembly 2021 年的发展做了归纳总结,以及对 2022 年的发展做了一些的预测。很多人可能对 WebAssembly 比较陌生,WebAssembly(缩写为 wasm)是一种使用非 JavaScript 代码,并使其在浏览器中运行的方法。这些代码可以是 C、C++ 或 Rust 等。它们会被编译进你的浏览器,在你的 CPU 上以接近原生的速度运行。目前还在发展阶段中,对 web 或者做跨端开发的同学可以多关注一下,未来没准 WebAssembly 的使用场景会更加宽泛。 + +参考链接: +[WebAssembly 开发者引导](https://www.wasm.com.cn/getting-started/developers-guide/) +[几张图让你看懂WebAssembly](https://www.jianshu.com/p/bff8aa23fe4d) + +### 🐢 [深入剖析 iOS 编译 Clang / LLVM](https://xiaozhuanlan.com/topic/4916328705) + +[@Damien](https://github.com/ZengyiMa):本文深入且细致的介绍了 Clang / LLVM 编译器在构建一个 iOS 应用中各个流程所做的事情以及实现,从编译器的视角出发来阐述了编译过程的方方面面。对底层感兴趣的同学不妨一读。 + +### 🐎[Swift 汇编(一)Protocol Witness Table 初探](https://mp.weixin.qq.com/s/dvWVnU7ZWiSIvQZBhWXnSw) + +[@kemchenj](https://kemchenj.github.io/):这篇文章从汇编的角度去解析 Swift 里通过 Protocol Witness Table 派发函数的原理,感兴趣的同学可以看一看。 + +## WWDC 内参 + +### [为 Swift 和 SwiftUI 带来 Core Data 并发](https://mp.weixin.qq.com/s/ELsrzsUtMv-rdXyPAN3ERA) + +@SZ: 今年 Core Data 上带来了大量的功能增强,其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验,简化了异步数据操作的程序,因此我们推荐大家学习并逐渐开始使用这些新的 API。 + +### [App Clip 新特性](https://mp.weixin.qq.com/s/q8eptavjMvp48oppJ8F3cA) + +@昊泽: App Clip 是 WWCD20 的一大亮点,它提供了一种“即时使用”的方式,基于苹果提供的各种唤醒方式,让用户在特定场景下很方便地体验 App 内的核心功能。 + +现在一年过去了,世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式,也一并完善和优化了本地体验,并提供了命令行工具来帮助开发者们生成轻应用码。 +让我们一起来看看吧。 + +### [再谈 watchOS 的数据传输](https://mp.weixin.qq.com/s/2DyDCknWzbLoFrVhyqaCdw) + +@Chars: 介绍 iCloud、Keychain、Watch Connectivity、Core Data 等这几种 Watch 支持的数据传输技术,简单说明它们的技术特点并进行优缺点比较。 + +### [watchOS 8 中的新特性](https://mp.weixin.qq.com/s/VppEWHOZO4nsOJU5oanIAg) + +@kk: 第一段介绍了 Watch OS 8 中的很多新功能,包括 App 支持常亮显示,健康数据后台刷新等。第二段是代码编程环节,带领读者通过 Swift UI 构建了一个简单训练类应用。 + +## 代码 + +### [Cokile/TweaKit](https://github.com/Cokile/TweaKit) + +[@JonyFang](https://github.com/JonyFang):一个可替代 [SwiftTweaks](https://github.com/Khan/SwiftTweaks) 的轮子: + +1. 使用 Property Wrapper 定义 tweak; +2. 原生支持 tweak 更多类型的值; +3. 精心设计的 UI; +4. 支持模糊搜索; +5. 支持 json 数据的导入导出; + +## 摸鱼周报 + +[@摸鱼周报 2021年度汇总](https://mp.weixin.qq.com/s/KPCx5jq9vn46MKziBUP0yQ):不知不觉摸鱼周报已经发展满一年了,回顾一下我们已经发布了非常多的内容。很多东西大家可能看完就忘了,但技术内容不比新闻,它基本不存在时效性,所以即使过去了一段时间,那些内容仍然是有价值,有生命力的。 + +我将各期内容按模块分类进行了整理,分为学习资料、开发工具、面试题,优秀博客,开发概念五个模块,然后整理成一个 PDF。PDF 可以点击链接外跳,这一点会比公众号阅读体验好很多。全部汇总完毕,字数将近 96000 字,共有 272 页,还是满满当当的。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#192-2022.02.21.md b/Reports/2022/#192-2022.02.21.md new file mode 100644 index 000000000..6e3090c16 --- /dev/null +++ b/Reports/2022/#192-2022.02.21.md @@ -0,0 +1,176 @@ +# 老司机 iOS 周报 #192 | 2022-02-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) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 2.10 现已发布](https://mp.weixin.qq.com/s/FgMu6-O_wMkwxp2yxiW2Ew) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 2.10 已经发布,2022 年的第一个 Stable 版本,按照惯例每个季度只会发布一个 Stable 版本,所以每一个 Stable 版本都是成吨的优化和性能改进: +- Flutter 构建 Windows 桌面应用 Stable +- 引擎的性能改进 + - 绘制脏区管理 + - 更快的类型流分析实现 +- 平台侧更新 + - iOS 平台键盘动画优化 + - iOS 9.3.6 的⽀持进入尾声,计划在 Q3 放弃对 iOS 9 和 10 的支持 + - Android 版本支持配置更新 + - Web 文本框滚动 bugfix +- Material 3 +- 开发工具更新 + - DevTools 命令行改进以及调试窗口对大型列表展示优化 + - VS Code 着色器增强( Color 类可弹出着色面板) + +### 🌟 🐢 [Apple 开源 dyld4](https://github.com/apple-oss-distributions/dyld/blob/main/doc/dyld4.md) + +[@Leo](https://github.com/leomobiledeveloper): 近期 Apple 开源了 dyld4 的源码,不同于以往,这次在开源的同时还附带了相对完善的文档,所以对开发者阅读体验更加友好,不用从零开始自己梳理逻辑了。dyld4 保留了相同的 mach-o 解析器,引入了 JustInTime 的加载器来优化 dyld3 闭包失效时候需要重建闭包的性能问题,推荐对底层原理感兴趣的同学阅读。 + + +## 文章 + + +### 🌟 🐕 [FFmpeg 工具:客户端音视频开发的必备工具](https://mp.weixin.qq.com/s/Rl7fxOP-YH37mQEvGxhfUA) + +[@JonyFang](https://github.com/JonyFang):FFmpeg 是从事音视频开发最常用的工具和三方库之一,我们可以用它来进行多种格式音频和视频的录制、转换、流处理功能。对对音视频感兴趣的 iOS 开发同学来说,FFmpeg 会是必不可少的工具。本文主要是对 FFmpeg 的常用功能做了详细的介绍。 + +本文内容框架: +- ffmpeg 常用命令介绍; +- ffplay 常用命令介绍; +- ffprobe 常用命令介绍; + +### 🌟 🐕 [可视化音视频分析工具:音视频原始数据、编码、封装分析好用工具集锦](https://mp.weixin.qq.com/s/jCYih3qgEIUctuWxn0aTGQ) + +[@JonyFang](https://github.com/JonyFang):在音视频开发中,FFmpeg 是必不可少的工具之一,但 FFmpeg 主要是命令行形式。为了方便、快捷、直观的分析音视频数据,最好能有一些可视化的分析工具来协助开发,本文主要介绍了一些常见的可视化音视频分析工具。 + +本文内容框架: +- 音画原始数据分析工具介绍; +- 编码数据分析工具介绍; +- 封装格式分析工具介绍; + +### 🐢 [阿里卖家 Flutter for Web 工程实践](https://mp.weixin.qq.com/s/pai_9kJuAdD0RoZOdemL9w) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文详细介绍了 FFW(Flutter for Web) 落地的全过程,从选择分支版本、迁移代码、发布构建、产物精简、兼容性踩坑 等多个方面全面介绍。最终能够取得不错的业务收益,一路艰辛,欢迎大家阅读。 + +插外说一句,选型还是要谨慎,toB 产品还好,toC 低端机用户较多且弱网的情况下,一个较大的 js 的资源包加载就足以影响用户体验了,期待团队的后续优化方案。本文的具体目录如下: + +- 工程基础:Flutter 版本选择、Dart 代码复用、平台相关插件 +- 发布体系:工程构建(选择 HTML 渲染)、产物精简和处理、页面发布 +- 能力支持:页面路由和地址、JS 调用、打点监控 +- 优化和兼容:骨架图避免白屏、JS 资源拆包、兼容问题解决 + +### [hacker-laws: 软件开发人员常用定律](https://github.com/nusr/hacker-laws-zh) +[@莲叔](http://github.com/aaaron7):在软件开发的过程中,有很多前人的经验和努力凝结而成的定律,比如摩尔定律,破船效应等等。这些原则总能够在项目开发过程中举棋不定的时刻来指导和帮助我们做出决定。这篇文章可以说是把软件开发中常见的定律、原则和模式做了一个汇总,非常有参考意义,并且每一个原则都给出了延伸阅读的资料,来帮你了解原则诞生的背景与故事,兼具了趣味性。总的来说,是非常不错的周末读物。 + +### 🐎 [Xcode 常见 CLI 工具](https://mp.weixin.qq.com/s/jF6mTsxC2xtn8Xp1Mn72Zw) + +[@Smallfly](https://github.com/iostalks):在日常开发中,或多或少都会用到 Xcode 内置的一些命令行工具(CLI),但是大部分小伙伴可能只是会用到一部分具体的命令。 + +本文较全面的介绍了 Xcode 内置的 20 种 CLI,主要分为六类: +- 前置工具 +- 符号表相关 +- 构建相关 +- 工具链相关 +- 工具相关 +- Mach-O 操作相关 + +### 🐎 [Unobtrusive runtime warnings for libraries](https://www.pointfree.co/blog/posts/70-unobtrusive-runtime-warnings-for-libraries) + +[@老峰](https://github.com/gesantung):写代码的过程中,API 调用的一部分错误是无法通过类型检查处理的,但直接 fatalError 也不好,在业务层使用 #if DEBUG 进行检查也很容易错漏。Point-Free 就在这篇文章里就为我们介绍了更好的处理方式,通过代码进入断点,亦或者是通过 Xcode 抛出 Runtime Warning,给上层用户更好的提示,并且将这些逻辑封装起来,感兴趣的同学可以尝试。 + +### 🐕 [iOS自动化测试框架Kiwi的使用介绍及原理分析 - 掘金](https://juejin.cn/post/7060780751700099080) + +[@Barney](https://github.com/BarneyZhaoooo):本文较为深入的分析了Kiwi的功能、实现原理,以及一些比较容易被忽略的机制。它有语义清晰,实现方式优雅等优点,用它写出来的测试代码会有很好的可读性。文章同时也给出示例,从实际场景分析其原理。 + +- **Spec** +- **Mock & Stub** +- **Expectation, Verifier and Matcher** + +### 🐕 [高级 SwiftUI 动画 — Part 1:Paths](https://mp.weixin.qq.com/s/5KinQfNtcovf_451UGwLQQ) + +[@水水](https://www.xuyanlan.com): 在本文中,结合原理和例子深入的探讨了一些创建 SwiftUI 动画的高级技术。 + +- Animatable +- animatableData +- GeometryEffect +- AnimatableModifier + +这些都是被官方文档完全忽略的主题,在 SwiftUI 的帖子和文章中也几乎没有提及。本文(Part 1)中介绍了 Animatable 和 animatableData。后续的 Part 2中将介绍 GeometryEffect , Part 3中将介绍 AnimatableModifier。 + +### 🐕 [“一把梭:REST API 全用 POST”](https://coolshell.cn/articles/22173.html) + +[@四娘](https://kemchenj.github.io/):大家在工作中,可能遇到过各种各样风格的 API 定义,那么到底什么样的 API 定义才是合理的?本文从 v2ex 的一个问题开始,探讨为什么 HTTP 需要不同的动词,POST 是否安全,对于其它上下游基础架构功能的构建会产生什么影响等等的问题。另外留言区也有一些针对实际业务场景的提问和回答,推荐大家阅读。 + +### 🐢 [LLVM中文网](https://llvm.liuxfe.com/docs/) + +[@红纸](https://github.com/nianran):这是一个 LLVM 学习站点,少有的中文版本 LLVM 文档网站。站内含有 LLVM 使用指南、编程文档、子系统文档、Pass 编写等多个主题内容。对底层感兴趣的同学不妨看一看。 + +## 代码 + +### 🌟 [百度网盘开源依赖注入框架 CarbonGraph](https://github.com/baidu/CarbonGraph) + +[@xiaofei86](https://github.com/xiaofei86):百度网盘开源依赖注入框架 CarbonGraph,框架使用 Swift 编写同时兼容 ObjC,提供完整的依赖注入能力(构造器注入、属性注入、方法注入、工厂注入)。你可以将类之间的依赖关系交给 IOC 容器来构建,使用框架定义的 DSL 能够方便地进行配置。 +构建更有利于测试和替换的松散耦合关系,可以实现不同业务对中台服务的个性化配置,也可以仅仅用来解决组件化中模块间直接依赖的问题。简单的使用示例如下所示,阅读原文了解更多信息。 + +```swift +let context = ObjectContext() +let definitionBuilder = Definition("filevc") + .protocol(UIViewController.self) + .object(FileViewController()) +context.register(builder: definitionBuilder) +context[UIViewController.self, name: "filevc"] +``` + +```swift +let context = ObjectContext() +let definitionBuilder = Definition() + .object(FileManager() as FileManagerProtocol) +context.register(builder: definitionBuilder) +context[FileManagerProtocol.self] +``` + +## 摸鱼周报 + +[@摸鱼周报 #43](https://mp.weixin.qq.com/s/Ktk5wCMPZQ5E-UASwHD7uw):第四十三期摸鱼周报来了,一起来看下本期概要吧: + +* 话题:dyld4 开源了 +* Tips:Fix iOS12 libswift_Concurrency.dylib crash bug +* 面试模块:Synchronized 源码解读 +* 优秀博客:Swift Protocol 进阶 +* 学习资料:南大软件分析课程,iOS 开发学习图谱 +* 开发工具:贝尔实验室开发的有向图/无向图自动布局应用,支持 dot 脚本绘制结构图,流程图等。 + +本期还有一个人物访谈:[人物访谈 | 东坡肘子:健康&开发](https://mp.weixin.qq.com/s/SO5UN1JGsjnQG5zyQMDRew),肘子是一位专注于 Swift 领域优秀博主。之前的一段时间经历过一场大病,本期访谈一方面聊一下他的独立开发和博主日常,另一方面则会聊些健康相关话题,希望大家能够重视自己身体发出的各类异常信号,任何阶段都应以身体为重。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#193-2022.02.28.md b/Reports/2022/#193-2022.02.28.md new file mode 100644 index 000000000..c9091e92d --- /dev/null +++ b/Reports/2022/#193-2022.02.28.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #193 | 2022-02-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) 提出。 + +## 文章 + +### 🐎 [【StoreKit2 JWS 签名验证】Code-Level Support 下的 X.509 证书链验证之旅](https://juejin.cn/post/7039622474274701348#heading-14) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文提供了通过 PHP 实现服务端校验 JWS 票据真实性的具体实现代码,并附上了与苹果 PKI 团队的邮件交流记录,也很有意思: ~~beg you~~ 以及加上代码注释以明确问题的理解一致等。[苹果根证书下载地址](https://www.apple.com/certificateauthority/)。 + +### 🐎 [iOS 逆向工具:逆向做的好,码农下班早丨音视频工具](https://mp.weixin.qq.com/s/QhVyUzyZN_h1qjEZhO9jYQ) + +[@Barney](https://github.com/BarneyZhaoooo):App 逆向工程是做竞品分析的常用方法,本文对 iOS 如何逆向做了简单的介绍。 + +1. 非越狱 App 调试 + - 环境配置 + - 安装 MonkeyDev + - 使用 MonkeyApp 调试 App + - 导出调试 App 的沙盒文件 +2. 越狱 +3. 砸壳 + +### 🌟 🐕 [iOS 音频采集 Demo:采集音频数据并存储为 PCM 文件](https://mp.weixin.qq.com/s/FDR_5cMfAJQgZhSvjgeWYA) + +[@JonyFang](https://github.com/JonyFang):iOS/Android 端开发同学如果想开始学习音视频开发,最丝滑的方式是对[音视频基础概念知识](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MTkxOTQyMQ==&action=getalbum&album_id=2140155659944787969&scene=21#wechat_redirect)有一定了解后,再借助本地平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助[音视频工具](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MTkxOTQyMQ==&action=getalbum&album_id=2216997905264082945#wechat_redirect)来分析和理解对应的音视频数据。 + +本篇是「音视频工程示例」的第一篇:iOS 音频采集 Demo。这个 Demo 里包含以下内容: + +1. 实现一个音频采集模块; +2. 实现音频采集逻辑并将采集的音频存储为 PCM 数据; +3. 详细的代码注释,有助理解代码逻辑和原理。 + +### 🌟 🐕 [iOS微信全文搜索技术优化](https://mp.weixin.qq.com/s/Ph0jykLr5CMF-xFgoJw5UQ) + +[@kemchenj](https://kemchenj.github.io/):这篇文章讲述了微信团队 2021 年优化 iOS 客户端搜索体验的过程,从技术选型开始,到方案落地以及最后的性能调优,非常具有学习价值,强烈推荐有类似需求的同学阅读。 + +### 🐎 [cocoapods-downloader 设计概要](https://mp.weixin.qq.com/s/J10EbVTAb_u_yDCThxFJYg) + +CocoaPods 是我们非常熟悉的工具了,本文就介绍了 cocoapods-downloader 的代码设计,并在文末给出了工厂类对具体子类解耦的一个优化方案。 + +### 🐕 [高级 SwiftUI 动画 — Part 2:GeometryEffect](https://mp.weixin.qq.com/s/rE_HILLt-uxzScS7wXh5jw) + +[@AidenRao](https://weibo.com/AidenRao):在 [本系列的第一部分](http://mp.weixin.qq.com/s?__biz=MzAxNzgzNTgwMw==&mid=2247487817&idx=1&sn=2dc07e2a4a58e4b0ba02b05ea5952734&chksm=9bde233daca9aa2b8312a91b61e259ba17f88be9e7863e7a159262bdd36825c9479baeba471f&scene=21#wechat_redirect) 介绍了 Animatable 协议,以及我们如何使用它来为路径制作动画。 + +本系列的第二部分,介绍一个新的工具 GeometryEffect,用同样的协议对变换矩阵进行动画处理。 + +第三部分介绍强大的 AnimatableModifier:[高级 SwiftUI 动画 — Part 3:AnimatableModifier](https://mp.weixin.qq.com/s/M6MW3idXS6jZJtl4Mz5DGQ),用于实现复杂动画。 + +文章结合动画 Gif 和源码为案例,深入的探讨了一些创建 SwiftUI 动画的高级技术。 + +## 代码 + +### [Mocha](https://github.com/White-White/mocha) +[@Smallfly](https://github.com/iostalks):Mocha 是一款 Swift 编写的 Mach-O 文件可视化工具,通过解释 Mach-O 文件中每一个字节的含义,帮助使用者理解 Mach-O。 + +### [ScreenShield](https://github.com/RyukieSama/Swifty) +[@Damien](https://github.com/ZengyiMa):ScreenShield 是极其轻量化的截屏防护方案,任何需要被保护的 View 作为子视图放入保护的视图中即可达到截屏时隐藏内容的效果。 + +### [MetalPetal: An image processing framework based on Metal ](https://github.com/MetalPetal/MetalPetal) +[@莲叔](http://github.com/aaaron7):顾名思义,MetalPetal 是一个用 Metal 做图像处理的框架。GPU 的图像处理框架,我们很容易想到的就是大名鼎鼎的 GPUImage,MetalPetal 可以说就是一个 Metal 版的 GPUImage。苹果近几年推广 Metal 的决心相信大家都有目共睹,Metal 不仅能提供了现代化的 API,也提供了碾压 OpenGL 的性能,是 iOS 上做 GPU 计算的不二之选。但如果我们希望用 Metal 来做图像和视频处理的时候,你会发现需要写非常多的代码才能够完成功能,比如图片加载,上传成纹理,创建 gpu 的 pipelie 等等,而视频则更复杂,涉及到解码、调度、丢帧等一系列逻辑。MetalPetal 这类框架就是为了这个这样的问题而生,让你通过简单的函数调用就完成 GPU 的计算。大幅提升开发效率。 + +## 摸鱼周报 + +[@摸鱼周报 #44](https://mp.weixin.qq.com/s/q__-veuaUZAK6xGQFxzsEg):第四十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Apple 将推出 Tap to Pay 功能 +* Tips:解决 iOS 15 上 APP 莫名其妙地退出登录 +* 面试模块:Dealloc 使用注意事项及解析 +* 优秀博客:ARM64 汇编入门及应用 +* 学习资料:Github: How to Cook +* 开发工具:文件搜索应用:EasyFind + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](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/#194-2022.03.07.md b/Reports/2022/#194-2022.03.07.md new file mode 100644 index 000000000..2e6459871 --- /dev/null +++ b/Reports/2022/#194-2022.03.07.md @@ -0,0 +1,139 @@ +# 老司机 iOS 周报 #194 | 2022-03-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) 提出。 + +## 新闻 + +### [Apple Park 传送门下周开启](https://mp.weixin.qq.com/s/9gsgkR6QW5o37ov4SltPmQ) + +Apple Park 传送门定时开启,北京时间 3 月 9 日凌晨 2 点,欢迎准时来 [Apple 官网](https://www.apple.com.cn/apple-events/)看 Apple 特别活动直播,还有同步中文字幕可以开启。 + +##  Developer - 设计开发加速器 + +### [探索物理空间音频引擎和游戏手柄](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 10 日(报名截止 2022 年 3 月 9 日) + +探索几何感知音频是如何帮助您的 app 构建复杂、互动和沉浸的音频场景。了解 Apple 的空间音频 API —— 物理音频空间化引擎(PHASE),以及它是如何使声音始终与您的体验保持一致 —— 帮助您在开发过程中创建空间声景和场景,而不是等到后期制作。我们还将向您展示虚拟和实体游戏手柄的最新改进,以及如何在您的 app 中支持手柄的分享功能。 + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 文章 + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +第二篇 iOS 音频编码:[采集音频数据并编码存储为 AAC 文件](https://mp.weixin.qq.com/s/q4n1dYTjcJVJolX-Wrdr9Q) + +第三篇 iOS 音频封装:[采集编码音频数据并封装存储为 M4A 文件](https://mp.weixin.qq.com/s/R86qnQAi2njr6k7tFvTF-w) + +[@JonyFang](https://github.com/JonyFang): 本 Demo 包含的主要内容有: + +1. 实现一个音频采集模块 +2. 实现一个音频编码模块 +3. 串联音频采集和编码模块,将采集到的音频数据输入给 AAC 编码模块进行编码和存储 +4. 详尽的代码注释,有助于理解代码逻辑和原理 + +### 🐕 [探索 iOS 编码对包大小的影响](https://mp.weixin.qq.com/s/3Z_IFBpjwDTrB6ynu2bKcQ) + +[@Smallfly](https://github.com/iostalks):本文介绍了比较极致和新颖的包大小优化技术,文章从二进制、汇编指令层面分析 Objective-C 代码对包大小的影响。主要从三个方面进行了讲述: + +1. 二进制层面分析 OC 代码对包大小的影响 +2. 编码上优化包大小的 tips +3. 总结各种 tips 的收益 + +### 🐎 [Publishing DocC Documentation as a Static Website on GitHub Pages](https://www.createwithswift.com/publishing-docc-documention-as-a-static-website-on-github-pages/) + +[@kemchenj](https://kemchenj.github.io/):去年 WWDC 苹果发布了 Swift 专用的文档生成工具 docc,接近一年过去了,社区主流的库都没有采用这个工具,其中一个重要的原因是 docc 不支持生成静态网页,无法部署在类似 github.io 之类的服务上,必须有服务器支持才可以。 + +最近在社区的帮助下,docc 也加入了静态网页生成的功能,预计会跟随 Xcode 13.3 一起发布,这篇文章的作者就分享了如何使用 Xcode CLI 命令调用 docc 生成静态网页,以及最终的效果。 + +另外跟随 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),使用这个插件就可以在 CLI 里 `swift package generate-documentation` 一键生成文档。 + +### 🐕 [注解排列组合出启动任务 | ksp - 掘金](https://juejin.cn/post/7070887538444992526?share_token=7592be2d-eb07-4dd9-94ad-185665479303) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍了一种通过注解的排列组合优化启动任务的思路,让开发同学尽可能的对启动流程无感知。并提供了简单易懂的 demo。 + +- Ksp解析注解 +- Task生成结合TaskGroup概念 +- 拆分启动步骤 +- 依赖注入 +- Plugin + +### 🐕[iOS 自动化测试驱动工具探索](https://mp.weixin.qq.com/s/8bq-Y0rrV9Pw93e8IQoUaQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):该文介绍了字节 iOS 自动化测试驱动工具 bdc 的探索过程及实现原理。解决了目前 Facebook 方案耗时长性能差,对真机不友好,无法在 Linux 上部署等问题,值得一读。 + +文章主要内容如下: +- 参考 Facebook 的 wda 实现了更高效的 XCTest 工具,在执行速度和稳定性获得大幅提升 +- 通过研究 libimobiledevice 的原理,实现了调用 Xcode 自带工具集的能力 +- 通过将进程名加入 testmanagerd 的白名单实现了在 Linux 上的 docker 化部署 + +### 🐕 [如何在 macOS Monterey 中成功编译 objc4-838 源码](https://juejin.cn/post/7068539803318353928) + +[@Damien](https://github.com/ZengyiMa):你是否想自己编译 Objc4 的源码?那就来看看此篇文章吧。本文会手把手教你如何在 macOS Monterey 中成功编译 objc4-838 源码,并且对编译错误会有详细的修复说明,可以跟着作者一步步在 macOS Monterey 中成功编译。 + +### 🐕 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/) + +[@anotheren](https://github.com/anotheren):Swift 中协议的核心优势之一就是方便我们抹除原始类型,并定义统一接口进行交互。本文展示了几种不同的方法来组合多个协议的功能。编程并没有绝对的标准答案,不同方案都有各自的特点。协议默认实现、协议扩展、范型约束,你更习惯哪一种呢? + +## 代码 + +### 🌟 [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/irsf9550JcHrsd5l-V8BbQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 图片处理目前来说相对于原生而言,仍有不少的差距,尤其是在处理缓存方面。本期代码库推荐咸鱼出品的 Flutter 图片处理方案: PowerImage。该方案巧妙地将外接纹理与 FFi 方案组合,以更贴近原生的设计,解决了一系列业务和技术痛点,强烈推荐 👍 + +### [SwiftUIFlux](https://github.com/Dimillian/SwiftUIFlux) + +[@老峰](https://github.com/gesantung):Redux 是 JavaScript 的状态管理框架,SwiftUIFlux 一个非常简单的使用 Combine 为 SwiftUI 实现类 Redux 的状态管理框架,感兴趣的同学可以尝试。 + +### [Satin - A 3D Graphics Framework built on Apple's Metal](https://github.com/Hi-Rez/Satin) + +[@老驴](https://weibo.com/u/6090610445):最近随着元宇宙概念的火爆,3D 相关的技术也受到了大家的关注,有很多同学对 3D 引擎有很浓厚的兴趣,也想探究一下引擎的原理和实现。这个库就是一个 iOS 开发者基于 Metal API 写的一个引擎,作为学习 3D 相关知识来说,是个很好的材料。 + +## 摸鱼周报 + +[@摸鱼周报 #45](https://mp.weixin.qq.com/s/_N98ADlfQCUkxYjmH0SvZw):第四十五期摸鱼周报来了,一起来看下本期概要: + +* 话题:苹果公司宣布暂停在俄销售产品并关闭部分功能 +* Tips:在 SPM 集成 SwiftLint +* 面试模块:Swift 的 weak 是如何实现的? +* 优秀博客:iOS项目中的脚手架/CLI介绍 +* 学习资料:Swift 实现的设计模式 +* 开发工具:nginxedit:Nginx 在线配置工具 + +## 内推 + +### 南京、上海、深圳 - 华泰证券 - 招聘 iOS/Android 高级、资深工程师 + +> 招聘要求和联系方式:https://www.yuque.com/iosalliance/article/cinmb2 + +### 杭州 - 淘宝 - 终端平台技术部 - 招聘 iOS/Android + +> 招聘要求和联系方式:https://www.yuque.com/iosalliance/article/hszgat + +### 其他 + +如果你想**找工作**,点这里: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/#195-2022.03.14.md b/Reports/2022/#195-2022.03.14.md new file mode 100644 index 000000000..148f9bd5c --- /dev/null +++ b/Reports/2022/#195-2022.03.14.md @@ -0,0 +1,125 @@ +# 老司机 iOS 周报 #195 | 2022-03-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) 提出。 + +## 新闻 + +### [T 技术沙龙移动端技术实践(上海场)圆满结束](https://mp.weixin.qq.com/s/gjU6ejMRyG7Cqfr9271qsA) + +2022 年 2 月 26 日,由老司机技术周报与 T 技术沙龙联合主办的移动端技术实践(上海场)在上海圆满落幕。此次技术沙龙邀请到了来自澳洲 REA Group 的 Jake Lin、“开源实验室”博主张涛、前阿里技术专家王宇分别以《MVI 模式在 Jetpack Compose 上的应用》、《基于 C++ 的 Android 真协程设计》以及《自制渲染引擎解决客户端复杂 UI 组件的实现》为主题进行硬核分享与实践探讨。 + +##  Developer - 设计开发加速器 + +### [使用 SwiftUI 打造卓越体验](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 24 日- 25 日(报名截止 2022 年 3 月 23 日) + +欢迎参加为期两天的 SwiftUI 活动!通过本次活动,您将全方位了解 SwiftUI,包括 SwiftUI 的工作原理和控件使用,数据模型和视图的关联,容器布局和高阶渲染,以及使用 SwiftUI 打造多平台 app。此外,我们还邀请到社区内活跃开发者,来分享他们的 SwiftUI 实战经验。加入我们开启 SwiftUI 之旅! + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 新手推荐 + +### 🐎 [What’s new in Swift 5.6?](https://www.hackingwithswift.com/articles/247/whats-new-in-swift-5-6) + +[@Smallfly](https://github.com/iostalks):Swift 5.6 引入了一波新的特性,本文通过示例重点介绍了几个比较有意思的,并预测在不远的将来 Swift 6 可能会带来一系列破坏性 API。 + +### 🐎 [Easier Code Review With Pre-Commit Hooks](https://digitalbunker.dev/supercharging-git-with-pre-commit-hooks/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了 git 的 hooks 能力,并举例介绍了适合在 ``pre-commit`` 阶段做的检查,例如 文件名是否为纯 ASCII 字符,.xib/.storyboard 是否有 ambiguous constraints。但 hooks 文件不在 git 中保存,管理与同步困难,因此推荐了 [pre-commit](https://pre-commit.com/#intro) 这个工具通过 yaml 配置文件来拉取需要的hooks,确保保证 hooks 的同步,工具还预设了[很多选项](https://pre-commit.com/hooks.html)来开启能力,也可以找到别的开发贡献的 hooks。虽然工具名为 ``pre-commit`` 但也支持在各个阶段指定 hooks,功能相对完善。 + +## 文章 + +### 🌟 🐕 [快影 iOS 端如何实现 OOM 率下降 80%+](https://mp.weixin.qq.com/s/IvATFGU_bOph-WX5ZYLYew) + +[@Leo](https://github.com/leomobiledeveloper):OOM 的判定和优化一直是 iOS 上比较棘手的问题,快影充分利用自身架构的特点来采集和还原问题的上下文,实现了一套分析复现线上 OOM 头部问题的工具,基于这套工具 OOM 率大幅下降。文中技术方案的思路新颖,并且结合几个具体的案例做了深入的分析,干货很多,非常推荐阅读~ + +### 🌟 🐕 [iOS 高刷屏监控 + 优化:从理论到实践全面解析](https://mp.weixin.qq.com/s/gMxTq0_nmE-xW7GA3pkBJg) + +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了新引入的 ProMotion 屏幕背后的机制,并且透过表象深入汇编本质,还落地了监控 + 优化的方案,让大盘滑动帧率 P50 从 80 上升至 112 左右,取得了不俗的业务收益。 + +- 帧率介绍 +- 动态刷新率的表现形式 +- 设备差异 +- 解除 DisplayLink 的帧数限制 +- 动态帧率的应用场景 + +### 🐕 [如何让云音乐 iOS 包体积减少 87MB](https://mp.weixin.qq.com/s/GTbhvzMA-W0ANlars7mKog) + +[@水水](https://www.xuyanlan.com):包体积优化是客户端开发的老命题了, 本文记录了云音乐从了解口径、分析、实践的过程。云音乐的包体积主要优化点如下: +- 资源 +资源清理、资源整理、资源压缩、资源云端迁移、资源合并 +- 二进制 +无用代码检测、二三方库下线、动态库依赖裁剪 +- 编译优化 - 参数 +Asset Catalog Compiler Optimization、EXPORTED_SYMBOLS_FILE、Link-Time Optimization、GCC_OPTIMIZATION_LEVEL +- 防劣化 + +此前也有推荐过一些安装包瘦身的文章,一并贴出参考,希望对优化包体积感兴趣的读者可以根据自己的业务选择最适合自身 App 的方案。 + +- [iOS瘦身!一个让50%本地图片消失的方案!](https://juejin.cn/post/7053978539523047437) +- [App thinning checklist](https://oldoldb.com/2019/01/09/App-thinning-checklist/) +- [iOS 优化 - 瘦身](https://mp.weixin.qq.com/s/wDcYvea5dTq0dh0PBwRu4A) +- [On-Demand Resource 资源下发](https://www.xuyanlan.com/2018/12/07/%E8%B5%84%E6%BA%90%E4%B8%8B%E5%8F%91/) + +### 🐕 [让工程师拥有一台“超级”计算机——字节客户端编译加速方案](https://mp.weixin.qq.com/s/0nU5DHX0GnEidoCtlCOaOg) + +[@红纸](https://github.com/nianran):该文介绍了字节在分布式编译、编译缓存上的部分实现原理。文中提到**跨任务缓存**和**索引缓存**的两种实现方案。并介绍了依赖分析的四种技巧,分别从消噪、索引、缓存三个角度进行了优化。同时采用了开源框架 goma 的代码,针对 iOS 项目的特性,优化了编译任务依赖解析。 + +### 🐎 [本地生活端智能架构设计与技术探索](https://mp.weixin.qq.com/s/vrHNhik_ijqs5KE_0YRI1A) + +[@J_Knight_](https://github.com/knightsj):本文介绍了本地生活业务对端智能的应用与探索。首先介绍了端智能的概念,特性以及发展趋势。然后结合本地生活的业务分享了其所应用的端智能技术架构。最后结合了具体的细分业务:用户特征,智能推荐和智能触达介绍了端智能在这些业务的具体应用。在文末也对端智能在本地生活的应用做了展望和期待。 + +### 🐕 [Native Network Monitoring In Swift](https://digitalbunker.dev/native-network-monitoring-in-swift/) + +[@享耳先森](https://github.com/iblacksun):对于 App 内的网络状态监控,大家常用的是 `Reachability` 或 `Alamofire` 内部的 `NetworkReachabilityManager`。本文介绍了基于 iOS 12 后 `Network.framework` 内置的 `NWPathMonitor` 实现的网络状态监控。 + +## WWDC21 内参 + +### [通过断点技巧让调试更高效](https://mp.weixin.qq.com/s/kv2dfh6L06RQghwkQupi1w) + +[@PerTerbin](https://github.com/PerTerbin): 对于开发者来说都是及其重要的调试手段。本文将介绍 Xcode 中断点调试的技巧及 WWDC21 中苹果关于断点提出的新技术,学会这些技巧对于开发者来说都非常有必要,它能使我们的工作更加高效。 + +### [使用 Clang 静态分析器尽早发现 Bug](https://mp.weixin.qq.com/s/oGqTGgciaFIgMIKH96Ccng) + +[@Sean](https://github.com/yangzai360): 本文包括了 [WWDC 2021 Session 10202](https://developer.apple.com/videos/play/wwdc2021/10202/) 中的全部内容,Clang 静态分析器于 2011 年就集成进 Xcode 了,十年多来,它的功能越来越强大。在 Xcode 中简单的一个点击就可以让它来帮助我们找到很多隐晦的 Bug。本文图文并茂地介绍了分析器的使用操作、Xcode 13 中新增的检查项目、在BuildSeting中的可配置参数,以及最后译者补充了静态分析的简介、Clang 静态分析器源码结构。期望通过使用它,让你的工程变得更健壮! + +## 摸鱼周报 + +[@摸鱼周报 #46](https://mp.weixin.qq.com/s/8Wpfk9yxpjwaDXN7iXIcvQ):第四十六期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:苹果春节发布会,地表最强芯片 M1 Ultra +* Tips:如何在SwiftUI中显示二维码;如何将 JSON 字典编码为 JSONEncoder +* 面试模块:iOS 内存管理:Autorelease 细节速记 +* 优秀博客:SwiftUI 进阶技巧 +* 学习资料:KKBOX iOS/Mac OS X 基礎開發教材 +* 开发工具:几款面向 iOS 开发的 UI 调试工具 + +## 内推 + +老司机周报团队联合知识小集和 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/#196-2022.03.21.md b/Reports/2022/#196-2022.03.21.md new file mode 100644 index 000000000..1b9cb00b1 --- /dev/null +++ b/Reports/2022/#196-2022.03.21.md @@ -0,0 +1,172 @@ +# 老司机 iOS 周报 #196 | 2022-03-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) 提出。 + +## 新闻 + +### [4 月 25 日开始,提交到 App Store 的 app 都必须使用 Xcode 13 构建](https://developer.apple.com/cn/news/?id=2t1chhp3) + +从 2022 年 4 月 25 日开始,所有提交到 App Store 的 iOS、iPadOS 和 watchOS app 都必须使用 Xcode 13 构建。Xcode 13 已包含 iOS 15、iPadOS 15 和 watchOS 8 的 SDK。 + +##  Developer - 设计开发加速器 + +### [使用 SwiftUI 打造卓越体验](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 24 日- 25 日(报名截止 2022 年 3 月 23 日) + +欢迎参加为期两天的 SwiftUI 活动!通过本次活动,您将全方位了解 SwiftUI,包括 SwiftUI 的工作原理和控件使用,数据模型和视图的关联,容器布局和高阶渲染,以及使用 SwiftUI 打造多平台 app。**此外,我们还邀请到社区内活跃开发者,来分享他们的 SwiftUI 实战经验**。加入我们开启 SwiftUI 之旅! + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 文章 + +### 🐕 [Tips for getting the most out of DocC](https://rhonabwy.com/2022/02/10/tips-for-getting-the-most-out-of-docc/) + +[@四娘](https://kemchenj.github.io/):文档工具 DocC 发布了已经快要一年,这段时间里加上了 static hosting,C/Objective-C 的支持以及 SPM 插件等功能,依托它来构建内部文档工具是一个不错的选择,也是一个顺便梳理项目内部代码的机会。 + +本文作者提供了一个渐进式接入 DocC 的步骤建议: + +1. 给 class/struct/enum 等类型添加注释文档 +2. 给公开的函数和属性添加注释文档 +3. 添加 documentation catalog 和 overview +4. 给主要的类型和函数分组 +5. 编写一篇大致的介绍文档 +6. 添加常用的代码模版 +7. 给其余的代码分组 + +### 🐎 [Swift进阶](https://juejin.cn/column/7069654800002252808) + +[@老峰](https://github.com/gesantung):作者比较系统的介绍了学习 Swift 的一些知识点,主要包含如下内容: + +- [Swift进阶(一) —— 类与结构体](https://juejin.cn/post/7048633193666183176) +- [Swift进阶(二) —— 方法探究](https://juejin.cn/post/7050873481029746696) +- [Swift进阶(三)—— 属性](https://juejin.cn/post/7062732599835721735) +- [Swift进阶(四)—— 指针](https://juejin.cn/post/7069654422359392292) +- [Swift进阶(五)—— 内存管理](https://juejin.cn/post/7071048325193007134) +- [Swift进阶(六)—— 枚举和可选类型](https://juejin.cn/post/7072287470791966750) + +### 🚧 🐎 [All Thumbs, Why Reach Navigation Should Replace the Navbar in iOS Design](https://medium.com/tall-west/lets-ditch-the-nav-bar-3692cb17cc67) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):一篇偏向交互设计的文章,介绍应该如何做好 Reach Navigation 的设计。随着 iPhone 手机屏幕越来越大,用户手指越来越难够到屏幕的顶部,在 Navbar 上设计功能交互区也显得越发不友好。于是作者提出了 Reach Navigation 的概念,并对三种情况做出了建议: + +- 使用 Tab Bar 的新 APP + - 使用从底部 pop up 的弹窗,并能通过下拉手势 swipe away + - 将常用的操作按钮放置在 Tab Bar 上 + - 在选择如何分配屏幕空间前,思考哪些是核心功能 + - 不要在 Tab Bar 中放置目的地按钮——比如搜索、购物车、新消息。通过别的方式嵌入内容区域或别的途径实现。 + +- 不使用 Tab Bar 的新 APP + - 使用苹果地图一样的抽屉式设计,或者像苹果邮箱一样的 sheet 设计 + - 优先考虑把按钮放在屏幕底部 + +- 修改传统的 APP + - 把最常用的按钮移动至底部 + - 所有页面适配在屏幕边缘的滑动返回 + - 提高用户方便触达区域的利用率 + - 把重要操作从 Navbar 的右侧移走 + +PS:本文是17年的文章了,但即使在现在看来也依旧不过时。一个的近期类似设计就是 iOS15 Safari 将 URL/search/tab bar 也挪到了底部,单手操作的体验获得了较大的提升。开发者也不应拘泥于写代码,懂一些交互的基本原理也是加分项。 + +### 🐎 [iOS代码覆盖率-增量覆盖率自动化实践](https://juejin.cn/post/7049973143007395877) + +[@Damien](https://github.com/ZengyiMa):全量代码覆盖率可以帮助开发者聚焦代码的逻辑缺陷,从而更好地避免线上问题,全量代码覆盖率可以直观的看到整个App的代码的覆盖率情况,但是往往有用的或者被关注的是增量代码覆盖率数据。本文通过探索和学习,研究了基于 Git Diff 能力,结合 Clang 覆盖率信息,最终形成了一套增量覆盖率自动化方案。有兴趣的同学不妨一读。 + +### [iOS番外-搞点音乐玩玩](https://juejin.cn/post/7075638987712364580) + +[@zvving](https://github.com/zvving):疫情波动的日子里,不妨听一首自动播放的钢琴曲([演示看这里](https://www.bilibili.com/video/BV1Yq4y1e7G9/))。 + +作者梳理唱名与 MIDI 值的对应关系,定义贝加尔湖畔曲谱文件,使用 [MIKMIDI](https://github.com/mixedinkey-opensource/MIKMIDI) 加载钢琴音色完成播放。**代码简单,也可以很有趣!** + +### 🐢 [Better performance with canvas in SwiftUI](https://swdevnotes.com/swift/2022/better-performance-with-canvas-in-swiftui/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Canvas 在各个平台都是一个备受争议的技术,在 SwiftUI 中也不例外,本文使用 Shape , Canvas , 静态图片来对比单个实例的创建和多实例滚动试图下的性能差异,综合结果还是 Canvas 胜出 ✨ + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +第四篇 iOS 音频解封装:[从 MP4 中解封装出 AAC](https://mp.weixin.qq.com/s/fCZfIXriTXUPcI4d4te_ew) + +第五篇 iOS 音频解码:[免费获得源码](https://mp.weixin.qq.com/s/7Db81B9i16cLuq0jS42bmg) + +[@JonyFang](https://github.com/JonyFang): 第四篇主要内容: +1. 实现一个音频解封装模块; +2. 实现对 MP4 文件中音频部分的解封装逻辑并将解封装后的编码数据存储为 AAC 文件; + +第五篇主要内容: +1)实现一个音频解封装模块; +2)实现一个音频解码模块; +3)实现对 MP4 文件中音频部分的解封装和解码逻辑,并将解封装、解码后的数据存储为 PCM 文件; + +### 🐕 [Writing testable code when using SwiftUI](https://swiftbysundell.com/articles/writing-testable-code-when-using-swiftui/) + +[@JimQ](https://github.com/waz0820):移动端界面开发不需要写单元测试,貌似已经成为理所当然的事(与界面弱相关的功能模块除外)。来到 SwiftUI 的时代,由于 SwiftUI 诸多开发范式的限制,业务逻辑与 UI 框架交互之间的解难解分比之 UIKit 的时代更有过之。 + +鉴于此,本文探索了如何使 SwiftUI 开发的 相关逻辑充分可测试(Test),主要包括两个部分:将逻辑提取到相应的 ViewModel 中,以及相对独立的逻辑抽取到相应的扩展中。 + +文章最后,作者也坦诚自己从未对 SwiftUI 的视图本身写测试(UITest)。作者专注于提取所有想测试的逻辑,使其从 UI 框架中摆脱出来,将主要精力致力于编写这部分的测试。小编作为一个页面仔也深感认同,这可能是一条更加可行的路线。 + +### 🐢 [iOS15 动态链接 fixup chain 原理详解](https://mp.weixin.qq.com/s/k_RI2in_Q5hwT33KWig34A) + +[@Leo](https://github.com/leomobiledeveloper):Fixup chain 是 Apple 在 iOS15 系统上所应用的一种新的动态链接技术,使用了 fixup chain 动态链接方案生成的 Mach-O 文件具有以下两个优势 + +- 更紧凑的存储信息格式所带来的更小的二进制产物 +- 更好的空间局部性所带来的更快的应用启动时间 + +本文从二进制布局和运行时解析两个角度深入分析了 fixup chain 解决的问题以及实现原理,推荐对底层原理感兴趣的同学阅读~ + +## 代码 + +### [SafeDecoder](https://github.com/GodL/SafeDecoder) + +SafeDecoder支持在Codable解码某个字段失败时设置默认值,并且默认值可配置。 + +> 推荐人:[GodL](https://github.com/GodL) + +## 摸鱼周报 + +[@摸鱼周报 #47](https://mp.weixin.qq.com/s/X6lPQ5qwY1epF6fEUhvCpQ):第四十七期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:苹果多个产品线的更新介绍 +* 面试模块:动态库与静态库的区别 +* 优秀博客:关于该不该换工作以及如何准备面试 +* 见闻:一个新的、偏技术领域的博客推荐模块 +* 学习资料:Rust 数据结构与算法 +* 开发工具:Aria2GUI,一款支持多种协议的轻量级命令行下载工具 + +上周还有一期人物访谈,对话一位全职的 iOS 独立开发者,全职独立开发还是非常有难度的,而且听他说靠独立开发的收入即将赶上工作时期的薪资。感兴趣的小伙伴可以点击这里探寻这位独立开发者的进阶之路:[人物访谈 | 极简时钟作者:道哥](https://mp.weixin.qq.com/s/-dZfT_ChTLESbweXyhP3pg) 。 + +## 内推 + +### [北京、上海、杭州、深圳] 抖音 - iOS 开发 - 研发效能方向 + +我们是负责抖音客户端基础能力研发和新技术探索的团队。我们在工程/业务架构,研发工具,编译系统等方向深耕,支撑业务快速迭代的同时,保证超大规模团队的研发效能和工程质量。在性能/稳定性方面不断探索,努力为全球数亿用户提供最极致的基础体验。 + +更多介绍详见: https://www.yuque.com/iosalliance/article/ozi46h + +### 其他 + +老司机周报团队联合知识小集和 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/#197-2022.03.28.md b/Reports/2022/#197-2022.03.28.md new file mode 100644 index 000000000..4792f5562 --- /dev/null +++ b/Reports/2022/#197-2022.03.28.md @@ -0,0 +1,143 @@ +# 老司机 iOS 周报 #197 | 2022-03-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) 提出。 + +## 新闻 + +### [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 中。 + +## 文章 + +### 🐕 [内存优化: 纹理压缩技术](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分的多维度页面性能评分体系)的思考过程、维度分析、困难探索、落地效果。可以按下面几个步骤品读: + +- 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 + ] +) +``` + +## 摸鱼周报 + +[@摸鱼周报 #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 + +如果你想**招人**,点这里: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/#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..55b23584d --- /dev/null +++ b/Reports/2025/#355-2025.10.20.md @@ -0,0 +1,66 @@ +# 老司机 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) 提出。 + +## 新闻 + +> 行业相关的新闻、趣事、看法 + +##  Developer - 设计开发加速器 + +> 设计开发加速器相关活动 + +## 新手推荐 + +> 收集一些对新手友好且质量不错的文章 + +## 文章 + +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 + +### 🐎 [使用 @_private(sourceFile:) 测试 Swift 私有成员](https://kyleye.top/posts/swift-private-imports/) + +[@阿权](https://github.com/bqlin):私有成员一直是单元测试的难题,以往的做法要么公开其成员,要么封装供测试的接口,本文提出可以用 `@_private(sourceFile:)` 测试私有成员。该标识是非公开 API,是编译器专用的接口,可绕过访问控制。不过前提需要为目标模块添加编译标志 `-enable-private-imports`,允许其私有成员被外部测试访问,并需用条件编译宏包裹,以防后续编译器更新导致 API 不可用。 + +通过这种方式,可以在完全不修改原有接口的前提下自由地编写单元测试代码。 + +## 工具 + +> 开发过程中常用的工具,及一些新工具的介绍 + +## 代码 + +> 库,代码段,开源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..408f2bd8b 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/barney.png b/assets/author/barney.png new file mode 100644 index 000000000..e2486eb57 Binary files /dev/null and b/assets/author/barney.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/chengzhi.png b/assets/author/chengzhi.png new file mode 100644 index 000000000..b7ac70a2d Binary files /dev/null and b/assets/author/chengzhi.png differ diff --git a/assets/author/iostalks.png b/assets/author/iostalks.png new file mode 100644 index 000000000..bc668271b Binary files /dev/null and b/assets/author/iostalks.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