使用 Xtool 在 Linux 和 Windows (WSL) 上构建 iOS 应用
Xtool:跨平台 Xcode 替代方案。在 Linux 等平台上构建 iOS 应用!
Community Showcase packagemanager,linux
大家好!几个月前,我分享了我的 Swift SDK for Darwin,它允许你在 Linux 上构建 iOS Swift Packages 等等。我提到还需要做很多工作,例如处理代码签名、打包和捆绑。
我非常兴奋地分享,我们终于实现了使用跨平台的开源软件完成所有这些事情。这就是 xtool!
GitHub - xtool-org/xtool: 跨平台 Xcode 替代方案。使用 SwiftPM 构建和部署...
跨平台 Xcode 替代方案。使用 SwiftPM 在 Linux、Windows、macOS 上构建和部署 iOS 应用。
关于
xtool 可以做很多事情 (因为 Xcode 也可以做很多事情 ),但主要功能是:
将 SwiftPM 包构建为 iOS 应用
签名并安装 iOS 应用
以编程方式与 Apple Developer Services 交互
这意味着终于可以从 Linux 和 Windows (WSL) 构建和部署 iOS 应用了。同时,xtool 基于 SwiftPM 且完全声明式,这意味着你也可以使用它来替换 macOS 上的 Xcode 来构建 iOS 软件!
从 VSCode 调用 xtool 的屏幕截图1920×1526 141 KB
使用 xtool
我整理了一些 DocC 文章 + DocC 教程,介绍如何开始使用 xtool。你可以在 Swift Package Index 上找到这些。
注意事项:
到目前为止,目标一直是充实 iOS 应用程序的典型构建-运行-编辑循环中的核心功能。有些事情在 macOS 之外是不可行的,另一些事情是可能的但仍需要实现:
- Interface builder: 需要大量的精力来复制,可能不值得,因为 SwiftUI 在很大程度上取代了它。
- Asset catalogs: 需要进行逆向工程才能实现,可能值得。在没有 asset catalogs 的情况下,你仍然可以将图像添加为原始文件,只是效率较低。
- Proprietary macros: Linux 工具链中也有的那些(例如
@Observable
)可以正常工作,但是 Apple 专有的 macros(例如 SwiftData 的那些)如果我们要它们工作,则需要进行反向工程并从源代码重建。或者 Apple 可以将这些作为 WebAssembly Macros 发布,这将使它们与宿主机无关 - App Extensions: 现在你只能构建“Application”类型的目标。我认为 App Extensions 应该很容易实现,作为
xtool.yml
规范的补充,但只需要工程工作。 - LLDB debugging: 在 iOS 17 之前,这曾经非常容易,并且 xtool 具备支持带有这些旧版本的 lldb 的所有组件,但是 Apple 最近对在 iOS 上调用 LLDB 的
debugserver
的方式进行了一些更改。有一些现代工具支持新方法(特别是 pymobiledevice3),并且已经可以使用这些工具连接到 lldb,但我肯定希望将其集成到 xtool 中。这将需要大量工作,因为新的 RemoteXPC 协议与旧机制完全不同,但是将来也可能需要其他功能。 - App Store deployment: 你可以使用 xtool 在自己的设备上构建和运行,但是它不允许你将构建部署到 App Store Connect。幸运的是,1) iTMSTransporter 是跨平台的,并且 2) 我们拥有所有其他基础架构来与 ASC API 交互,因此这也应该可以实现,但仍有待完成。
xtool 是围绕 iOS 应用部署 8 年工作的结晶(提交历史记录中有一些亮点!),但我只是这个项目的唯一开发人员,复制 Xcode 是一项艰巨的任务。既然我已经准备好更广泛地分享该项目,我将非常乐意接受外部贡献来充实该功能集。如果你最终使用 xtool,请告诉我!