你不知道的客户端开发:AI 时代下的选型、原生与借力
内容提要
作者分享在Mac上开发Windows软件的经验,比较Web、跨端与原生三条路线,指出研发效率、体验与性能构成“不可能三角”。其Windows版Mole选用C#与WinUI 3,在Parallels虚拟机中编译调试,并通过代码分层便于在Mac上测试,同时借助AI同步设计与文案。作者还谈及Windows签名流程繁琐,以及用跨语言调用解决难题,强调技术应服务业务需求。
延伸解读
技术选型的“不可能三角”
作者将Web、跨端、原生三条路线对应到研发效率、体验、性能的权衡上:Web靠近效率,原生靠近体验和性能,跨端取中间。AI补足了编码效率后,选型更应看场景——轻内容应用用Web省心,需深度调用系统能力或追求低内存、顺滑交互则推荐原生。跨端适合业务效果远大于技术体验、且迭代速度优先的情况。
Mac开发Windows的工程化实践
作者用Parallels虚拟机跑Windows 11,将仓库作为共享文件夹挂载,Mac上改代码、虚拟机内编译,并通过脚本执行编译、启动、看日志。代码分四层:Core只依赖.NET、Platform封装系统接口、ViewModel与Mac版一一对应,仅WinUI界面需在Windows编译。这样大部分代码和测试可在Mac完成,真机ThinkPad用于验证高分屏、电池、SmartScreen等虚拟机不准的场景。
Windows签名的现实门槛
Windows正规分发必须签名,否则会触发SmartScreen拦截甚至被安全软件报毒。作者调研发现微软Azure Artifact Signing个人仅限美加开发者,行业还要求私钥存于硬件或云端HSM,证书有效期最长460天。最终选用Certum云端OV证书,签名需手机动态码,会话闲置会断开,难以云端自动打包;新证书还需通过提交安装包逐步积累SmartScreen信誉。
跨语言调用与规则抽象
作者以妙言、Pake、Kaku为例,说明把不同语言当作工具、通过中间层通信可解决单一语言生态的短板,例如Swift调JavaScriptCore做Markdown格式化、Rust与JS互调实现下载和Toast。在AI时代,代码复用让位于规则复用:Mole两版共享设计token、多语言文案和SYNC.md对账表,底层各写各的,反而更易保持功能对齐。
Q&A
在AI时代,客户端开发选择Web、跨端还是原生技术栈,主要依据什么?
作者提出研发效率、体验、性能构成“不可能三角”:Web靠近效率,原生靠近体验和性能,跨端取中间。AI补足了效率短板后,选型更看场景:轻内容浏览用Web最省心;需深度调用系统底层或追求低内存、顺手交互的推荐原生;工作量巨大且业务效果远大于技术体验时可选跨端。
为什么Windows版Mole选择C#和WinUI 3,而不是复用Mac的Swift代码?
作者希望Windows版也采用最直接的原生技术,C#加WinUI 3跑在.NET 10上,WinUI 3是微软主推的Windows App SDK界面框架,支持Win32程序、Fluent风格、高分屏缩放和ARM64。而Mac的十几万行Swift代码中能脱离AppKit、SwiftUI使用的不到20%,且处理的是macOS路径规则,基本用不上,所以Windows版几乎从零开始写。
如何用Mac开发Windows软件,开发环境是怎么搭建的?
作者在Mac上安装Parallels Desktop运行Windows 11虚拟机,将代码仓库作为共享文件夹挂载为X盘,Mac上改代码后虚拟机直接编译。编译、启动、看日志写成脚本,通过prlctl exec在虚拟机执行;脚本解决不了的用Codex的computer use操作,系统弹框由人工点。代码和AI上下文全留在Mac,Windows只负责编译和验证。
Mole Windows的代码分层架构是怎样的,为什么这样设计?
共四层:最底层Core只依赖.NET,不碰Windows接口,放清理规则、路径安全检查等,用模拟内存文件系统在Mac上测试;Platform层放注册表、文件系统、Win32调用,开启EnableWindowsTargeting后Mac也能编译;ViewModel层与Mac版一一对应,可在Mac上测;最上层WinUI界面必须在Windows编译。这样大部分代码能在Mac上验证,作者一个月写了8万多行代码、4000多个测试。
Windows软件签名为什么比Mac麻烦,作者是怎么解决的?
未签名的Windows程序会触发“Windows已保护你的电脑”、智能应用控制拦截或安全软件报毒,正规分发必须签名。微软Azure Artifact Signing个人只开放给美国和加拿大开发者;2023年起私钥须放硬件或云端HSM,证书最长460天。作者购买Certum云端OV证书(3年300多美元),签名时用SimplySign登录加手机动态码,并每次发版提交微软恶意软件分析门户积累SmartScreen信誉。
在客户端开发中,如何利用多种编程语言混合解决难题?
作者主张把各种语言当工具,基于场景选择最合适的语言。例如妙言用Swift调用JavaScriptCore执行JS实现Markdown格式化;Pake用Rust调JS渲染Toast,Web再反向调Rust下载;妙言分栏编辑用C库cmark-gfm解析、JS读标记、消息通道通知Swift同步滚动;Kaku用zsh转义序列把自然语言发给Lua,再交Rust请求模型生成命令回填。
AI在作者开发Windows版Mole的过程中具体帮了哪些忙?
AI帮助分析Swift代码可复用性、生成XAML资源与多语言文案转换脚本、同步设计token和runner动画;架构大部分由Opus 5.5完成;Claude能操作Parallels虚拟机读日志调试;Codex的computer use可点界面操作。作者强调AI时代工程师最大价值在架构设计和测试验证,并需用提交记录和SYNC.md对账表防止AI跑偏。