阅读视图

发现新文章,点击刷新页面。

老司机 iOS 周报 #323 | 2025-02-17

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

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

新闻

Updating the Visual Studio Code extension for Swift

@Cooper Chen:Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展,旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织,确保更广泛的社区支持和持续更新。对于现有开发者,升级过程无缝衔接,旧版扩展会自动替换为新版,用户可以轻松过渡。如果你是 Swift 开发者,可以尽快更新以体验更多功能和改进。

文章

🐕 Creating a reusable action menu component in SwiftUI

@AidenRao:这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件:

  • 视图构建器与解耦:通过 @ViewBuilder 允许动态注入菜单内容,提升组件的通用性
  • SwiftUI 风格系统:利用 LabelStyle 和 ButtonStyle 统一管理样式,确保视觉一致性
  • 封装与复用:通过视图修饰符将复杂逻辑隐藏,调用时仅需链式语法(如 .actionMenu {title: ..., isPresented: ...}),类似 SwiftUI 原生 API 的体验

作者也提供了配套的 GitHub 库(ActionMenu),支持通过 Swift Package Manager 集成。

🐎 Attaching debugger to system apps

@Kyle-Ye: 作者分享了调试 iOS 模拟器中系统 App 的一些经验:在关闭 macOS SIP 后我们即可对任何进程进行调试,然后使用 simctl 命名启动对应系统 App 并获取 PID,最后在 Xcode 中对该 process 进行 debug 即可。

🐎 Attending Apple Intelligence and App Intents workshop at Paris

@Smallfly:这是一篇苹果在巴黎举办的技术研讨会议内容,主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能,提升系统集成能力。涵盖从代码实现到系统集成的关键步骤,并透露出苹果在智能化和本地化功能上的战略布局。

iOS App Intents 是苹果生态中实现「功能原子化」的核心工具,通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体,即可将应用融入 Siri、搜索、自动化等场景,为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合,其应用潜力将进一步释放,对于关注 AI 集成的开发者,有较高的参考价值。

🐢 Flutter 3.29 发布,看起来会是一个“大坑”的版本

@david-clang:本文结构和内容参考 Flutter 技术项目经理的 What ’ s new in Flutter 3.29 ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如:

  1. Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。
  2. 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。
  3. 移除了 Flutter Gradle 插件,之前没迁移的需要手动迁移适配。

而且 Flutter 创始人 Eric 也对“废弃 Dart 独立 UI 线程”发表了 comment,表怀疑态度,比如 Dart 和 Native 平台同一线程之后,那么「滚动 / 动画」是否会因此出现相互影响,特别是第三方插件处理不当的时候,反而可能更加卡顿。官方回复 Eric 这利大于弊,而 Eric 表示后面有空整理文档回复该讨论。

工具

🐢 SweetPad: Develop Swift/iOS projects using VSCode

@阿权:之前你可能听说过 VSCode 插件 Swift Programming Language,官方大力宣传可以 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 生成(当然也可以用 XcodeGenTuist 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。

SweetPad 目前实现能力有:

  • Xcode 项目文件编辑:通过 Tuist 工具实现。
  • 自动补全(SourceKit-LSP)、单元测试:通过 Swift 插件 + xcode-build-server 工具实现。
  • 调试:通过 CodeLLDB 实现。
  • 运行到模拟器和真机:通过 xcrun simctlxcrun devicectl 命令行实现。
  • 格式化:通过 swift-format 实现。

SweetPad 还没使用最近开源的 swift-build,还是使用 xcodebuild + sourcekit-lsp 的方案,所以还是得安装 Xcode 环境。另外,诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。

之前 #224 周报有提到 用 VSCode 基于 Bazel 打造 Apple 生态开发环境 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境,感兴趣的同学可以对比着阅读。

Tips

一个使用 Instrument 的小技巧

@Barney:Instrument 录制结束卡顿很久或者秒退时,可用的设置。只采集最后几秒的数据,对于一些需要前置操作一段时间才能复现的问题时,会有较大帮助。在处理大量长时间数据时,Instrument 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。

Instrument

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #322 | 2025-02-10

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

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

周报编辑组又来新人啦~

欢迎 zhangferry 加入老司机技术!ferry 是我们的老朋友了,作为摸鱼周报的主编输出了大量优质内容,同时也深度参与了历年 WWDC 内参担任审核。目前 ferry 在抖音基础技术团队从事代码分析相关工作,对 LLM 与 Stable Diffusion 也有涉猎。

希望 ferry 的加入也能为大家带来更多元化的内容输出!

新闻

Apple 开源 Xcode 底层构建引擎

@kemchenj:Apple 近日开源了 swift-build,它是 Xcode、Swift Playground 底层使用的构建引擎(在 Xcode 里名为 XCBBuildService)。

目前 Swift Package Manager 使用的是另一套单独编写的构建引擎,同时维护两套除了行为不同会让用户困惑,并且维护成本也很高,所以后续 SPM 也会改为使用 swift-build,统一构建系统。

这样也给了我们机会一窥 Xcode 里的构建逻辑,以往很多问题都可以直接在这个库里找到答案,对于 Xcode 构建逻辑感兴趣的你千万别错过。

不再依赖 CallKit,iOS 微信使用新方案实现通话弹窗接听

苹果上线了新的 LiveCommunicationKit 作为在中国大陆替代 CallKit ,从用户视角分析,与 CallKit 最大的区别就是适配了灵动岛。目前文档内容不多,期待 WWDC25 中能有更详细的内容。

文章

🌟 🐢 Debugging An Undebuggable App

@ChengzhiHuang:作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部):

  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, #0x1amov 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

@含笑饮砒霜:这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。

🐢 Hardcore Debugging

@zhangferry:当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案:

  1. 利用 git bisect,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。
  2. 提取崩溃日志,利用 atos 进行符号化,可以更精准定位问题代码。其中还分享了一个 tips,当 atos 执行异常时,可以根据偏移地址在 dSYM 里的 Relocations/aarch64/xx.yml 文件中手动解析符号。

🐎 Compose 多平台是真实存在的!

@极速男孩:该文章分享了作者使用 Kotlin Multiplatform 与 Compose Multiplatform 的体验。通过网页工具快速生成项目模板,并在 Android Studio 中打开,然后简单实现了一个 PhotoApp,实现多平台代码共享。虽然依赖配置略有挑战,但可直接在 Android Studio 中运行 iOS 应用。

🐢 深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件

@david-clang:本文深入介绍 Android 侧 Flutter 和 Compose 在内嵌 Platform Views 的实现对比。虽然 Compose 和「传统 XML View」 在上层开发是两种写法,但因为底层渲染机制都是 Android Native View 的同一套渲染机制,所以无论内嵌 Platform Views 是否为 SurfaceView,都能正常渲染,甚至官方还推出了 SurfaceView 对应的 Compose 封装 AndroidExternalSurfaceScope。而 Flutter 和内嵌的 Platform Views 是两套渲染流程,连渲染数据的生产线程都不同,而且在内嵌 SurfaceView 时的渲染模式会从 TLHC 降级为 VD(这会影响 SurfaceView 交互逻辑,如无障碍功能可能失效),对此官方还没很完美的兼容方案(截止 2 月 9 日,Android 侧 Platform Views 相关的 issue 还有 100 个是 open 状态)。

🐕 深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比

@Crazy:这是一篇针对 Flutter 与 Compose 两个框架的 Diff 机制讲解的文章,本篇文章首先对 Flutter 的 Diff 机制进行分析,从 setState 方法开始逐步讲解 Flutter 框架的 Element 树是如何进行对比判断与循环更新的。很多 Flutter 开发者开发了两三年的 Flutter 也不知道 Widget 中的 Key 的作用,这篇文章很好的告诉了你 Key 与 runtimeType 的对比位置,也会让大家对 Key 的理解有更深的体会。文章对 Compose 的 Diff 算法进行了分析,Compose 与 Flutter 不同,Compose 是两个树来进行 UI 管理,同样在 Compose 的对比过程中,它的 Key 也启到了至关重要的作用,Compose 的 Diff 相较于 Flutter 更加的复杂,因为涉及到了多个模块的协作问题。本文读起来很快,但是需要大家反复阅读,如果有时间也可以根据文章所说的对源码进行自己的分析,会有不一样的效果。

工具

🐎 Network Link Conditioner: Simulating Slow Networking

@阿权:Network Link Conditioner 是苹果提供的慢网模拟工具,支持 macOS 和 iOS,其提供几套预设的网络环境供用户直接切换,常用于调试网络环境不佳下的网络请求或其他连接,优化用户体验,文章详细介绍了在该工具在各平台的使用方法。

比较有趣的是在模拟器上模拟慢网时还提到了另外一款工具 RocketSim,该工具可以独立控制模拟器的慢网模拟,不影响 macOS 其他进程,另外该工具还支持网络抓包、UI 稿对比、网格像素对齐、标尺、程序状态切换、Deeplink 测试、推送测试、权限控制、定位模拟等功能,功能丰富强大,可惜只能作用在模拟器。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #321 | 2025-01-20

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

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

这就是春节前最后一期周报啦,下周老司机编辑部也会开始春节假期,提前祝大家新春快乐!

文章

🌟 🐎 探究 SwiftUI Preview 的工作原理

@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

@EyreFree:本文分享了作者使用 GitHub Copilot 开发一个用 AVAudioEngine 实现的雨滴音频合成器的经历。文章评估了 Copilot 在实际开发中的优缺点:

优点:

  1. 在处理不熟悉的 SDK 时能快速提供解决方案;
  2. 能实现复杂算法(如粉噪音生成);
  3. 擅长跨语言代码转换(如 C++ 到 Swift)且基本不会产生语法错误。

缺点:

  1. 代码质量欠佳,存在大量重复和不必要的抽象,常忽略指令的部分要求;
  2. 对最新的语言特性支持不足,线程安全处理不当;
  3. 手动修改代码后容易与 Copilot 聊天上下文不同步。

使用 Copilot 就像在指导一个热情但经验不足的新手程序员,虽然在某些场景下能提高效率,但需要权衡使用 Copilot 编写代码与手动修复其产生的问题之间的时间成本,因为和 Copilot 的交互是「一次性」的,AI 并不会真的累积这些进步。

🐎 Creating interactive tutorials using DocC

@Kyle-Ye: 文章介绍了如何使用 DocC 创建交互式教程。通过 DocC,可以将静态的文档内容转变为交互式的体验,允许用户在文档中点击、操作,并快速找到他们所需的信息。此外,文章还展示了如何集成代码示例、自定义预览图片和课后小测,提供了更具互动性和可操作性的开发者学习体验。

🐎 Creating a SwiftUI text view with tappable links

@Bluesjiang: 文章介绍了一种在 SwiftUI 中实现可点击超链接效果的文本。因为 SwiftUI 原生没有提供对应中间。文章的作者很巧妙的利用了 SwiftUI 中 Text 支持 Markdown 的渲染来实现这一效果。作者还简单编写了一个组件来帮你快捷的构建 Markdown 超链接的内容。比较适合刚入门 SwiftUI 的同学实践自定义 UI。

🐕 Size Matters: An Exploration of Virtual Memory on iOS

@阿权:文章作者发现开启扩展虚拟内存(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

@DylanYang:作者通过一系列文章向我们介绍了类型驱动设计的概念。类型驱动设计的核心是通过类型自身来传递更多信息,一个非空类型比一个 Optional 类型包含了更多信息(非空),一个自定义的 Email 类型可以比单纯的 String 包含更多信息,例如在一个 Email 结构的初始化中校验 String 的格式是否正确,通过传递 Email 类型而不是 String 来保留这份格式校验的信息。以此类推,把更多的逻辑通过自定义类型封装起来,通过巧妙的设计类型来抹除原本可能出现的错误状态,然后在类型和类型之间通过领域化来划分、拆解,使得整个设计思路更清晰。本系列通过丰富的 demo 对类型驱动设计这一概念有较深入的阐释,感兴趣的读者可以花时间阅读下这个系列。

代码

🐎 echarts

@极速男孩: ECharts 是一个开源的可视化库,广泛用于创建交互式图表。线性图表常用于表示数据趋势,X 轴通常为时间或类别,Y 轴为数值。ECharts 支持多条数据线展示、交互式操作(如悬停显示数据),并可高度自定义图表样式,如颜色、线条类型、动画等。用户通过 JSON 配置来定义图表内容,适用于销售、气温等多种数据展示。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

# 老司机 iOS 周报 #320 | 2025-01-13

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

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

新闻

🐎 Algorithm changes to server connections for Apple Pay on the Web

@Damien:从 2025 年 2 月 4 日开始,苹果将改变支持 Apple Pay 在 Web 上的服务器连接的安全算法。为了保持服务不间断,你需要确保你的生产服务器在这个日期之前支持指定的六种密码之一

文章

🐕 Xcode Library customization with SPM plugin

@Kyle-Ye: 本文探讨了如何通过 Swift Package Manager 插件自动将自定义 SwiftUI 视图和修饰符集成到 Xcode Library 中。

通过实现 LibraryContentProvider 协议,开发者可以将自定义组件引入库中,提升可重用性和发现性。然而,手动维护这些集成可能会很繁琐。作者通过利用 SwiftSyntax,开发了一份插件来自动化此过程,这种方法简化了将自定义组件集成到 Xcode 库中的过程,减少了手动操作和潜在错误。

🐕 数据编织在AB实验自动化中的应用 | 京东零售技术实践

@Barney:本文讨论了数据编织在 AB 实验中的应用,强调其重要性以及面临的数据科学性、一致性和时效性挑战,并提出相应的自动化解决方案。内容涵盖数据编织的管理理念、逻辑数据平台构建、标准语义建立及自动编排等关键技术。最后,展示了 AB 实验链路的自动化实施进展及未来规划,强调提升交付效率和数据治理的必要性。

🐢 使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南

@阿权:文章本是 APMPlus 的软文,一套全面的性能监控的解决方案,但偏偏还为大家罗列了 21 条内存管理的最佳实践,并介绍了 OOM 监控的基本原理与手段。干货满满,都是我们日常开发中高频遇到的场景,或许它能成为内存问题踩坑时的自查小册。

🐕 What happens when you move a file in git?

@JonyFang: 文章主要介绍了在 Git 中移动或重命名文件及文件夹时的内部工作原理,包括文件以快照形式存储、文件夹与提交的关联、重命名或移动操作对存储的影响及优化方法,还提及了大文件的特殊处理情况。文中对 Git 文件的操作机制的介绍,对日常开发中文件结构调整会有帮助,降低因操作不当引发的仓库性能问题风险。

代码

🚧 Now we’re all Forked!

@Cooper Chen:Forked 是一个简化共享数据管理的 Swift 工具,专为多设备数据同步和冲突解决设计。借鉴 Git 的分支和合并机制,Forked 能轻松实现三方合并(3-way merge),并自动处理并发冲突。该工具支持与 iCloud 等云服务同步,确保跨设备的数据一致性,并通过简洁的 API 帮助开发者快速实现数据合并和冲突解决。无论是离线编辑还是实时协作,Forked 都能提供高效、可靠的数据管理方案。如果你需要在应用中实现智能数据同步和冲突解决,Forked 是一个理想选择。了解更多并开始使用 Forked,查看官方文档:Forked GitHub 仓库

🐢 解密小红书与美团的合作案例

@EyreFree:播客主要探讨了小红书与美团两大平台的战略合作,美团正在寻求从单纯的效果营销转向更注重品牌价值和用户心智的增长方式,而小红书则凭借其独特的内容生态和用户群体特征,成为流行生活趋势的策源地。双方合作的核心在于优势互补:美团有流量但缺乏优质内容,小红书拥有丰富的 UGC 内容但需要商业变现出口。这次合作反映了内容平台与交易平台的融合趋势,也展示了"反漏斗模型"在实际商业场景中的应用。虽然可能离具体的技术开发较远,但对互联网商业逻辑感兴趣的朋友可以听一下。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #319 | 2025-01-06

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

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

文章

🐎 聊聊 Flutter & Dart 里的内存泄漏和优化,也许没你想的那么复杂

@Crazy:本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题,主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短,作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别,以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中,已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架,来解决关于 context 引用的问题。

🐕 百度 APP iOS 端磁盘优化实践(上)

@含笑饮砒霜:在 APP 开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题,从 iOS 沙盒文件存储机制出发,系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略,以及多维度触发机制和灵活的用户交互设计,平衡了系统性能与用户体验。

🐎 Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing

@DylanYang:在 SDK 的维护过程中,检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具,但是对 iOS target 使用会有异常,第二种方式是结合 xcodebuild 和 swift-api-digester,第三种则是作者开源的一个工具 Swift Public API Diff,它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。

🐢 Compile Metal shader Bitcode to x86 and ARM assembly

@ChengzhiHuang:作者通过逆向的手段研究了从 metal 代码到 air 文件(LLVM Bitcode),最后到 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

@CrazyCoderShi: 如标题所言,Flutter 的 UI 组件编码方式一直被开发者们所诟病,本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化,毕竟末尾的 '括号山' 还是很高的。

代码

🐢 Home Assistant iOS

Home Assistant iOS 客户端,代码全部开源。Home Assistant 是一款开源的智能家居自动化平台,允许用户控制所有连接到同一网络的智能家居设备。项目文档详实,甚至面向零基础用户,了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 Home Assistant Feature overview

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #318 | 2024-12-30

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

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

周报编辑组又来新人啦~

欢迎 阿权 加入老司机技术,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。

希望 阿权 的加入也能为大家带来更多元化的内容输出!

文章

🐕 Calling Hidden Swift Functions

@AidenRao:这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别,从 open 到 private。但是,用 Swift 编写的 Apple 框架(尤其是 SwiftUI)包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。

🐕 Be careful wrapping a throwing function in a Task

@Barney:本文讨论了在 Swift 中将抛出函数包装在 Task 中时需要注意的事项。直接在 Task 中调用抛出函数可能导致不如预期的行为,因为 Task 默认会捕获并处理错误。作者举例说明了如何正确使用 Task 来执行抛出函数,并提供了实现的最佳实践,以确保错误被适当地处理。同时,文章还强调了在并发编程中理解错误处理的重要性,帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。

🐎 Enhance Xcode Previews with Unit Test Coverage

@DylanYang:本文介绍了如何利用单元测试加强 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,对于想要逆向 Metal 的朋友来说是非常有用的工具。

音视频

🐎 为什么 C 口数据线越来越乱?

@极速男孩:苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线,不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #317 | 2024-12-23

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

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

 Developer - 设计开发加速器

展望未来:打造出色的 visionOS App(线下)

参加在上海 Apple 开发者中心举办的为期一天活动,了解如何打造出色的 visionOS App。

你将通过三个讲座学习如何开始使用 SwiftUI,探索一流的 App,并深入了解 RealityKit 和 Reality Composer Pro。随后,你还将听取开发者社区成员的分享,并有机会体验一系列 visionOS App 示例。

文章

🐕 得物 iOS 函数调用栈及符号化调优实践|得物技术

@Smallfly:这篇文章介绍了得物技术团队如何解决 iOS 隐私合规检测的性能难题。文章详细解析了 +[NSThread callStackSymbols] 的内部机制,并通过逆向工程优化了调用栈的获取与符号化过程。实现包括自定义 callStackSymbols 方法、缩短堆栈长度以及智能缓存策略,显著降低了 CPU 占用,提升了检测效率。为 iOS 开发者提供了优秀的性能优化实践案例。

🐕 Exploring Apple Intelligence: Image Generation

@Cooper Chen:Apple 推出了几款创新的图像生成工具,推动个性化创作和数字交流。Image Playground 允许用户通过文本和视觉提示生成图像,并与 PencilKit 集成,带来 Image Wand 功能,让用户将手绘草图转化为精美图像。同时,Genmoji 让用户根据文本描述生成个性化表情符号,增强了数字沟通的表现力。这两款工具不仅注重创意自由,还在包容性和版权合规性上做出了努力。此外,开发者可以将这些功能集成到应用中,扩展数字创作的可能性。而这篇文章为数字创作和个性化互动提供了不错的参考,展示了 Apple 工具如何为用户和开发者带来创意支持。

🐕 Apple' s use of Swift and SwiftUI in iOS 18

@ZengyiMa:这篇文章分析了苹果在 iOS 18 中 Swift 和 SwiftUI 的使用情况。iOS 18 中使用 Swift 和 SwiftUI 的应用数量持续增长,甚至在安全固件的低级别部分开始使用 Swift。此外,新开发的技术,如 Apple Intelligence,也依赖于 Swift。截止目前,iOS 18 现在包含 592 个使用 SwiftUI 的二进制文件,Swift 代码的二进制文件数量相比较 iOS 17 增加了 50%。

🐎 JDImage - 京东自研鸿蒙图片库

@Crazy:JDImage 是京东使用 C++ 打造的一款跨平台的图片加载框架,主要解决系统和其他第三方加载组件的问题,比如加载速度较慢,格式支持不全等。JDImage 在架构上借鉴了 SDWebImage 与 Glide 等图片加载框架,将整体图片库分解为:图片缓存、解码器、图片源拉取、性能监控、图片组件五个部分,使用流水线设计灵活调整执行流程,满足各类的图片加载需求。最后关于 C++ 的跨端代码要根据自己项目的实际情况进行选择,使用之前对错误的捕捉与升降级一定要事先准备好。

工具

🐕 HuggingChat macOS

@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

@bq:通过 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

@DylanYang:作者是一个爱好自己通过代码实现创意的设计师,他通过 SwiftUI 实现了不少有创意的交互设计,并且都提供了原型 Demo。独立开发者们如果希望尝试一些有特色的交互的话可以参考参考。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #316 | 2024-12-16

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

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

新闻

🐢 Flutter 3.27 发布

@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

@BluesJiang:这篇文章使用了一个比较巧妙的方法来实现截屏隐藏隐私信息。核心是使用 UITextFieldisSecureTextEntry 属性,然后将被包装的 View 作为其子 View 即可。然后使用了 preference 来实现父容器大小与子容器大小匹配。可以通过这个文章整体了解 SwiftUI 的 View 的包装和 Modifier 的写法,是一个很好的参考。

🐕 Why Can't You Loop Over Ranges of Characters in Swift

@bq:当你对 "a"..."z" 执行 for 循环遍历时,你会惊讶地发现 Swift 并不支持的,虽然这有点违反常理。这篇文章你将了解到 Swift 字符并不是简单的 ASCII 字符,而是可变长的 Unicode 字符,其在不同的语言环境有不同的排序,不断迭代的 Unicode 也在不断地扩充字符范围,甚至有些字符是集群的时候,遍历、计数将变得不太可能。文章也介绍了 Unicode 这么设计背后的意图,以及当你硬要遍历一个字符范围时候,作者也给出了一个比较安全的解决方案。

🐕 WebKit GPU Profiling

@莲叔:WebGL 的 debug 一直以来都是一个令人头痛的问题,通过浏览器内置的调试能力能够满足一部分需求,但如果需要更进一步的分析往往都缺乏足够好用的工具。这篇文章针对 WebGL 和 WebGPU 两种应用在不同平台的调试技巧做了汇总,包括 Mac、Window 和 Quest。其中对于在 Mac 上通过 Xcode 来做分析给出了 step by step 的步骤,非常友好。

🐕 Concurrency Step-by-Step: Reading from Storage

@Barney:本文提供了关于如何在 Swift 应用中逐步从本地存储读取数据的详细指南。文章重点介绍了如何使用 Codable 协议来序列化和反序列化对象,并通过 FileManager 管理文件的读取和写入。作者逐步解析了实现这个过程的关键步骤,包括如何设置数据模型、保存数据以及从文件中加载数据的示例代码。此外,文章还提供了常见问题的解决方案,以帮助开发者更有效地处理数据存储。适合想要深入理解 iOS 数据存储机制的开发者阅读。

代码

rmtrash

@Kyle-Ye: Swift 实现的 macOS 命令行工具 rm 的替代方案,用于将文件移动到废纸篓。此外 rmtrash 提供了与 Linux 和 macOS 版本 rm 命令完全兼容的标志位支持方案。

ml-cross-entropy

@Leo:由 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 及往年内参

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

说明

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

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

老司机 iOS 周报 #315 | 2024-12-09

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

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

新闻

CocoaPods Trunk Read-only Plan

Cocoapods 为将 Specs 仓库转为只读状态制定了时间表,预计在 2026 年 12 月 2 日正式不再接受新的提交。

文章

🐕 有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常 | 肘子的 Swift 记事本

@Barney:本文探讨了 SwiftUI 中 onChange 的异常行为,特别是在多层导航的情况下。文章分析了在使用 NavigationViewNavigationLink 时,onChange 修饰符可能会出现的问题,尤其是当视图层级嵌套较多时。作者提供了几个实际示例,演示如何管理状态变化和确保 onChange 正常响应。同时,提供了一些最佳实践,以帮助开发者避免常见陷阱并提升应用性能和用户体验。

🐕 Improving the approachability of data-race safety

@Smallfly:这篇文章提出了 Swift 并发特性面临的易用性挑战,包括过多的显式注释、数据竞争误报和异步代码编写困难。文中提出了解决方案包括减少并发注释、调整异步函数语义以减少误报、提供同步和异步代码之间的桥接工具,以及自动迁移代码等。目的是为了让 Swift 并发更易学易用,同时保持高性能。推荐给对 Swift 并发特性演进感兴趣的同学阅读。

🐎 深入探讨 C++ 多线程性能优化

@老驴:这篇来自腾讯技术工程的文章从实际案例出发,深入探讨了 C++ 多线程编程中的性能优化问题,包括锁竞争、缓存一致性等难点,并通过详细的 benchmark 数据对比锁与原子操作的性能差异。此外,文章还介绍了如 Epoch Based Reclamation 等高级优化方法。无论是提升性能还是理解底层机制,这篇文章都值得一读。

工具

Xcode + ChatGPT: Official Support is Available Now

@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

@Cooper Chen:Easydict 是一个开源的词典翻译 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果,目前支持市面上绝多数主流的翻译 App,使用者可以通过 Homrebrew 快速安装使用,Easydict 支持鼠标滑词、OCR 识别等功能,是 Mac 平台上非常高效的翻译软件,值得推荐。

代码

swift-sharing

@bq:如其名,sharing,你能想到的状态共享,跨模块间的状态共享、持久化、观察监听,它都做了,无论是实现业务逻辑、Combine、SwiftUI、UIKit 都能无痛接入。关键人家实现还非常优雅,宏、属性包装器、清晰的职责实现,都是很优秀的实践,单单接入就能让你的代码耳目一新了。还是那句话,Point-Free 出品,必属精品。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

[北京] 比图科技 - 高级 iOS 工程师

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #314 | 2024-12-02

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

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

文章

🐎 AutoConsis:UI 内容一致性智能检测

@Damien:这篇文章介绍了美团技术团队与复旦大学计算机学院合作开发的 AutoConsis 系统,这是一个自动化智能检测流程,用于检测移动 App 中 UI 界面内容的一致性。该系统通过目标区域识别、目标信息提取和一致性校验三个关键步骤,实现了低成本、高泛化性和高置信度的 UI 内容一致性检测。AutoConsis 在美团 App 的多类营销业务场景中得到应用,有效提升了 UI 质量保障,并在 ICSE 2024 会议上发表了相关论文。

🐎 Lazy vars in @Observable classes in Swift

@zoeGuo:从 ObservableObject 协议迁移到 @observable 宏时,如果之前使用 lazy 修饰了该类型的变量,那么迁移后将会遇到报错的情况。文中解释了这种情况并提出可以使用 @ObservationIgnored 来解决。

🐎 Exploring Apple Intelligence: Writing Tools

@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 治理-系统键盘语音

@xiaofei86:本文主要介绍了货拉拉解决系统键盘语音转文字崩溃的整个排查过程。通过崩溃类型、崩溃堆栈和偏移指令等信息,结合汇编指令调试,最终确定崩溃根本原因,并进行有效治理。感兴趣的同学可以阅读原文学习更多疑难崩溃的分析思路。

🐢 Google Deepmind LLM 研究员解读 OpenAI o1 及 LLM+ 强化学习新范式 | 3 小时播客全文精华

@含笑饮砒霜:这篇文章是对一个长达 162 分钟播客内容的深入解读,该播客深入探讨了 OpenAI 的 o1 模型及其与 LLM(大型语言模型)和强化学习(RL)结合的新范式。以下是播客内容的主要总结:

    1. Agent 系统
    • 基础:推理能力是构建 agent 的基础,需解决 AI 间协作、竞争及任务分工。
    • 工具使用:关键在于提升模型对工具功能的理解和调用能力。
    • 构建要素:强大基础模型、高质量工具、优质 prompt 及学习使用工具的数据集。
    • 数据收集:理想方式是将数据标注嵌入用户日常工作流程。
    1. 思维链(CoT)与强化学习(RL)
    • 思维链:详细步骤提升模型表现,分显式(明确 token)和隐式(直觉思考)流派。
    • 强化学习:通过 agent 与 environment 交互和 reward 指引学习。
    • 模型反思:允许模型反思修正错误,显著提升 reasoning 任务表现。
    1. AI 反馈系统与 Human in the Loop
    • AI 优势:快速处理文本并总结,处理复杂评估任务有优势。
    • Human in the Loop:AI 简化复杂问题,人类做最终判断,提升可扩展性。
    1. Multi-Agent 与角色分类
    • Multi-Agent:更像 multi-task,需角色分离,如 generator 和 critic。
    • 角色分离:通过不同 persona 实现,提升 multi-agent 系统效率。
    1. Single-Agent 与 Multi-Agent
    • Single-Agent:在达到超人类水平前,Multi-Agent 表现更优。
    • 过渡阶段:Multi-Agent 可能是过渡产物,未来趋向单一全能模型。
    1. 数据与方法
    • 数据获取:高质量数据是训练关键,特别是在 reasoning 领域。
    • 合成数据:MCTS 等方法生成高质量合成数据。
    1. 未来展望
    • 一年内:期待 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

@Kyle-Ye: 作者总结了一些在使用 swift-syntax 时的经验和技巧 , 并最终在 DetailsPro 应用中实现了对 SwiftUI 代码实时更新的语法高亮显示功能。

代码

SwiftUIFX

@bq: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 官方文档

NSDockTilePlugIn

@Cooper ChenNSDockTilePlugIn 是一个用于在 Mac 开发中用于应用未运行时自定义 Dock 图标的插件。通过实现这个插件,开发者可以在应用程序未启动的情况下修改其 Dock 图标,并提供自定义的 Dock 菜单。插件的名称通过应用的 Info.plist 文件进行指定,并在登录时或图标被添加到 Dock 时加载。插件可以通过实现 setDockTile(_:) 来定制图标,并通过 dockMenu() 提供自定义菜单选项。当图标不再有效时(例如应用被移除出 Dock),插件会接收到 nil 参数进行销毁操作,这个插件对于部分 Mac 开发用不错的借鉴价值。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #313 | 2024-11-25

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

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

新闻

Can't install any apps on my new iPhone 16 Pro with iOS 18 from Xcode

苹果的开发工程师对于从 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 /

文章

🐎 编译器,靠你了!使用类型改善状态设计

@Kyle-Ye: 作者通过一个实际工作中碰到的端到端消息发送的例子,讲述了如何利用 Swift 的类型系统 , 将状态逻辑编码到类型中 , 由编译器来保证程序执行正确性,从而减少使用和维护的心智负担。

🐕 MainActor usage in Swift explained to dispatch to the main thread

@AidenRao:在构建应用程序时,在主线程上执行 UI 更新任务是至关重要的,而使用多个后台线程时可能会遇到点麻烦。使用 @mainactor 属性将有助于确保您的 UI 总是在主线程上更新。文章详细解释了什么是 MainActor,全局 actor 的概念,以及如何在 Swift 中使用 MainActor。

🐎 Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development?

@Crazy:从 React Native 开始,移动端的开发就发起了跨平台的改革,如今 Flutter,KMP,C++,都进入了跨平台的研发序列。本文主要对 Flutter 与 Kotlin 两个现今比较火的跨平台框架进行了对比。

Flutter 平台的优点主要为:

  1. 统一代码库
  2. 富有表现力和灵活的用户界面
  3. 快速的开发周期
  4. 强大的社区支持

KMP 平台的优点:

  1. 原生一般的性能
  2. 高互用性
  3. 高代码共享能力
  4. Google 的支持

总结一下:Flutter 主要用于项目启动、 MVP 功能、项目原型、有 UI 统一化的需求开发。KMP 主要用于大项目和已有代码库、需要高性能、需要多平台逻辑分享的功能开发。

🐢 Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层

@CrazyCoderShi: 本文从原理层讲解了 Overlay 和 OverlayPortal 之间的差异,并且对如何使用 OverlayPortal 做了更深一步的阐述,对于 Flutter 开发的小伙伴来说是一个不错的科普文!

🐕 Integrating Live Activity and Dynamic Island in iOS: A Complete Guide

@Barney:本文介绍了关于在 iOS 中集成 Live Activities 和 Dynamic Island 的完整指南。它涵盖了如何创建和管理 Live Activities,以便在锁屏和应用程序上显示实时信息。此外,指南还介绍了如何利用 Dynamic Island 来增强用户体验,让用户能够方便地访问和交互实时通知和活动。可供开发者参考,实现更具动态交互的应用程序。

🐎 Swift Format in Xcode

@DylanYang:本文介绍了在 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 及往年内参

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

说明

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

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

老司机 iOS 周报 #312 | 2024-11-18

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

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

新闻

🐎 We're forking Flutter. This is why.

@极速男孩: Flutter 社区在 Flutter 基金会的支持下,启动了名为 "Flock" 的 Flutter 新分支。此举是由于 Google 在处理桌面应用支持等方面的政策使一部分开发者感到不满,认为其发展速度和开放性不足。"Flock" 分支希望通过更加民主和包容的社区驱动模式,更好地响应开发者的需求。

A memory leak in Apple's 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

与我们一起探索出色的 visionOS App,了解设计师是如何针对无边画布进行创作的。在为期半天的讲座中,你将了解如何采用沉浸式功能、为眼睛和手设计交互体验,并充分利用深度、比例和空间。

另外还有 Apple Vision Pro 开发者实验室 的线下实验室,感兴趣的同学们可以积极报名。

文章

🐎 Xcode stops fetching Swift packages

@Smallfly:在 Xcode 16.1 中,Swift 包依赖突然无法获取,并出现 “ Fatal: cannot use bare repository ” 错误。经过排查,作者发现问题与 SourceTree 添加的全局 Git 配置 safe.bareRepository = explicit 有关。删除或注释掉该配置后,Xcode 恢复正常。

此配置的作用是提高安全性,建议不删除全局配置,而是通过命令手动标记相关仓库为安全:

git config --global --add safe.directory /path/to/repo

更详细的讨论可见 SPM 的 issue 8068,以及对应的 PR

🐕 逆流而上的设计 - Swift 所有权和 ~Copyable

@zoeGuo:Swift 5.9 中引入了不可复制类型的标记 ~Copyable(non-copyable),在今年的 Swift 6 中,之前类型扩展(extension)和泛型(generic)不支持 ~Copyable 的不足也得到了解决,~Copyable 的可用性得到了提升。文章用 ~Copyable 的工作方式、所有权转移关键字、在泛型或扩展中使用 ~Copyable,三个部分详细讲解了 ~Copyable 的概念、工作原理以及具体如何使用。作者在对 ~Copyable 的概念阐述中提到:“以往的协议是‘为类型增加功能’,而 ~Copyable 则是‘为类型解除限制’”,相信能帮助你更快理解 ~Copyable 协议。在文末:“只在确实需要独占资源或严格控制生命周期时才使用 ~Copyable,可能会是更加平滑和正确的方式”,也很好的总结了 ~Copyable 的使用场景。文中有大量代码例举以及内存管理的详细示意,强烈推荐阅读原文。

🐕 THREADS IOS PERFORMANCE

@DylanYang:本文是 Threads 开发讲述了 Threads 是如何优化 App 性能的。Threads 主要关注的性能指标包含了图片加载速度、网络内容的返回速度、发布成功率、页面加载耗时、发布可靠性等。本文对页面加载耗时和发布可靠性方面做了更深入的讲解,包括通过劣化实验推断页面加载耗时对业务数据的影响、提供 debug 工具帮助业务研发判断自己业务的性能水平以及发文草稿的磁盘占用对用户的体验影响等。本文对 Threads 各方面的性能监控、优化等都有涉及,想要优化自己 App 的读者可以细致阅读一下。

工具

screenshot-to-code

@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

@Barney:该网站提供了关于 Swift 编程语言的会议资源,包括视频、材料和演讲稿。会议内容覆盖 Swift 性能优化、AI 集成、嵌入式 Swift 应用、可访问性构建等多个技术领域。这个平台为 Swift 开发者提供了丰富的学习材料和交流机会。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #311 | 2024-11-11

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

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

文章

🐕 Migrating Combine to AsyncAlgorithms

@zoeGuo:Swift Concurrency 发布以来,其设计在许多简单用例上大大超越了 Combine,而在 AsyncAlgorithms 发布之后,Combine 中的许多功能在 Swift Concurrency 中都可以使用。本文以一个示例项目为例,逐步演示了将 Combine 代码迁移到 AsyncAlgorithms 的过程,涵盖了数据源合并、流和节流、以及 CurrentValueSubject 到 AsyncChannel 的转换等常见场景。迁移后代码更简洁易读,易于维护;与 Swift Concurrency 无缝集成,享受异步编程的便利。

🐕 Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar

@Barney:这篇文章主要探讨了在 SwiftUI 中使用主工具栏的实现方法。作者介绍了 SwiftUI 的 ToolBar 视图及其在 iOS 16 及以上版本中的应用,强调工具栏在提升用户体验和界面整洁性方面的重要性。文章通过示例代码展示了如何创建和自定义工具栏,包括添加按钮、分隔符以及响应用户交互的功能。此外,作者还讨论了工具栏的布局和风格设置,以及如何在不同设备上保持一致的用户体验。

🐕 Faster iOS Networking with Shared Dictionary Compression

@JonyFang: 共享字典压缩是一种有效加速 iOS 应用的网络性能的技术,通过在客户端和服务器之间共享数据字典来减少传输数据量。

工具

GitHub Copilot 官方发布 Xcode 插件

@kemchenj:Xcode 在 AI 补齐的功能上一直落后其它 IDE/Editor,虽然今年 Xcode 也发布了 Code Completion Prediction 功能,但只有国外能用。终于终于,GitHub Copilot 官方在近日发布了 Xcode 插件,让我们也可以用上 AI 补齐的功能:

  • 代码补齐
  • 多语言支持,包含 Swift/Objective-C/C/C++/Metal
  • 多行代码补齐
  • ...

周报之前其实也介绍过一款国内工程师开发的 Copilot Xcode 插件,经过了解之后发现 GitHub 这次发布的插件其实是 fork 出来的,并且是已经跟原版作者达成了协议,GitHub 也给了一点赞助金给作者

原版后续也会继续维护,而且就目前来说原版的功能甚至比 GitHub 版本更多更丰富。最后想说这大概是我入行以来看到最和谐的一次项目分叉了。

代码

🐕 Metal-Puzzles

@BluesJiang:这个代码库提供了一些简单的习题,用来联系编写 Metal 的 Custom Kernel,可以利用在 MLX、Metal Shader 等场景下。对于想学习使用 Metal 加速计算、自己写 Shader 的可以下载下来跟着教程周走一遍。仓库提供了一个测试框架,需要写的代码注意是在 source 变量字符串里。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #310 | 2024-11-04

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

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

新闻

TestFlight 增强功能助你吸引测试员

TestFlight 分发功能迎来了加强,新增对测试员的招募标准,例如指定 OS 版本,方便在在 1w 的名额内,尽可能按 app 实际要求暴露问题,例如鼓励低 OS 的用户加入测试。同时还提供了公开链接的转化情况看板等新功能。总体是一次满足开发者们痛点的更新。

文章

🐕 How to build a Safari extension with SwiftUI

@Barney:Polpiella 在博客中分享了如何使用 SwiftUI 构建 Safari 扩展的步骤。首先,在 Xcode 中创建 Safari 扩展目标并修改 Info.plist 文件,设置工具栏项和网站访问权限。接着,利用 SFSafariExtensionHandler 创建 SwiftUI 视图,并通过 PopoverViewController 展示。最后,运行应用即可在 Safari 中安装并测试扩展。

🐎 Phase Animator Behavior

@AidenRao:在这篇文章中,Chris Eidhof 探讨了 PhaseAnimator 的工作原理。当视图的位置从 -100 更改为 -100 时,更新前后的节点完全相同,并不会产生任何动画,当没有具体的动画时,会立即调用动画的完成处理程序。换句话说,我们马上就进入了下一个阶段。

🐎 Swift Macro 在业务开发中的探索与实践

@JonyFang: 结合模块化场景及曝光场景下的应用,通过模块宏能解决模块化通用模版定义的繁琐, 通过曝光宏能降低整个曝光体系接入的复杂度,本质上都是让 Swift Macro 帮助我们减少重复样板代码的编写,提供快速接入的能力。接入 Swift Macro 可以玩出很多花样,增加了代码的趣味性和可读性,降低了维护成本。

App development on iPad

@Kyle-Ye: 作者在过去一年里,全面投入到使用 iPad 进行应用程序开发。这篇文章介绍了在 iPad 上使用 Swift Playgrounds 进行 iOS 应用程序开发的可能性和局限性(缺乏 Xcode 的某些功能,如断点调试和模拟器支持)。虽然还存在一些局限性,但通过一些创新的解决方案,这些问题都可以得到缓解。

🐎 Vapor and Swift Testing: Running tests in parallel

@Smallfly:这篇文章探讨了在 Swift 和 Vapor 框架中如何进行并行测试。它解释了 Swift Testing 与 XCTest 的不同,并提出了使用 Repository Pattern 来避免测试中的数据库查询,以实现测试的并行执行。同时还介绍了如何配置和使用内存中的仓库进行测试,并重写代码以通过仓库访问数据,从而提高开发效率和测试稳定性。推荐对 Swift 服务端开发和测试的同学阅读。

🐎 Reminder: Apple Watches use 32 bit pointers

@极速男孩:Apple Watch 从 Series 4 起采用 arm64_32 架构,虽为 64 位系统,但用 32 位指针。开发者在 watchOS 模拟器中测试时 Int 为 64 位,而在实际硬件上 Int 为 32 位,导致模拟器运行正常的代码在硬件上可能崩溃。例如,处理时间戳的代码可能在 Apple Watch 上失败。所以要在处理 Int 和 CGFloat 时需注意这种差异,确保代码在硬件上也稳定运行。

🐎 Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

@Crazy:本文主要介绍了 Flutter 在 3.10 版本里进行的颜色体系更改,首先介绍了 sRGB 和 P3 两种颜色体系的在色域上的区别,从肉眼上看 P3 的颜色更加鲜艳。紧接着文章便介绍了新版本的颜色体系,其中主要对颜色位数做了对比讲解,并且对源码也进行了分析。文章的最后作者更是对现有 API 的现状进行分析,更是对之后的 API 发展情况进行了介绍。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #309 | 2024-10-28

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

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

新闻

New requirement for app updates in the European Union

自 2024 年 10 月 17 日起(已经生效),在欧盟地区上架的 app 需要提供交易商身份信息,之后才能提交 app 。如果一直不提供交易商信息,则 app 会在 2025 年 2 月 17 日被下架。详见:填写说明

Apple Push Notification service server certificate update

这是一则前置通知:Apple 推送通知服务 (APNs) 的证书颁发机构 (CA) 即将改变。APNs 将于 2025 年 1 月 20 日更新沙盒环境的服务器证书,并于 2025 年 2 月 24 日更新生产环境的服务器证书。

大家可以等沙盒环境更新后再进行操作,建议在过渡期间同时保留新旧两份证书。

文章

🐢 Elite Hoops Year One: 12 Bite-Sized Lessons

@CrazyCoderShi: 本文是一个独立开发者关于应用增长过程的思考,从初始的少量付费用户开始到市场分析思考共 12 条,可谓字字珠玑,对于正处于独立开发中的同学来说有不小的借鉴意义。

🐕 swiftlang/swift-java

@Barney:这个项目提供了 Swift 和 Java 互操作性的工具和库,允许 Swift 程序直接调用 Java API。还有一个 jextract-swift 工具,用于从 Java 源码中提取用于 Swift 调用的代码。项目处于早期开发阶段,依赖于特定的 Swift 和 JDK 版本。

🐕 直接使用 xcodebuild 比 Xcode 慢的原因分析

@Cooper Chen:这篇文章主要讨论了 xcodebuild 工具相较于 Xcode 更加耗时的问题,xcodebuild 每次构建时向 Apple 的 API 发出了多个请求,响应时间较长,导致构建变慢,并且 xcodebuild 对每个目标逐个发请求,目标越多则效率差异越明显,作者提供了解决方法包括修改 hosts 文件和使用网络嗅探工具阻止请求。这些方法能显著提高构建速度,同时作者建议用户也提交反馈,以促使 Apple 修复此问题。

🐕 The Memory Leak: An Xcode Detective Story

@莲叔:这篇文章讲述了作者从一个自己 app 遇到的 deeplink 的 bug 一步步的排查到问题的根源的过程。问题的根源虽然并不复杂,但触发点非常隐蔽,至少属于 CR 时很难发现的问题,值得关注。另外,过程中一步步讲述了作者自己排查的过程以及思路,对于刚入门的同学应该也有非常有帮助。

🐕 Beware UserDefaults: a tale of hard to find bugs, and lost data

@xiaofei86:在 iOS 15 “应用预热” 和 ”敏感数据解锁前不可访问(钥匙串等)“ 2 个系统功能的互相影响下,会出现 UserDefaults.standard 实例取到空的偶现问题。一但问题出现,程序可能认为是首次启动,进而用默认数据覆盖 UserDefaults,导致更严重的问题。作者总结了能够大概率复现的场景,并提供解决方案。同时也封装了 TinyStorage 用来替代 UserDefaults,感兴趣同学可以阅读原文了解。

🐕 MoveMe - SwiftUI Edition

@AidenRao:使用 SwiftUI 来处理手势和动画实际上并不像听起来那么直观,这篇文章讲解了如何实现正方形的拖动、缩放以及过渡动画效果,并解决了一些在实现过程中出现的问题。文章还提供了代码示例和 GitHub 链接供参考。

🐎 So how does this whole @preconcurrency thing work?

@DylanYang:@preconcurrency 是一个新增的关键字,帮助开发者屏蔽并发相关的警告。在开发者往严格的并发框架逐渐迁移的流程上,有时会出现无法快速迁移,甚至无法迁移的情况,而 @preconcurrency 能够允许开发者忽略这部分警告,使得开发者能够增量的完成并发框架的迁移。本文介绍了 @preconcurrency 可以在哪些场景下帮助开发者处理这些问题,比如在一个 @mainactor 的类型里实现一个 nonisolated 的 protocol 场景,或是处理三方库中无法迁移到 concurrency 框架的代码等。有遇到类似问题的开发者可以阅读此文了解更多。

代码

ProtobufKit

@kemchenj:轻量跨平台 ProtoBuf Swift 解决方案,实现了基础的序列化 API,并且提供一套类似 Codable 的方案支持,对比原版 5.7MB 的二进制大小,这个版本只需要 142KB。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #308 | 2024-10-21

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

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

新闻

Xcode 16 + withCheckedContinuation 崩溃

@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 系列,社区总结的临时解决方案是全部切换为 withCheckedThrowingContinuation 变体
  • 因为 iOS 18 Beta 上的 ABI 变更导致的 crash。这个 Apple 员工认为符合预期,且在最终的正式版 18.0 上不会有问题。但仍会影响 iOS 18.0 Beta 和部分 iOS 18.1 Beta。
    • 如果你的 App 有大量使用 Beta 系统的用户(>1%),建议也可以暂时延缓升级 Xcode 16.0 。

详细解释可以参考这篇 Apple 员工回复

文章

🐕 🌟 二刷 iOS 性能与编译,简单点说

@Leo:这篇文章是性能和编译相关的优质好文,文章内容覆盖了卡顿、内存、IO、CPU、启动、Bazel、构建等多个领域,每个领域下通过实践中遇到的问题展开,并给出了充分的代码示例,对想了解性能优化和编译构建领域的同学会很有帮助,推荐阅读。

🐎 AVAudioEffectNode: painless low level audio effects written in Swift

@Smallfly:这篇文章介绍了 AVAudioEffectNode 的概念和用法,包括应用音频效果、创建自定义音效处理节点以及与其他音频节点的连接方法。作者提供了代码示例,展示如何配置和使用 AVAudioEffectNode,以便开发者可以在实时音频处理中轻松添加各种效果,如混响和延迟。通过这些实践,开发者能够增强音频应用的表现力和互动性。

🐎 Copy On Write and the Swift-CowBox Macro

@Kyle-Ye: 一篇关于 Swift Copy on Write 和 Swift-CowBox 原理分析的文章,并给出了 Swift-CowBox 的性能评测。

🐕 Security-scoped bookmarks for URL access

@水水:本文介绍了 Security-scoped Bookmarks (Mac OS 上的安全区域书签)的在 URL 访问上的作用、使用范围和使用示例、以及使用时发现的一个由于 “ ScopedBookmarksAgent ” 引起的应用挂起的问题 ,虽然苹果已经在 macOS 15.1 beta 4 中修复,但是作者也提供了一个解决方案。 如果您有在 Mac 应用上存储给定 URL 资源的权限、并在后续使用中重新获得访问权限,可以使用安全区域书签功能来实现。

🐎 Discover 3 new features of Xcode 16

@zoeGuo:文章介绍了 Xcode 16 的三个新功能:新增“新建空文件”操作简化文件创建流程、支持直接粘贴代码块到项目导航器自动生成新文件;Asset Catalogs 新增查找引用功能,便于清理未使用资源;调试器推出 Backtrace 视图,优化堆栈跟踪的查看体验。

🐎 Are Android apps THAT much smaller than iOS?

@Crazy:本文是一篇对于新开发者的入门级文章,本文主要分析了为什么 iOS 应用在应用商店上展示的比 Android 应用在应用商店上展示的大出许多。文章首先言明了两个商店所使用的 Size 意义是不一样的,App Store 用的是安装大小,Goolge play 使用的是下载大小。之后又根据编译方式分析了两种 app 在编译与执行情况下的不同,并且给出了经过各种编译方式后安装到手机上的应用文件大小的对比图。最后文章也给出了关于 iOS 应用瘦身的一些建议,当然在产品的开发过程中,产物大小不能说明什么,但是良好的开发习惯与知识储备,确实可以令你的产物更小,更能节省用户的流量。

视频

🐎 SwiftCraft 2024

@Damien: 这是今年 SwiftCraft 2024 大会的视频地址,SwiftCraft 是英国一个新的 Swift 开发者大会,在这里你可以学到 Swift 开发中的各种技术,如用 Swift 开发 App/ 游戏,如何做 Mobile 的 DevOps 等等。

代码

apple-knowledge

@含笑饮砒霜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 及往年内参

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

说明

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

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

老司机 iOS 周报 #307 | 2024-09-30

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

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

提前祝大家国庆快乐,我们下一期周报会在 10 月中旬与大家见面。

文章

🌟 🐢 在 Swift 中如何正确传递 Unsafe Pointers 参数

@Kyle-Ye: 文章总结了作者在抖音推动规模化落地 Swift 组件中发现的一些常见 Unsafe Pointers 问题。通过具体的工程例子和编译器代码分析给出了具体原因。

为超越 JVM 而生?深入理解 Kotlin Native 的梦想与可能

@JonyFang: Kotlin Native 是 Kotlin 多平台生态的关键一环。本文依据 Kotlin Native 的源码,结合作者在运用 Kotlin Native 开发多平台应用的实战经验,详细为大家解读 Kotlin Native 在编译时和运行时的实现细节和实践技巧。作为 Kotlin 多平台生态的重要一环,Kotlin Native 不再依赖其他运行环境,同时也能保持与其他平台一致的开发体验。

🐎 Freeing disk space on GitHub Actions runners

@J_Knight_:本文分享了可以清理 GitHub Actions 的运行器所在的服务器的内存空间的脚本代码,以用来防止在执行 GitHub Actions 工作流的时候遇到内存不足的问题。

🐕 SwiftData: Solving Fatal Errors and EXC_BAD_ACCESS While Handling Entities on Different Threads

@AidenRao:这篇博客介绍了在处理不同线程上的 Entities 时如何解决 SwiftData 中的异常崩溃。通过示例代码和步骤,作者展示了如何有效解决这些错误,希望能帮助读者解决类似问题。

🐎 Exploring SwiftUI: Creating a Custom Slider Inspired By Camera Control

@zoeGuo:文章是作者在看到 iPhone16 上相机控制的丝滑交互动效后收到启发,自己用 SwiftUI 实现了一套类似的动画流畅、并且有交互反馈的 slider 控件。作者在文中介绍了设计和实现的思路,并最终应用在自己的上线 App 中的过程。

🐎 Point-Free is Xcode 16 ready

@极速男孩: Point-Free 更新了开源库,以支持 Swift 6.0 和 Xcode 16,同时保持对旧版 Swift 和 Apple 平台的兼容性。此次更新特别强化了并发安全性,Dependencies 库通过使用 TaskLocal 实现了无警告编译,减少了不安全并发操作。Composable Architecture 库的 Store 现已完全在主线程上执行,确保了线程安全。此外还兼容 Swift 的新测试框架,同时继续支持 XCTest,帮助开发者平稳过渡。这些改进均保持向后兼容,开发者无需担心破坏性变更。

代码

ChatMLX

@EyreFree:ChatMLX 是一款面向 macOS 的开源聊天应用,基于大型语言模型 LLM 和 Apple silicon 芯片设计。其主要特点包括:

  • 多语言支持:兼容英文、中文(简 / 繁)、日文和韩文,满足多元用户需求;
  • 多模型集成:支持 Llama、OpenELM、Phi、Qwen 等多个 LLM 模型,为用户提供丰富的对话选择;
  • 高性能表现:充分利用 MLX 框架和 Apple silicon 芯片的优势,实现快速响应;
  • 隐私保护:通过本地运行 LLM,确保用户数据安全。

项目完全开源,使用 Swift 语言开发,结合 SwiftUI 构建用户界面,展示了 Swift 在 AI 应用开发领域的潜力。对 Apple 开发者而言,ChatMLX 提供了一个学习 AI 技术与原生应用融合的范例。

VisionOS 30 天学习计划

@BluesJiang:这个计划目前有两个版本:visionOS 1.0 以及 visionOS 2.0 版本。这里面可以找到大部分 visionOS 特性相关的示例代码,可以快速尝试 visionOS 上的独特的特性。十分推荐都看一遍,可以帮组你快速上手 visionOS 。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #306 | 2024-09-23

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

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

文章

🐢 Xcode Folders & Groups

@CrazyCoderShi: Xcode 15 到 Xcode 16 有不少变化,本文就 Folders & Groups 相关变化做了一些比较,比如 : 添加文件,创建 Group 等;最终作者也给出了一些总结性的建议,如果有不习惯新组织形式的小伙伴依然可以保持 15 时候的形式.

🐢 COW2LLVM: The isKnownUniquelyReferenced Deep-Dive

@Cooper Chen: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

@Barney:文章指出 SwiftUI 的 @Observable 宏并非 ObservableObject 的完美替代。主要区别在于初始化行为: @StateObject 仅初始化一次,而 @State 每次视图重建时都会重新初始化。这可能导致意外行为,建议将全局状态放在 App 结构中以避免问题。

🐢 我是怎么做个人知识管理(PKM)的

@含笑饮砒霜:这篇文章概述了作者个人知识管理(PKM)的历程与心得,从早期使用备忘录、Evernote 等工具,到探索 Bear、Notion、Obsidian 等结构化笔记应用,作者经历了从信息囤积到注重信息消化的转变,最终采用卢曼卡片盒笔记法,通过闪念笔记、文献笔记、永久笔记等形式,建立笔记间的关联,形成知识网络。同时,结合 P.A.R.A 框架优化管理流程,并引入费曼学习法、CODE 方法论等工具促进知识内化。作者强调工具与方法的选择应基于个人需求,且写作是知识管理的重要产出形式。整篇文章为读者提供了关于如何高效管理和利用信息的实用指南。

工具

swift-export

@Smallfly:swift-export 是一款命令行工具,用于在 macOS 上更容易地签名和公证可执行包。这可以帮助开发者简化在 macOS 上分发应用程序时的安全和合规性流程。具体来说,它包括以下功能:

  • 签名:为应用程序添加数字签名,这是 macOS 应用程序分发的一个要求,以确保应用程序的来源和完整性。
  • 公证:将应用程序提交给 Apple 进行公证,这是 macOS Catalina 及更高版本中的一项新要求,用于确保应用程序在启动时不会损害用户的安全。

这个工具对于需要频繁构建和分发 macOS 应用程序的开发者来说非常有用。

代码

HandVector 2.0 版本更新

@BluesJiang:这个之前推荐过的开源库又迎来的大的更新,新增了 HandleShape 的 API,给不同手的不同形态给出了具象化的分类,可以更语义化的了解目前手势的情况,如手掌弯曲了多少、手指捏合了多少、手指弯曲了多少等。有利于开发快速调整以寻找合适的手势匹配参数,而不是像之前录制手势那样必须完全精准的重现手势才能达成目的。对手势交互依赖比较重的应用可以考虑升级和使用。

🐎 Hummingbird 2

@DylanYang:Hummingbird 是一个用 Swift 编写的轻量又灵活的后段框架,它包含了路由、请求和结果处理、编解码等诸多能力。它最近发布了新版本 Hummingbird 2,代码整体基于 Swift 的结构化并发进行了重写,使代码更易读,感兴趣的读者可以关注一下。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

老司机 iOS 周报 #305 | 2024-09-09

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

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

WWDC24 内参

🌟 WWDC24 10151 - SwiftUI 过渡效果篇

@zdd:本文将介绍 SwiftUI 实现过渡效果的两种方式:AnyTransition 和 Transition。并逐步剖析自定义 SwiftUI 过渡效果的步骤和注意事项,最后通过多个示例展示视觉、着色器、颜色、文字、滚动和导航等不同类型过渡效果的应用,旨在启发读者创建令人印象深刻的过渡效果。

文章

🐕 Backport SwiftUI modifiers

@AidenRao:SwiftUI 每年都会更新新的修饰符,但我们往往需要等待用户更新到修饰符支持的最低版本,才能享受这些新功能。本篇作者分享了一些技巧和方法,帮助开发者在较旧的 Swift UI 环境中使用新的 SwiftUI 修饰符,在确保旧版本用户体验不变的情况下,面向未来做开发,毫无问题地使用新版本 API。实现原理主要是检查操作系统版本,并在可用时调用 SwiftUI 函数,在不可用时回退到其他函数。

🐢 抄 Apple Intelligence 作业的思路

@Cooper Chen:近年来,AI 领域迅猛发展,模型规模和性能不断提升,而这是一篇对端上智能或者说 LLM 总结和思考的文章,作者从三个大的方面对当前 Apple Intelligence 的诞生、现状以及展望做了非常详尽的分析,其核心的观点大致可以总结为:

  • 以技术为基石的应用更要对技术诚实,LLM 幻觉和推理能力不足可以采用移交控制 / 验证和主动治理 / 约束策略
  • 并不是所有 AI 都需要以 AGI 为目标,提升现有产品的核心体验 / 收益也可以作为投入目标
  • 借助 LLM 实现跨 domain 交互在技术上可行,但不同 domain 有不同的商业模式考量

对于不仅是 AI 相关行业的开发,甚至对于各平台的开发来说都有非常大的参考价值,值得反复的阅读和思考。

🐎 Dogfooding Emerge Tools: Open-sourcing an Android Hacker News App

@Crazy:关于 Hacker News 的 App 有很多,这次是由 Emerge 团队开发的一款 Hacker News 阅读器。Emerge 团队开发了很多关于应用性能优化与分析的工具,他们在移动应用领域有着深厚的背景。这款新的 Hacker News App 正是使用了他们自己开发的诸多工具来完成的具体实践,这些工具可以让开发者在开发的过程中发现一些错误,并且有自动去除 dead code 等功能。开发者也可借鉴他们的开源代码来使用 Emerge 团队的开发工具,大大简化了开发者从开发到上架的实施难度。

音视频

🐢 Cross-Platform Swift: View Paradigms & Cross-Platform Swift: WebAssembly

@Kyle-Ye:本系列视频探讨了如何通过合理的领域建模,将同一套功能集无缝地应用于不同的视图范式和跨平台环境中(UIKit/SwiftUI/WebAssembly),对 Swift 进行跨平台开发感兴趣的读者可以阅读学习下。

内推

重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考

具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr)

关注我们

我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。

关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参

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

说明

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

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

❌