当前位置: 首页 > news >正文

从零到一:利用 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 多平台发布

相关文章:

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

在网上看到一篇关于使用AI开发的编程经历,分享给大家 作者是如何在没有 iOS 开发经验的情况下,借助 AI(如 Claude 3 模型)成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月,ChatGPT 诞生并迅速引发全球关注。…...

基于Java Springboot幼儿园管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...

Python小白学习教程从入门到入坑------习题课2(基础巩固)

目录 一、选择题 二、实战题 2.1 实战1:输入一个年份,判断是否是闰年 2.2 实战2:模拟10086查询功能 2.3 实战3:使用嵌套循环输出九九乘法表 2.4 实战4:猜数游戏 一、选择题 1、以下选项符合Python语法要求且能够…...

基于IPMI_SSH的服务器硬件监控指标解读

随着企业IT架构的日益复杂化,对服务器的实时监控和管理变得至关重要。监控易作为一款功能强大的监控软件,支持通过IPMI_SSH的方式对服务器硬件进行远程监控,确保服务器的稳定运行。本文将针对监控易中基于IPMI_SSH的服务器硬件监控指标进行解…...

数据结构-二叉树及其遍历

🚀欢迎来到我的【数据结构】专栏🚀 🙋我是小蜗,一名在职牛马。🐒我的博客主页​​​​​​ ➡️ ➡️ 小蜗向前冲的主页🙏🙏欢迎大家的关注,你们的关注是我创作的最大动力🙏🙏🌍前言 本篇文章咱们聊聊数据结构中的树,准确的说因该是只说一说二叉树以及相…...

(33)iptables设置防火墙策略常用命令(docker环境、非docker环境)

#普通环境(非docker) # 拒绝所有对端口 31001 的访问 iptables -A INPUT -p tcp --dport 31001 -j DROP # 允许 IP 地址 20.59.30.77 访问端口 31001 (此处用的是虚拟机 所以要使用nat地址的网关) iptables -I INPUT 1 -p tcp -s 20.59.30.77 --dpor…...

fastadmin中动态下拉组件(SelectPage)的使用

实现的功能如下&#xff1a; 1、支持模糊搜索&#xff1b;2、分页功能&#xff1b;3支持多选 官方文档&#xff1a;https://doc.fastadmin.net/doc/178.html html页面引用组件 <div class"form-group"><label class"control-label col-xs-12 col-sm-2…...

通过Python 调整Excel行高、列宽

在Excel中&#xff0c;默认的行高和列宽可能不足以完全显示某些单元格中的内容&#xff0c;特别是当内容较长时。通过调整行高和列宽&#xff0c;可以确保所有数据都能完整显示&#xff0c;避免内容被截断。合理的行高和列宽可以使表格看起来更加整洁和专业&#xff0c;尤其是在…...

力扣-Mysql-3278. 寻找数据科学家职位的候选人 II(中等)

一、题目来源 3278. 寻找数据科学家职位的候选人 II - 力扣&#xff08;LeetCode&#xff09; 二、数据表结构 表&#xff1a;Candidates ----------------------- | Column Name | Type | ----------------------- | candidate_id | int | | skill | varch…...

Android笔记(三十六):封装一个Matrix从顶部/底部对齐的ImageView

背景 ImageView的scaleType默认显示图片是这样&#xff0c;但是有时候设计稿需求希望图片左右能紧贴着ImageView左右边缘&#xff0c;又不破坏图片的比例&#xff0c;用自带的matrix&#xff0c;centerCrop等都可以满足 但是都会造成图片的某些区域被裁剪了&#xff0c;如果设…...

web 入门

学习 Web 开发的基础&#xff0c;建议从以下几个方面入门&#xff0c;按步骤循序渐进学习核心知识&#xff1a; 1. 了解 Web 的基础概念 在开始编码之前&#xff0c;先理解 Web 开发的基本工作原理&#xff1a; Web 前端与后端&#xff1a; 前端&#xff1a;负责用户界面和用…...

京东 2025届秋招 自然语言处理

文章目录 个人情况一面/HR面 10min二面/技术面 1h三面/技术面 1h四面/线下HR面 20min 个人情况 先说一下个人情况&#xff1a; 学校情况&#xff1a;211本中9硕&#xff0c;本硕学校都一般&#xff0c;本硕都是计算机科班&#xff0c;但研究方向并不是NLP&#xff0c;而是图表…...

Mybatis框架之模板方法模式 (Template Method Pattern)

MyBatis 中也使用到了 模板方法模式 (Template Method Pattern)&#xff0c;主要体现在 执行 SQL 语句的流程控制 上。模板方法模式允许 MyBatis 定义数据库操作的标准流程&#xff0c;并允许子类或特定实现类去实现某些步骤。这种模式使得 MyBatis 能够在处理不同类型的 SQL 操…...

【进阶系列】python简单爬虫实例

python有一个很强大的功能就是爬取网页的信息&#xff0c;这里是CNBlogs 网站&#xff0c;我们将以此网站为实例&#xff0c;爬取指定个页面的大标题内容。代码如下&#xff1a; 首先是导入库&#xff1a; # 导入所需的库 import requests # 用于发送HTTP请求 from bs4 impor…...

️虚拟机配置NAT和Bridge模式

虚拟机的网络配置 桥接 通过使用物理机网卡 具有单独ip NAT 把物理机为路由器进行上网 NAT模式&#xff1a; 所谓nat模式&#xff0c;就是虚拟系统会通过宿主机的网络来访问外网&#xff0c;而这里的宿主机相当于有两个网卡&#xff0c;一个是真实网卡&#xff0c;一个是虚拟…...

解决Spring Boot整合Redis时的连接问题

前言 在使用Spring Boot整合Redis的过程中&#xff0c;经常会遇到连接问题&#xff0c;尤其是当Redis服务部署在远程服务器上时。 问题描述 当你尝试连接到Redis服务器时&#xff0c;可能会遇到以下错误&#xff1a; org.springframework.data.redis.connection.PoolExcept…...

109. UE5 GAS RPG 实现检查点的存档功能

在这一篇文章里&#xff0c;我们接着实现存档的功能&#xff0c;保存当前玩家的生成位置&#xff0c;游戏里有很多中方式去实现玩家的位置存储&#xff0c;这里我们采用检查点的方式&#xff0c;当玩家接触到当前检查点后&#xff0c;我们可以通过检查点进行保存玩家的状态&…...

springboot005基于springboot学生心理咨询评估系统得设计与实现。

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…...

ESC算法/逃生:一种基于人群疏散行为的优化方法

文章介绍了一种有用的算法&#xff0c;称为逃生或逃生算法&#xff08;ESC&#xff09;&#xff0c;受人群疏散行为的启发&#xff0c;用于解决现实世界的案例和基准问题。ESC算法模拟了疏散过程中人群的行为&#xff0c;其中人群在探索阶段被分为平静、羊群和恐慌组&#xff0…...

构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…...

【人工智能】深入理解图神经网络(GNN):用Python实现社交网络节点分类与分子结构分析

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 图神经网络(Graph Neural Network, GNN)是近年来在深度学习领域迅速发展的新兴方向,主要用于处理图结构数据。GNN在社交网络分析、化学分…...

Qt 日志文件的滚动写入

Qt 日志文件的滚动写入 flyfish 日志文件的滚动写入功能。在日志文件达到10MB时创建新的日志文件&#xff0c;并且在总日志文件大小达到10GB时开始覆盖最早的日志文件 以监控一个文件夹的写日志为例 日志文件创建与管理 初始化日志文件&#xff1a;在FileMonitor类的构造函…...

【c语言】数据包捕获和分析工具

请解释一下数据包捕获和分析工具&#xff08;如Wireshark&#xff09;的工作原理和用途。 数据包捕获和分析工具&#xff0c;如Wireshark&#xff08;前身为Ethereal&#xff09;&#xff0c;是一种网络协议分析软件&#xff0c;它允许用户实时监控、抓取并分析计算机网络中的网…...

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——14.哈希(2)(模拟实现)

1.概念介绍 1.1开散列 开散列&#xff08;Open Hashing&#xff09;&#xff0c;也叫链地址法&#xff0c;是一种解决哈希冲突的方法。每个哈希表槽位保存一个链表&#xff0c;所有散列到同一位置的元素都存储在该链表中。当插入元素发生冲突时&#xff0c;将新元素添加到相应…...

请描述一下JVM(Java虚拟机)的生命周期及其对应用程序性能的影响

1、请描述一下JVM&#xff08;Java虚拟机&#xff09;的生命周期及其对应用程序性能的影响。 JVM&#xff08;Java虚拟机&#xff09;的生命周期主要涉及以下几个阶段&#xff1a;加载、验证、准备、解析、执行、卸载。每个阶段都有其特定的作用和影响。 加载&#xff1a;JVM…...

展会邀约|加速科技与您相约IC China 2024!

第二十一届中国国际半导体博览会&#xff08; IC China 2024&#xff09;将于 2024 年11月18日—11月20日在北京国家会议中心举行。加速科技将携高性能测试机ST2500EX、ST2500E、eATE及全系测试解决方案亮相E2馆B150展位。博览会期间&#xff0c;将同期举办"半导体产业前沿…...

鸿蒙中服务卡片数据的获取和渲染

1. 2.在卡片中使用LocalStorageProp接受传递的数据 LocalStorageProp("configNewsHead") configNewsHeadLocal: ConfigNewsHeadInfoItem[] [] 注意&#xff1a;LocalStorageProp括号中的为第一步图片2中的键 3.第一次在服务卡片的第一个卡片中可能会获取不到数据…...

运维篇-修复centos7无法下载docker问题

修复centos7无法下载docker问题 1、安装docker时报错2、docker无法下载镜像 1、安装docker时报错 linux的centos系统&#xff0c;安装docker时会报错 –> Finished Dependency Resolution Error: Package: glibc-2.17-307.el7.1.i686 (base) Requires: glibc-common 2.17…...

【论文阅读】WaDec: Decompiling WebAssembly Using Large Language Model

论文阅读笔记:WaDec: Decompiling WebAssembly Using Large Language Model 1. 来源出处 论文标题: WaDec: Decompiling WebAssembly Using Large Language Model作者: Xinyu She, Yanjie Zhao, Haoyu Wang会议: 39th IEEE/ACM International Conference on Automated Softwar…...

redis类型介绍

1. 字符串&#xff08;String&#xff09;&#xff1a; • 简介&#xff1a;最基础的数据类型&#xff0c;可以存储任何形式的字符串&#xff0c;包括文本数据和数字数据。 • 常用操作&#xff1a;SET、GET、INCR、DECR等。 2. 列表&#xff08;List&#xff09;&#xff1a; …...

做爰全过程教育网站/西安网络优化大的公司

你可以用CSS来完成。 看到这个简单的例子http://jsfiddle.net/rHSmV/(代码粘贴在下面)。进行更深入的示例/* Use a checkbox to workaround showing and hiding */input[typecheckbox] {position: absolute;top: -9999px;left: -9999px;}label {cursor: pointer;}/* Shown */di…...

大网站cn域名/北京优化网站方法

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; Apache HTTP 服务器于4月1日发布了最新的稳定版本 2.4.39&#xff0c;主要是修复安全问题。点此进行下载。 在发布更新不久后&#xff0c;安全研究人员 Charles Fol 便在其博客发布了关于 Apach…...

什么是网络营销?网络营销有哪些特点?/北京网站营销seo方案

2015年07月08日 1、对于 IOS6 导航栏背景图片为 44 则2x 得设计为 88 2、对于 IOS7 导航栏背景图片为 64 则2x 得设计为 128 出现以上差异原因是由于IOS6里面&#xff0c;状态栏20是不包括在导航栏里面的&#xff0c;而 IOS7是包含在导航栏里面的。 3、 修改状态栏的文字颜色&…...

网站开发 ssh 菜鸟/信息发布

返回->课程主页 2-4 求和&#xff1a;编程序&#xff0c;求sum12…100 【参考解答】...

wordpresscom下载/口碑营销的概念是什么

http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html HMM&#xff08;隐马尔可夫模型&#xff09;是用来描述隐含未知参数的统计模型&#xff0c;举一个经典的例子&#xff1a;一个东京的朋友每天根据天气{下雨&#xff0c;天晴}决定当天的…...

dynamo wordpress主题/南京广告宣传公司seo

传统解析html标签的方式是利用HttpWebRequest获取html字符串&#xff0c;然后通过正则表达式进行解析&#xff0c;但是这种方式比较麻烦。有没有更简单的方式呢&#xff1f;有&#xff0c;那就是Html Agility Pack&#xff0c;它可以做到像用XmlDocument类来解析xml一样轻松、方…...