探索 Swift 开发:超越 Xcode 日常束缚的工作流
一些 Swift 开发者的情绪很明确:虽然 Xcode 对于 Apple 生态系统来说是不可或缺的,但将其作为编写代码的日常工具可能会让人感到沉重。最初的 Hacker News 帖子简洁地捕捉到了这种挫败感,将 Xcode 描述为一个开发者被迫下载并经常在日常中使用到的“怪兽”。这引出了一个常见的问题:如果不频繁与 Xcode 交互,有哪些可行的构建 Swift 应用程序的工作流?
本文深入探讨了开发者用来减少对 Xcode 依赖的策略和工具,综合了社区的见解,同时也承认了完全脱离 Apple 集成开发环境所带来的固有挑战。
不可避免的依赖:为什么 Xcode 挥之不去
尽管有远离 Xcode 的愿望,但对于许多类型的 Swift 开发来说,完全脱离往往是不切实际的,甚至是无法实现的。几个核心组件和流程仍然与 Xcode 或其底层工具链紧密耦合。
正如一位评论者所指出的:
它几乎不可能完全摆脱 Xcode。你总是需要模拟器,可能还需要一些权限 (entitlement) / 资源工具。
这突出了 Xcode 存在感极强的关键领域:用于测试的 iOS/macOS 模拟器,以及用于管理应用权限和资源的工具。此外,构建过程本身也经常在暗中依赖 Xcode 的命令行工具。
我觉得大多数不使用 Xcode 的 Swift 配置仍然在实际操作中秘密地依赖
xcodebuild。
这表明,即使开发者使用替代编辑器或构建脚本,xcodebuild——Xcode 用于构建项目的命令行界面——也经常在幕后被调用。这意味着,虽然与 Xcode GUI 的直接交互可能会减少,但它提供的底层基础设施仍然至关重要。
替代编辑环境与 AI 辅助
在实际的代码编写和编辑方面,开发者已经成功采用了各种工具,从而摆脱了 Xcode 内置编辑器的束缚。
传统文本编辑器
许多开发者利用功能强大的通用文本编辑器,这些编辑器提供广泛的定制化和语言支持。例如,Emacs 被提及为 Swift 开发的一个可行选项,就像它在许多其他编程语言中一样。Swift.org 的文档本身也为设置开发环境提供了资源,表明非 Xcode 编辑器是一条被认可的路径。
现代代码编辑器
除了传统编辑器,更新、更轻量级的代码编辑器也正受到关注。一位开发者提到使用 Zed 来阅读源代码,表明在某些任务中,其速度和界面优于 Xcode。
AI 驱动的开发
或许,更前沿的方法之一涉及将 AI 助手集成到工作流中。一位用户描述了使用 Claude Code / Codex 进行大部分编码工作,有效地将代码生成甚至一些调试任务交给 AI,同时仍使用像 Zed 这样的独立编辑器进行源码审查。
使用 Swift Package Manager (SPM) 进行模块化开发
为了最大限度地减少核心应用逻辑与 Xcode 的交互,一种常见的策略是利用 Swift Package Manager (SPM)。SPM 允许开发者定义和管理依赖项,使其成为代码模块化的理想选择。
建议的工作流如下:
- 将核心逻辑开发为 SPM Package:使用首选的编辑器编写应用程序的大部分代码,将其作为一个独立的 Swift Package。
- 创建一个极简的 "Xcode Shell App":创建一个基础的 Xcode 项目,其中仅包含必要的资源、预览资源和
plist文件。该项目不包含实际的应用代码。 - 集成 SPM Package:然后将第 1 步中开发的核心逻辑作为本地或 GitHub 仓库依赖项包含在这一极简的 Xcode shell app 中。
这种方法允许开发者将大部分时间花在自己选择的编辑器中,专注于 SPM package 内的核心业务逻辑,并且仅在需要其特定工具的最终组装、构建和部署过程中与 Xcode 交互。
专业化工具与跨平台替代方案
除了通用策略之外,一些特定的工具和框架提供了替代的开发范式。
xcede
一位评论者提到了一个名为 xcede 的配置,表明存在专门的工具来简化或替换部分 Xcode 工作流。
跨平台框架 (Tauri)
对于那些不严格要求与 Apple 特定框架进行深度集成的应用程序,跨平台解决方案提供了一条完全不同的路径。Tauri 2 结合 Rust 和 webview,被建议作为实现“原生感”应用的一种方式,而无需触及 Apple 框架或 Xcode。这对于那些旨在实现更广泛平台兼容性,并希望在 UI 层脱离 Swift/Apple 原生生态系统的开发者来说特别相关。
结论
虽然由于 Xcode 与模拟器、权限管理和底层构建系统的深度集成,完全放弃 Xcode 进行 Swift 开发的梦想在很大程度上仍难以实现,但开发者已经找到了有效的方法来减少其日常使用的频率。通过采用替代代码编辑器、利用 AI 助手,并使用 Swift Package Manager 进行项目模块化,开发者可以将主要的开发体验从 Xcode 的 GUI 转向其他工具。对于那些愿意探索 Apple 原生框架之外的领域,跨平台解决方案为构建类原生应用提供了另一条途径。最终,目标不在于消除 Xcode,却在于战略性地将其集成到工作流中,从而优先考虑开发者的舒适度和效率。