《零基础的 PhotoShop CEP 6 开发教程》系列目录
「 0 」目录
「 1 」配置开发环境
「 2 」CEP 文件结构
「 3 」CEP 的运行机制
「 4 」Hello World !
「 5 」事件(EVENTS)
「 6 」调用 JSX 并传递信息
「 7 」UI - HTML 开发的一些细节
「 8 」API - 文件读写与二进制数据
「 9 」签名打包与 ZXPSignCmd
「 X 」CEP 更新到 6.1版了
这次来说说,CEP 扩展打包发布相关的事。
CEP 扩展必须有签名才能运行
CEP 扩展必须有签名才能运行,而所谓签名是验证扩展文件是否与签名时一致的手段,能保证你的扩展不被篡改和识别扩展作者。所以你会发现修改了别人的扩展插件后,扩展就无法运行了。
不过在扩展开发者模式下, PhotoShop 会无视签名,关于打开发者模式,在 「 1 」配置开发环境 一文中介绍了。
这里提供 2 个 .reg 文件,在 Windows 下双击就能方便的开关开发者模式:
CEP 调试模式关闭.reg , CEP 调试模式打开.reg
签名方法
签名分为和自签名证书(self-signed certificates)或者商业签名证书(commercial certificates),
商业签名可以(也仅可以)在下列数字签名提供商中购买:
商业证书在使用 Adobe Extension Manager 安装时不会有如下警告:
不过在 CC 2015 之后 Adobe Extension Manager 已经被移除了(Adobe 现在想让用户都从它的 Adobe Add-Ons 市场上购买、下载插件)
不用付钱我们也可以使用自签名证书,自签名证书可以使用 ZXPSignCmd 创建。
ZXPSignCmd
ZXPSignCmd 是 Adobe 官方发布的签名与打包的命令行工具,有 Windows 和 OSX 2 个平台的版本。这里先介绍使用 ZXPSignCmd 创建证书和打包的方法,如果觉得命令行工具麻烦,可以使用我制作的 GUI 版本,后面会介绍。
创建证书
ZXPSignCmd -selfSignedCert <countryCode> <stateOrProvince> <organization> <commonName> <password> <outputPath.p12>
ZXPSignCmd -selfSignedCert <国家代码> <地区> <组织名> <证书所有者名称> <证书密码> <证书名.p12>
例子:
ZXPSignCmd -selfSignedCert CN Changsha nullice.com nullice 123456 我的证书.p12>
签名并打包
ZXPSignCmd -sign <inputDirectory> <outputZxp> <p12> <p12Password> -tsa <timestampURL>
ZXPSignCmd -sign <要打包的项目目录> <输出文件路径> <证书路径> <证书密码> -tsa <时间戳服务地址>
其中 -tsa <时间戳服务地址>
不需要可以省略。
ZXPSignCmd -sign "PS.fonTags\fonTags" "PS.fonTags\我的扩展.zxp" "我的证书.p12" "123456"
要注意的是这里输出文件路径如果已经存在了一个文件的话(比如曾经打包的),ZXPSignCmd 是不会自己覆盖它的,需要自己手动删除。
打包后输出的文件是 ZIP 格式的,可以用 ZIP 解压缩工具解压。
ZXP WinGUI
在 Windows 下除了直接使用 ZXPSignCmd ,还可以使用有图形界面的 ZXP WinGUI,注意这不是 Adobe 官方的,只是我自己制作的。是否使用请谨慎判断。
开发用的工具能从官方渠道获取的就尽量用官方的,这不仅仅是为了自己的安全也是为了你开发软件的用户安全负责,CEP 的能调用的本地接口很多,如果被置入恶意代码的话很危险,出现像 XcodeGhost 一样的事件就不好了。
使用方法
-
1 创建证书
-
2 打包
ZXP WinGUI 实际只是直接调用 ZXPSignCmd ,不过除了图形界面以为还有这些方便使用的功能:
- 自动清除过期的生成文件(覆盖)
- 拖放文件夹输入项目目录
- 生成打包 ZXP 的批处理
其中生成打包 ZXP 的批处理,可以在填写配置后生成一个 .bat 批处理文件,以后执行这个批处理就可以打包了
另外如果你喜欢用 gulp 的话,可以看看这篇: Automate ZXP Packaging with Gulp.js
注意
打包后插件目录中文件就不可以修改或者删减了,否则都会使签名验证失败。
这意味着你的扩展不能在插件目录中存储用户数据或者下载内容。
要存储这些扩展运行中产生的数据,请存储到类似 cs.getSystemPath(SystemPath.USER_DATA)
的系统目录中去(详见「 8 」API - 文件读写与二进制数据一文的文件路径部分),总之就是不要让你的扩展在扩展目录中产生数据,或者修改自己的文件。
安装扩展
Adobe Extension Manager 已经不会在 CC 2015 以后的版本上了,
Announcement: Extension Manager End of Life Notification
Adobe 想让人们都去它的 Adobe Add-Ons 市场下载扩展,不过实际上 Adobe Add-Ons 并不好用吗,尤其是国内网络环境下,Adobe Creative Cloud 客户端安装扩展不仅速度慢而且很容易失败
所以目前的扩展主流是自己发布文件让
- 用户自己复制文件到扩展安装目录
- 用户执行 .JSX、.Bat 脚本,帮助用户一键复制文件到扩展安装目录
- 自己制作一个安装器软件
- Adobe Extension Manager 的开源替代品 :ZXPInstaller
其中 ZXPInstaller 是一个功能和 Adobe Extension Manager 差不多的软件,不过 40 多 MB 的体积真不想跟用户说下个几 MB 的扩展前先装个这家伙...