Skip to content

老司机 iOS 周报 #253 | 2023-07-24

Compare
Choose a tag to compare
@ChengzhiHuang ChengzhiHuang released this 24 Jul 02:53
· 563 commits to master since this release

ios-weekly
老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新闻

Unity support for visionOS: What you need to know

Unity 提供 visionOS 支持的 Beta 版本已经放出了申请链接,感兴趣的同学可以自行申请。

WWDC23 内参中也已经放出了多篇相关的内容,大家感兴趣的话可以自行查看:

《WWDC23 内参》

本周我们又更新了 6 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了 ~

🌟 WWDC23 10164 - What's new in Swift

冬瓜:这个 Session 涉及了 Swift 的新语法特性和 Swift Macro 的话题,这些功能对于编写更加灵活和健壮的 API 以及高质量代码起到了很大的帮助。此外,也深入探讨了在受限环境下使用 Swift 的优势,并讨论了 Swift 在适配多种平台设备和语言方面的灵活性。

🌟 WWDC23 10167 - 初见 Swift 宏

方舟(WAMaker):Swift 宏是今年 Swift 5.9 的新特性,本文偏重于 Swift 宏基本概念的介绍,以及在使用方面需要注意的内容。

🌟 WWDC23 10117 - App Store Connect 的新特性

iHTCboy:本文介绍了 App Store Connect 的新特性,包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中,仅限内部测试人员访问的 TestFlight 测试更早安全可控;按地区预购可以为现有 App 拓展新的市场;通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能,优化产品页面,激发用户的兴趣,获取更多用户。

文章

🐢 Android 视角谈 Bazel 与 Gradle 构建系统

@Crazy:本文从构建系统对比的角度出发,从各个角度对比了 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

@Smallfly:这篇文章介绍了如何使用 Swift Package Manager(SPM) 将依赖关系存储在项目的代码库中。这样可以避免在每次切换分支时重新下载和解决依赖。作者创建了一个本地 package,并通过脚本将所需依赖最少文件复制到项目中。这样做减小了文件大小,优化了依赖的使用。最终,拷贝的文件目录大小仅需 4.7 MB,比 .build 目录小了 211 倍。文章提供了实现的示例代码,有兴趣请参阅原文。

🐎 Bad practice: testing if a String is empty

@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

@AidenRao:作者以一个待办事项应用为例,分析使用 SwiftUI 的 @Query 属性包装器和自定义数据访问层的优缺点。若追求便利,可选择 @Query 属性包装器;若需要更大的灵活性,以便于未来更换数据访问层,那么自定义数据访问层更为合适。

工具

Developer Duck AI for Xcode

@EyreFree:Developer Duck 是一款人工智能编程助手,可帮助完成包括代码建议、分析和重构等编程任务。

支持以下功能 & 特性:

  • Xcode 集成和聊天窗口
  • 命令行支持
  • 支持包括 Swift 在内的 15 种编程语言
  • 将文档注释添加到文件
  • 粘贴代码块并快速重构
  • 通过聊天生成 MermaidJS 流程图

感兴趣的朋友可以试试。

代码

🐕 DeckKit

@邦Ben:DeckKit 是一个开源库,旨在帮助开发者在 SwiftUI 中创建基于卡片(Deck)的应用程序。DeckKit 可以自定义卡片的外观和行为,并提供了一些方便的功能,如卡片重排、卡片拖拽等。

  • 创建和管理卡片
  • 自定义卡片的外观和行为
  • 支持卡片拖拽、重排等交互
  • 提供 Demo 应用程序以供参考

设计

🐕 Invisible Details of Interaction Design

@水水:好的交互设计会让产品感觉像是我们自身行为的自然延伸,如何在形式和功能之间取得整体平衡、如何让用户根据上下文预测产品交互意图?本文通过 iOS 的一些交互设计来介绍优秀的交互设计是如何隐喻用户进行操作的。对交互或者设计感兴趣的朋友不防看看,也许会有收获哦 ~

WWDC23 内参更新

🌟 WWDC23 10156 & 10157 - SwiftUI 动画篇

zddhub(张东东):本文先以 SwiftUI 动画的基础知识为起点,逐步剖析了支撑 SwiftUI 动画效果的三大核心组成部分:Animation、Animatable 和 Transaction。同时,结合 SwiftUI 的视图渲染机制,旨在帮助读者更深刻地理解和有效地应用 SwiftUI 的动画功能。在文章的尾声,我们会介绍 SwiftUI 最新加入的两个高级动画功能。一起开启探索之旅吧!

🌟 WWDC23 10122 - 探索适用于现代 Web 的媒体格式

夏天:本文将介绍 Safari 支持的媒体格式,包括图像和视频,并介绍了 Safari 17 中的新技术。文章还会讨论网站视频演变历程和最新技术 Managed Media Source API,实现自适应流媒体视频,提供更好的控制和更高效的性能。

🌟 WWDC23 10053 - What's new in privacy

胡军(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 及往年内参

同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom

说明

🚧 表示需某工具,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)