一个设计师的 PS 平替移植记
某某某 ·
Adobe 的软件用不了了,原因大家都知道。我日常出图改图切图都在它上面,得赶紧找个能替的。
试了几个。Photopea 网页打开就用,文件一大就卡。GIMP 免费的,但界面逻辑我怎么用怎么别扭。Affinity Photo 听说不错,看了眼价格放弃了。
周一早上挤地铁刷微博,关注的一个设计博主发了 Compositor。开源免费,macOS 原生的界面。我顺着摸到作者的 GitHub,他在 README 里写「Photoshop 太贵,GIMP 又用不顺手」——跟我一模一样。他是做影像合成和后期的,软件就是按他自己干活的流程做的。
晚上回家把汉化版下下来,拖进应用程序,双击,弹窗说需要 macOS 26.5 或更高版本。我这台才 15.8。

按说到这就该算了。但那个界面截图我翻出来看了好几次,工具栏和面板的排布一看就是天天用 PS 的人摆出来的。我没舍得删。
我跑去问 AI,这软件开源的,能不能下个源码自己编一个 15.8 能跑的。它说能,给我三条路:直接装官方包,系统直接拒;装 Xcode 编,要 Apple ID 还要下 11 GB;用系统自带的命令行工具编。第三条我原来听都没听过,是我问它「没 Xcode 是不是就没戏了」它才提的。那就这条。

编之前先搞明白官方包为什么不让装。它写着要 26.5,里面还用了一批只有新系统才有的东西,我这台没有,就算装上了跑起来也会崩。改版本号骗系统也没用,运行的时候还会再查一遍。
那就编吧。
源码拉下来,一编,报错。80 个文件。
查了半天,原因是工程里有个配置只有新版编译器认识,作者靠它约定「代码默认跑在主线程上」。我这台的编译器版本低,不认这个配置,于是所有代码都被当成「不在主线程」,凡是碰界面的全报错。

我把报错整段贴给 AI。它让我给类和数据加标记。改完一轮,报错少了一半,剩下那一半反而更多。来回磨了几个小时,才发现有一种叫「扩展」的代码它也漏了——这种代码得跟着它所属的类型一起加标记。这回我没再问它,自己照着把同类的文件都改了。
编过了还不算完,得把它装进一个能双击的 App 里,而装壳要用的工具又只有 Xcode 有。后来发现官方安装包里那个 App 本来就是完整的,图标、中文语言包、界面图都在。我把官方包留着,把自己编出来的程序塞进去,改掉里面那行最低版本声明,再本地签个名。
能开了。
能开之后我给它加了个东西。这个版本没有自动更新,上游发了新版我不可能每周自己去查,所以加了个常驻按钮。整个项目里只有这个按钮是我正经设计的。

五种状态。踩过的坑:「有新版本」这个状态得记在本地,不然每次开软件都要先等一次网络请求,红点就没意义了。红点要画在图标边界里面,我第一次画出去被工具栏裁掉一半,看着像坏了。点按钮直接用系统弹窗,不自己画。
还有个坑是上游留下的。它的更新检查会过滤掉「要求系统版本比本机高」的版本,我是 15.8,所有新版本都被过滤掉了,按钮永远显示已是最新。可我是从源码编的,上游要求什么系统跟我能不能跑没关系。把这道过滤删了,只比版本号。

跑起来之后查了一遍依赖:从系统里找到 2147 个,缺 0 个。官方原版在我这台上缺 15 个,必崩。
跟原版不完全一样的地方也记一下:工具栏标签条多了一条背景色,原版在 26 上是透明的,那个接口 15 没有;字体和混合模式的选择器圆角是系统默认样,没有新版那种胶囊形;编译没开优化,13 MB,启动慢一拍;只是本地签名,我这台能用,要给别人得重新签名公证。
弄完这些,我跟 AI 说把代码和安装包存到我自己的 git 里,以后每次更新也存。它跟我要仓库地址和一个 GitHub token,我现去设置里生成了一个,勾 repo 权限,贴给它。十几分钟后它说好了:main 分支是上游原版,macos15-port 分支是我的改动,7 个提交,Release 里挂着 5.3 MB 的安装包。
它还在仓库里放了个 sync-to-git.sh。以后改了代码,跑一句就自动提交推送;装了新的安装包,跑一句就打好包发 Release。中途有个我不知道的事:本地仓库是浅克隆,第一次推送失败了,它自己补全了历史再推,做完才跟我说。
用了差不多两个月,每周一两张主视觉是它出的。
仓库在 GitHub,Mac 升不动系统的可以去看。