一、成果概览
1.1 软件展示
- 软件界面
- 导出的图片
1.2 源码&安装包
dmg 安装包:下载链接
1.3 投入情况
花费时间:约 3 小时
AI Coding 工具:Qoder(Pro 订阅)
AI Coding 消耗:$3.08 (约 ¥20.95)
二、背景
在摩旅的过程中,拍摄了大量的照片,为了以后看照片时更方便回忆,希望在照片上把时间、位置的信息通过水印的方式外显到图片上。
之前在 windows 系统上用过一个批量添加时间水印的工具软件,尝试在 mac 的 App Store 上寻找类似的,但是并未找到,要么是功能太全面/复杂,要么是水印效果不符合我的预期。
于是干脆决定自己借助 AI 编程助手,手戳一个高度定制版。
此前没有 XCode 开发经验。
三、开发过程
3.1 环境准备
-
安装 Xcode,直接在 App Store 中安装即可。
-
安装 create-dmg
create-dmg是一个流行的命令行工具,可以快速创建一个外观专业的 .dmg 文件
如果你已经安装了 Homebrew,可以在终端中运行以下命令来安装,
brew install create-dmg
3.2 新建文件
打开 XCode,新建项目
选择本次要创建的 macOS App
填写必要的项目名称、Team(选个人Apple 账号即可)、组织 id(随便写),其它默认即可。
然后便得到了一个空的模板项目。
后续的编码步骤就交由 AI 来执行。
3.3 代码开发
打开 Qoder IDE,打开刚才创建出来的初始 macOS App 项目,选择 Quest Mode
然后输入我的需求:
开发一个可以给照片批量添加时间水印的 macos 应用程序,时间信息从原始图片的二进制数据中读取
之后智能体开始运行,首先是生成了一个 spec 文件,然后问了一个需求场景问题,接着开始执行编码。
在这之后,其实我还在不断地输入指令添加、调整新的功能,但 qoder IDE 并未提供对话导出能力,一张张截图又太麻烦,这里就略去吧。
3.4 调试
开发完一个功能之后,需要进行调试验收,Qoder IDE 并不支持运行调试 macOS 程序,因此需要回到 XCode 中进行调试环节。
点击打开 Canvas 面板,可以在编辑器右侧看到 UI 的预览,但无法进行与文件系统的交互。
点击左上角的运行按钮,稍等片刻便会弹出应用程序窗口,在这里就可以完整地调试功能了。
3.5 打包发布
我并不是职业的 Apple 开发者,没有花 $99/年的费用去开通开发者账户,因此在打包发布环节会受到许多限制。
第一步,设置 App Icon
需要准备 16pt、32pt、128pt、256pt、512pt 5 个尺寸大小的 1 倍图和 2 倍图,一共 10 张图片资源。
怎么获取 App Icon 呢?
推荐一个专门提供 macOS 风格图标替换资源的网站,macosicons.com/ ,我直接从这里下载了一个相关的 .icns 图标集
但是 XCode 的 AppIcon 设置里并不支持直接导入 .icns文件,于是还得把 icns合集里的图片分别导出为 png 图片,这种重复繁琐的事情交给 qodercli执行。
然后就得到了导出并命名好的 10 个不同尺寸分辨率的 png 图片了
将这些图片一次性选中,直接拖拽到 XCode -> AppIcon 右侧的占位槽位置即可,它会自动根据尺寸分辨率填充。
第二步,导出 .app 文件
由于没有注册 Apple 开发者账户,无法直接打包 dmg 文件,需要先生成 .app 文件,再转换成 .dmg 文件
使用 XCode 导出 .app 文件。
在 XCode 顶部栏点击 Product -> Archive,然后 XCode 会进行编译,稍等片刻会弹出 Archives 界面
点击 Distribute App -> Custom -> Copy App,然后会弹出文件选择器让你定义输出目录,选好输出目录后确认即可,而后在输出目录下即可看到输出的文件夹了。
第三步,生成 dmg 文件
进入到文件夹内,并在此路径下打开终端工具,
使用刚才下载的 create-img 工具基于 .app 文件生成 .dmg 文件。
create-dmg \
--volname "image-watermark" \
--window-pos 200 120 \
--window-size 600 300 \
--icon-size 100 \
--icon "image-watermark.app" 175 120 \
--hide-extension "image-watermark.app" \
--app-drop-link 425 120 \
"image-watermark.dmg" \
"image-watermark.app"
上面是原始命令(方便直接拷贝,
image-watermark需替换成你的实际文件名),下面是逐行的脚本参数解释说明
create-dmg \
--volname "image-watermark" \ # 设置卷标名称。当你双击打开生成的 .dmg 文件时,在 macOS 桌面上显示的磁盘名称(以及 Finder 侧边栏显示的名称)就是 "image-watermark"
--window-pos 200 120 \ # 设置窗口打开位置。当用户双击 .dmg 文件后,弹出的 Finder 窗口在屏幕上的坐标位置。距离屏幕左侧 200 像素,距离屏幕顶部 120 像素。
--window-size 600 300 \ # 设置窗口大小。弹出的 Finder 窗口的尺寸
--icon-size 100 \ # 设置图标大小。窗口内所有图标(包括你的 App 图标和 Applications 文件夹图标)的显示尺寸
--icon "image-watermark.app" 175 120 \ # 设置 App 图标的位置。指定 "image-watermark.app" 这个文件在窗口内的具体坐标
--hide-extension "image-watermark.app" \ # 隐藏文件扩展名。在窗口中显示 "image-watermark.app" 时,会自动隐藏掉 .app 这个后缀
--app-drop-link 425 120 \
"image-watermark.dmg" \ # 指定输出文件名。最终打包生成的 dmg 安装包的名字
"image-watermark.app" # 指定源文件路径。你要打包进 dmg 的原始应用程序文件(或包含该文件的文件夹)的路径
脚本运行完成后,就生成了一个 .︎dmg 文件,就可以在任意一台 mac 上安装了。
3.6 推送分支
第一步,在 github 上新建一个空仓库;
第二步,将远程仓库与本地仓库关联,并将本地代码推送到远程,这里我继续使用了 qoder ,通过自然语言指令来完成,
(1)我并不知情本地已有初始化的 git 仓库,所以我提出的命令实际与实际情况有所冲突,但 qoder 没有停下来询问我而是自行重置了仓库提交;
(2)远程仓库与本地仓库内容有冲突时,qoder 也没有停下来询问,而是自作主张,强制覆盖了远程仓库,这导致远程仓库初始化创建的 MIT license 被丢弃了!
对于我自己的工具项目而言,这无所谓;但对于公司级的业务项目而言,这或许会带来不小的麻烦!
我提出问题后,qoder 承认了自己的过失;但 qoder 并无法为自己承担过失的结果,结果只能由你承担。
四、思考感悟
4.1 零代码参与
本次软件开发的动作拆解:
- 准备开发环境(安装 XCode、Qoder、create-dmg),执行主体:我
- 初始化项目(XCode 新建项目),执行主体:我
- 通过自然语言描述需求,使用 Qoder 开发代码,执行主体:AI
- 使用 XCode 调试项目,执行主体:我
- 使用 XCode + create-dmg 工具打包软件,执行主体:我
对于我而言,这些动作里面最难的是 XCode 的调试和打包,这是因为我从未使用过 XCode 编辑器,对这款 IDE 的功能界面不了解,需要从头摸索。而其它动作,几乎可以说没有难度。
在这个过程中,我没有看/改一行代码,没去关心项目结构,我所做的就是在代码生成好后,去调试功能使用是否符合我的预期。
4.2 AI 驱动下的软件开发新模式
《大教堂与集市》一书提到,过去有 2 种软件开发方式,一种是大教堂式的,软件经过精心策划、由专业的团队封闭开发管理,全过程有严格的流程管控,代码通常是闭源的。另一种是集市,即开发是开放的,任何人都可以加入,决策过程是透明的,由社区驱动,代码开源。
而如今随着 AI 编程能力的爆发,软件开发的门槛已经大大降低,开始出现了第 3 种“神秘屋”式的开发方式,即自己提出需求,想要什么就让 AI 开发什么,即不需要需求审查、甚至不需要理解代码、也没有代码测试,充分满足个性。本文所记录的正是这样一种软件开发方式,现在及以后,会越来越普及这种方式。
4.3 程序员定义和价值的重构
在没有 AI 或 AI 编程能力还不成熟的时候,软件开发、编程是一件门槛较高的技能,有着一定陡峭的学习曲线、需要付出时间作为学习成本才能上手开发;而如今,AI 编程将软件开发、编程的门槛不断降低,编程正在演变为一种像使用办公软件一样普及的基础能力。AI 编程助手的成熟,让“表达逻辑”取代了“记忆语法”,成为编程的核心。
过去,开发者需要花大量时间查文档、调语法错误、编写重复的样板代码。而现在 AI 接管了这些繁琐的底层工作,只需要用自然语言向 AI 描述清楚需求,就能快速生成可用的代码框架。这意味着,PM、UI、完全不懂代码的创业者,都可以借助 AI 的力量,独立完成应用原型的开发。
程序员的定义和价值在发生深刻的重构,未来的软件开发不再是“代码翻译”——将需求转化为代码,而是如何能够更好地驾驭 AI、如何能够提出更精准的问题、如何能站在更高的维度去审视系统的架构、安全性和用户体验。
编程的门槛降低了,但创造优秀软件的上限更高了,人类开发者将从繁重的编码劳动中解放出来,转型为“系统架构师”,未来的核心竞争力,将属于既懂业务痛点、又懂如何利用 AI 工具将创意高效落地的“超级个体”。