掘金 人工智能 前天 10:17
使用 Trae 进行 iOS 开发
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Trae是一款集成AI功能的Visual Studio Code新IDE,现已正式发布并免费提供。本文详细介绍了如何配置Trae进行iOS开发,支持Claude-3.5-Sonnet和GPT-4o模型。文章涵盖了Xcode、XcodeGen、xcbeautify等先决条件安装,以及Swift和Sweetpad等Trae扩展的配置。通过实际案例演示了如何利用Trae的聊天窗口和Builder功能创建SwiftUI应用,包括生成代码、管理依赖项和项目文件,并解决了开发过程中遇到的常见错误。此外,还展示了Trae的嵌入式聊天功能,用于代码交互、优化和解释,为开发者提供了强大的AI辅助开发能力。

🌟 **Trae IDE的核心优势** Trae是一款基于VS Code的全新IDE,集成强大的AI功能,目前免费使用,并支持Claude-3.5-Sonnet和GPT-4o等先进模型,显著提升了iOS和Swift开发效率,尤其在代码生成、项目配置和错误修复方面表现出色。

🚀 **iOS开发环境配置指南** 文章详细列出了进行iOS开发所需的先决条件,包括安装Xcode、Xcode构建服务器(sourcekit-lsp)和XcodeGen,以及可选的xcbeautify。并指导用户如何下载、安装Trae,并将其注册为终端命令,为后续的扩展安装和项目操作奠定基础。

🛠️ **Trae扩展与项目构建流程** 介绍了Swift语言支持(sswg.swift-lang)和Sweetpad(sweetpad.sweetpad)两个关键Trae扩展的安装方法。通过创建一个名为“HelloWorldApp”的SwiftUI应用示例,演示了如何使用Trae的聊天功能生成项目,利用Builder功能管理代码和项目文件,并通过XcodeGen和Sweetpad构建和运行项目。

💡 **AI驱动的代码优化与解释** 强调了Trae的嵌入式聊天功能,用户可以选中代码片段,通过AI进行优化、解释或添加文档。例如,AI能够根据规则文件改进代码逻辑,添加错误处理,甚至为代码添加详细的注释和协议定义,极大地提高了代码的可读性和维护性。

⚠️ **AI辅助的错误处理与迭代** 文章真实地展示了在开发过程中可能遇到的错误,如info.plist未生成、缺少应用的入口点或CFBundleVersion。Trae的AI代理能够通过将错误信息发送到聊天窗口来协助解决,并自动修复代码或项目配置,体现了AI在开发流程中的强大辅助作用,并鼓励用户通过实践来优化AI提示以获得更佳结果。

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 安装:

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 语言支持. 你可通过在终端中运行以下命令进行安装:

trae --install-extension sswg.swift-lang

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

通过扩展商店搜索 swift

Sweetpad

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

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

# 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 文件:

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/FactoryFollow 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 中, 有以下函数:

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

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

这段代码可以优化

生成的输出为:

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:

public extension Container {    var messageService: Factory<MessageService> {        self { DefaultMessageService() }    }}

生成以下输出:

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

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

这将导致以下更改:

/// A service protocol for handling message-related operationspublic 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!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Trae AI开发 Swift iOS开发 IDE
相关文章