从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历,分享给大家

作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。

正文开始

2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。过去两年间,生成式 AI 发展飞速,不论在模型层还是应用层,都有了显著的进展。

大部分人应该都体验过 ChatGPT,或者其他类似的生成式 AI 产品。你可能不仅仅是在闲聊,甚至在工作中也使用 AI 辅助工具来提高效率。毫无疑问,AI 将带来巨大的变革,未来与 AI 合作很可能成为每个人的必备技能。

这两年,我一直在关注 AI 技术的发展。每当新模型发布时,我都有过惊喜和失望的情绪波动。这种情绪周期的变化,时常让我感到一阵阵兴奋,又或是觉得期望与现实之间有差距。

alt

AI 发展观察者的情绪周期(由 Claude 绘制)

直到几个月前,Claude 3 Sonnet 模型发布(现在已经是 3.5 Sonnet),我意识到它的巨大潜力。于是,我决定挑战自己,尝试看看 AI 是否能够帮助我完成一直以来的梦想——开发一款 iOS app。

alt

Claude 模型能力对比

iOS开发:我决定入坑

这些年,尽管我一直关注 iOS 应用,但从未接触过 iOS 开发。我对 iOS 开发的了解几乎为零。知道有 Swift、Objective-C,也听说过 Xcode,但实际操作过的机会几乎没有。

iOS 开发
iOS 开发

Xcode 和 Swift

几年前,由于工作和学业的原因,我学过一些 Python,虽然我现在并不算专业的 Python 工程师,但我能写一些简单的脚本,解决工作中的小问题,也对数据库和网络请求等基本概念有所了解。所以,虽然完全没有 iOS 开发经验,我还是决定尝试做一款简单的地震信息 app(暂称《震感》)。

你可能能猜到,选择这个主题的原因非常随意。作为 2008 年大地震的亲历者,我对地震信息有着特殊的关注。现有的地震信息 app,要么界面丑,要么体积过大,我一直不太满意。

编码前:明确目标,规划框架

明确了做地震信息 app 后,我还需要解决一堆基础问题:

  1. 我该使用什么编程语言来开发?
  2. 需要下载什么工具?如何开始?
  3. App 的界面该怎么设计?需要哪些页面?
  4. 我可以投入多少时间?
  5. 如何将 app 发布到 App Store?

通过查阅资料和询问 AI,我得出了以下结论:

  1. 我决定使用 Apple 推荐的 SwiftUI 来开发原生 iOS app,不用第三方框架,尽量减少依赖,方便 AI 能利用官方文档。
  2. 我需要下载 Xcode,这是开发 iOS 应用的必备工具。
  3. 我参考了 Apple 的 人机界面指南,尽量使用原生控件,省去复杂的界面设计。
  4. 我能接受累计投入 1 个月周末时间来完成这个项目。
  5. 我需要每年支付 688 元注册 Apple Developer 账号,用于提交 app 到 App Store。

梳理思路,从零开始

注册了 Apple Developer 账号,下载了 Xcode,我面临的第一个问题是:“如何开始?”

我对 iOS 项目结构、代码组织等一无所知。于是,我让 Claude 帮我生成一个简单的 SwiftUI 项目(比如 Hello World),并一步步指导我运行。虽然我对 SwiftUI 代码完全看不懂,但它成功运行了。

接下来,我让 Claude 讲解了 iOS app 的基本结构,了解了应用的图标、页面组织和基础配置等内容。经过多次沟通,我初步掌握了 iOS app 的框架。

App 基础结构
App 基础结构

一款最简单的 iOS App 结构

细节:和AI一起逐步实现

与 AI 合作开发 iOS app 并不简单。如果你直接对 AI 说:“帮我做一个地震信息 app”,它肯定只会给你一大堆代码,并说“搞定”。但如果你把问题一步步细化,AI 才能帮你逐步解决。

例如,《震感》的主界面需要一个地图和地震事件列表。

alt

震感 App 主界面

我给 Claude 提示:“请在主页面显示地图,使用原生组件和 SwiftUI 语法。”拿到代码后,我将其粘贴到 Xcode 中,运行查看效果。如果地图显示不完整,我就继续与 AI 沟通:“我希望地图占据整个屏幕,请修改代码。”

如果遇到 Xcode 报错,我会将错误信息反馈给 AI,要求它帮我分析并修复问题。

总之,开发一个 app,需要将问题拆解成一个个小任务,与 AI 的多轮对话才能实现预期功能。

后端的挑战

随着开发的深入,我意识到《震感》并非纯粹的本地应用,它需要从网络获取实时地震数据,这就需要后端服务。

这时,我开始向 AI 请教如何搭建后端服务。最终,我选择了 Cloudflare 提供的无服务器产品,这样可以避免搭建复杂的云服务器,也能以较低的成本实现后端功能。

alt

震感 App 后端架构示意图

借助 AI 加速开发

和 AI 一起开发时,常常会遇到代码报错或功能无法实现的情况。此时,我会通过搜索引擎查找相关资料,并把新获取的信息输入给 AI 更新其知识库。

此外,我还会与 AI 转换角色,自己扮演测试工程师,通过反馈日志来加速解决问题。

项目迭代:AI成为产品经理

完成了最初的功能后,我便将整个项目交给 AI 来协助迭代。在 Claude 的 Project 功能下,我上传了整个代码库,并让 AI 深入了解项目结构,这让后续迭代更加高效。

alt

震感 app 的 Claude Project 配置截图

在不断优化迭代中,我通过 Git 管理代码,并将其上传到 Claude Project,让 AI 更加精准地帮助我做项目迭代。

震感 app 经过约 50 小时的努力,完成了第一个版本,并顺利上架 App Store。随后的迭代也在不断推进中。

alt

macOS 版本震感 app

总结:和AI编程的感受

AI 在这个过程中的帮助无处不在。它不仅是我的编程助手,也逐渐成为了我的设计师、产品经理,甚至是我的测试工程师。

与 AI 合作开发应用,不仅让我更高效地完成任务,还让我在开发过程中深刻感受到 AI 的潜力。未来,AI 很可能成为每个人编程的好伙伴,帮助我们实现从创意到落地的整个过程。

我也期待 AI 在未来带来更多创新,帮助更多人完成他们的编程梦想。

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.netcore + postgis 保存地图围栏数据

一、数据库字段 字段类型选择(Type) 设置对象类型为:geometry 二、前端传递的Json格式转换 前端传递围栏的各个坐标点数据如下: {"AreaRange": [{"lat": 30.123456,"lng": 120.123456},{"lat": 30.123456…

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签: 6 年多头部大厂软件开发经验;1 年多 AI 业务应用经验,拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI,已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具,它可以将Kubernetes元数据(对象)保存为本地压缩包,在恢复时可将这些元数据恢复到目标集群中(已存在的资源不会被覆盖)。它不依赖远程存储&#xff0c…

IDC 报告:百度智能云 VectorDB 优势数量 TOP 1

近日,IDC 发布了《RAG 与向量数据库市场前景预测》报告,深入剖析了检索增强生成(RAG)技术和向量数据库市场的发展趋势。报告不仅绘制了 RAG 技术的发展蓝图,还评估了市场上的主要厂商。在这一评估中,百度智…

计算机毕业设计Python+CNN卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Nginx SSL+tomcat,使用request.getScheme() 取到https协议

架构上使用了 Nginx tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https和http协议。 发现 request.getScheme() //总是 http,而不是实际的http或https request.isSecure() //总是false(因为总是http) request.getRemoteAddr(…

机器学习 ---线性回归

目录 摘要: 一、简单线性回归与多元线性回归 1、简单线性回归 2、多元线性回归 3、残差 二、线性回归的正规方程解 1、线性回归训练流程 2、线性回归的正规方程解 (1)适用场景 (2)正规方程解的公式 三、衡量…

蓝桥杯c++算法学习【3】之思维与贪心(重复字符串、翻硬币、乘积最大、皮亚诺曲线距离【难】:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 思维与贪心 一、重复字符串 【问题描述】 如果一个字符串S恰好可以由某个字符串重复K次得到,我们就称S是K次重复字 符串…

Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】

兼容性注意: Vite 需要 Node.js 版本 18 或 20。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目&#xf…

计算机网络中的域名系统(DNS)及其优化技术

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机网络中的域名系统(DNS)及其优化技术 计算机网络中的域名系统(DNS)及其优化…

STM32单片机CAN总线汽车线路通断检测

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着汽车电子技术的不断发展,车辆通信接口在汽车电子控…

(实战)WebApi第13讲:怎么把不同表里的东西,包括同一个表里面不同的列设置成不同的实体,所有的给整合到一起?【前端+后端】、前端中点击标签后在界面中显示

一、实现全局跨域:新建一个Controller,其它的controller都继承它 1、新建BaseController 2、在后端配置,此处省略【详情见第12讲四、3、】 3、其它的控制器继承BaseController,这个时候就能够完成全局的跨域 【向后台传cookie和…

前缀和技巧解析

前缀和技巧解析 前缀和(Prefix Sum)是一种常用的算法技巧,用于高效地处理一系列连续子数组和的问题。通过构建一个额外的数组来存储从数组起始位置到当前位置的累计和,可以在常数时间内快速计算任意区间的和。 前缀和应用的典型…

Mysql每日一题(行程与用户,困难※)

今天给大家分享一个截止到目前位置,我遇到最难的一道mysql题目,非常建议大家亲手做一遍 完整代码如下,这道题的主要难点是它有两个外键,以前没遇到过,我也没当回事,分享一下错误经验哈 当时我写的where判断…

已解决:spark代码中sqlContext.createDataframe空指针异常

这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后,用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…

cooladmin 后端 查询记录

查询记录:pageQueryOp中列表查询的group by node ts controller代码如下 import { CoolController, BaseController } from cool-midway/core; import { Inject, Post, Get, Param } from midwayjs/decorator; import { ComparePricesPlanInfoEntity } from ../../…

cesium 3DTiles之pnts格式详解

Point Cloud 1 概述 点云(Point Cloud)瓦片格式用于高效流式传输大规模点云数据,常用于 3D 可视化中。每个点由位置(Position)和可选的属性定义,这些属性用来描述点的外观(如颜色、法线等&…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

系列文章 ESLint 使用教程(一):从零配置 ESLint ESLint 使用教程(二):一步步教你编写 Eslint 自定义规则 ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解 ES…

Qt_day5_常用类

常用类 目录 1. QString 字符串类(掌握) 2. 容器类(掌握) 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型(熟悉) 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…