使用 Trae 进行 iOS 开发

Trae(The Real AI Engineer)是一款基于 Visual Studio Code 的全新集成开发环境(IDE), 近期已正式发布. 该 IDE 内置 AI 功能, 且截至本文撰写时可免费使用. 本文将展示如何配置 Trae 进行 iOS 开发. 目前支持 Claude-3.5-Sonnet 和 GPT-4o 模型.

先决条件

Xcode

你的机器上应已安装 Xcode, 建议使用最新可用版本.

Xcode 构建服务器

该项目使 Apple 的 sourcekit-lsp 能够支持 Xcode 项目格式, 而无需在 Xcode 环境中运行------在本例中, 通过 Trae 实现. 更多详情请参阅这里. 使用 brew 安装:

vbscript 复制代码
brew install xcode-build-server

XcodeGen

该项目允许使用基于 YAML 的文件生成 Xcode 项目. 你可以在这里 找到更多项目详情. 使用 brew 安装:

复制代码
brew install xcodegen

xcbeautify

该项目为 xcodebuild 提供更好的格式化和彩色输出. 此安装为可选项, 你可在这里查看更多详情. 使用 brew 安装:

复制代码
brew install xcbeautify

设置

Trae 可从www.trae.ai下载

在安装过程中, Trae 会提示你将 trae 安装为终端命令. 这样做可让你通过终端打开 Trae 并安装扩展. 若安装时未选择此选项, 可通过命令面板(Cmd+Shift+P)输入 shell command 将 Trae 添加为终端路径.

Swift

此扩展用于为 IDE 提供 Swift 语言支持. 你可通过在终端中运行以下命令进行安装:

css 复制代码
trae --install-extension sswg.swift-lang

或在 Trae 的扩展商店中搜索 Swift(sswg.swift-lang)并安装.

通过扩展商店搜索 swift

Sweetpad

该扩展允许你在 Trae 中构建并运行 Xcode 项目. 你可通过在终端中运行以下命令进行安装:

css 复制代码
trae --install-extension sweetpad.sweetpad

或在 Trae 的扩展商店中搜索 Sweetpad(sweetpad.sweetpad)并安装它.

入门

为了向你展示如何使用 Trae, 我们将创建一个示例应用程序. 我将包含我为提供的命令收到的结果------因为我发现运行相同的命令两次并不总是产生相同的输出.

在系统中创建一个新文件夹, 然后在 Trae 中选择 Open Folder. 默认情况下, 你会在右侧看到聊天窗口(如果未显示, 可使用 CMD+U 快捷键切换显示/隐藏). 在这里输入命令即可与所选模型(当前默认为 Claude-3.5-Sonnet)进行交互. 输入命令 Make a SwiftUI app called HelloWorldApp, 系统将逐步提供关于如何设置项目的说明.

聊天窗口的响应

Builder

与其手动操作, Trae 提供了 Builder 功能, 允许 AI 直接进行修改. 重复执行前面的命令后, 提示框将确认你希望添加的文件(你可以在文件创建前对其进行修改).

在 Builder 中输入提示

这是 Builder 创建的 2 个文件

Builder 确实创建了内容, 但这不是我们想要的------我们需要明确说明想要实现的目标. 建议包含一个文件, 规定生成的代码需遵循的规则. 这在团队协作或跨项目共享时也非常有用. 以下是本应用程序中将使用的示例:

markdown 复制代码
# Swift Rules

## Code Organization
- One type declaration per file
- Extensions must be placed in a separate file
- Protocols must be placed in a separate file

## Swift
- Prefer structs over classes
- Implement async/await for async operations

## Project
- Target iOS 18
- Use Swift 6
- Use swift-tools-version 6

将此文件保存到项目根目录------我将其命名为rules.md, 并会删除构建命令生成的文件.

在自己的项目中, 我通常使用 Factory 包来管理依赖项------因此我在此示例中包含它, 以展示如何指定要构建的内容. 我们希望生成一个包含任何服务的本地 SPM 包的 SwiftUI 应用程序, 并使用 XcodeGen 创建 Xcode 项目. 这是我们将使用的提示------注意我明确告诉它使用 rules.md 文件:

css 复制代码
Make a Swift package called HelloWorldServices. This should contain a service call for getting messages.
Use XcodeGen to generate a SwiftUI app called HelloWorldApp. This app must reference the local Swift package, HelloWorldServices to get and display the message.
I want to use this dependency: https://github.com/hmlongco/Factory
Follow the coding guidelines in rules.md

我使用 XcodeGen 是因为 AI 响应在 Xcode 项目格式上经常出错, 但我发现基于 YAML 的项目格式更容易理解.

Builder 已正确创建项目

运行项目

要运行项目, 我们需要配置Sweetpad并创建XcodeGen项目. 打开命令面板Cmd+Shift+P, 输入xcodegen, 这将显示一个名为SweetPad: 使用XcodeGen生成Xcode项目的选项------选择该选项将立即执行, 你将看到一个HelloWorldApp.xcodeproj文件夹出现. 每次对 project.yml 文件进行修改, 或在 HelloWorldApp 目录下添加新文件时, 你都应重新运行此命令以重新生成项目文件.

要能够运行此项目, 最后一步是在SweetPad中创建一个构建服务器配置------你只需要做一次. 在命令面板中输入buildserver, 然后选择选项SweetPad: 生成构建服务器配置(buildServer.json), 在出现的提示中, 选择HelloWorldApp作为要运行的方案.

选择构建服务器方案

创建 buildServer.json 文件后, 你可以导航到左侧的 SweetPad, 选择不运行即可构建(或运行应用程序).

SweetPad 中的构建命令

尝试运行时会出现关于 info.plist 未生成的错误. 终端输出描述了该问题. 只需选择错误并将其添加到聊天中. AI 代理将自动修复该问题. 若希望代理自动修正错误, 请确保选中 Builder 选项卡而非 Chat 选项卡.

当出现错误时, 将其添加到聊天中以获取 AI 助手的帮助

AI 代理正确地在 project.yaml 中添加了缺失的段落, 以自动生成 info.plist 文件------请勿忘记重新运行 XcodeGen 生成.

Builder 添加了所需的键, 并贴心地提议运行 xcodegen

再次尝试运行应用时, 我遇到了另一个错误(AI 代理未添加应用的入口点. 将此错误发送到聊天后, 问题得到解决, 重新生成项目后, 应用终于成功构建.

创建 HelloWorldApp.swift 后, 应用现在可以运行

但应用程序无法启动, 原因是缺少 CFBundleVersion. 再次将错误发送至聊天后, 问题得到纠正, 应用程序现在可以加载.

这突显了问题所在, 也是我包含这些问题的原因------事情会出错, 但通常代理能够纠正问题. 希望在后续版本中, Builder 能够自动纠正这些问题.

嵌入式聊天

嵌入式聊天可用于与代码交互. 在创建的 DefaultMessageService 中, 有以下函数:

swift 复制代码
public func getMessage() async throws -> String {
    // Simulating network delay
    try await Task.sleep(nanoseconds: 1_000_000_000)
    return "Hello, World!"
}

选中此代码并按下 Cmd+I, 会弹出提示框, 可描述所需操作. 本例中, 我们希望改进此代码:

这段代码可以优化

生成的输出为:

swift 复制代码
public func getMessage() async throws -> String {
    // Simulating network delay
    try await Task.sleep(for: .seconds(1))
        
    // Add error handling for potential network failures
    do {
        // In a real app, this would likely make an API call
        return "Hello, World!"
    } catch {
        throw MessageServiceError.networkError(error)
    }
}

该功能的另一用途是解释代码的实际功能. 如前所述, 我喜欢使用 Factory. 但对于从未使用过该功能的人来说, 可能无法理解这段代码的运作原理------因此可询问 What does this code do:

swift 复制代码
public extension Container {
    var messageService: Factory<MessageService> {
        self { DefaultMessageService() }
    }
}

生成以下输出:

代理会详细解释代码的具体功能

你还可以指示代理添加额外功能和文档:

这将导致以下更改:

swift 复制代码
/// A service protocol for handling message-related operations
public protocol MessageService {
    /// Retrieves a single message
    /// - Returns: A string containing the message
    /// - Throws: MessageError if the operation fails
    func getMessage() async throws -> String
    
    /// Retrieves multiple messages
    /// - Parameter count: The number of messages to retrieve
    /// - Returns: An array of strings containing the messages
    /// - Throws: MessageError if the operation fails
    func getMessages(count: Int) async throws -> [String]
}

接下来该做什么

我建议你尝试使用Trae的Builder, 看看它能做什么以及它在哪些地方出错. 理解它出错的原因将帮助你改进提示, 从而获得更好的结果. 你应该基于一个规则文件进行构建, 添加你希望在代码中实现的新要求或改进. 你甚至可以指定生成代码时希望使用的特定架构.

好吧, 今天的内容就分享到这里啦!

一家之言, 欢迎拍砖!

Happy Coding! Stay GOLDEN!

相关推荐
前端卧龙人38 分钟前
不写一行代码,Trae 轻松实现五子棋游戏
trae
夏尾2 小时前
Trae 2.0 的 SOLO 模式,真的这么震撼吗?
trae
用户4099322502122 小时前
FastAPI后台任务:是时候让你的代码飞起来了吗?
后端·github·trae
小徐_23335 小时前
当年偷偷玩小霸王,现在偷偷用 Trae Solo 复刻坦克大战
trae
创码小奇客5 小时前
深度对比:RocketMQ 凭什么成为阿里系首选消息队列?
后端·消息队列·trae
Goboy6 小时前
轻松实现贪吃蛇游戏:Trae 开发者的新体验
trae
Goboy6 小时前
Trae轻松实现经典数字猜测
trae
水饺6 小时前
Tree Solo 模式体验
trae
前端卧龙人7 小时前
trae初体验,小白也可以快速上手开发游戏
trae
布瑞泽的童话7 小时前
有了SOLO后,一天一个独立产品不是梦
ai编程·trae