【免费下载链接】cherri
Siri Shortcuts Programming Language 🍒
🍒Cherri是一款专为 Siri Shortcuts(快捷指令)打造的编程语言,可将.cherri源码直接编译为可运行的 Shortcut。它内置了一套基于Git 仓库的包管理器:一条--install命令即可从远程 Git 仓库拉取代码包,编译时还会自动安装和更新所有依赖,让你像使用go get、npm install一样轻松管理 Shortcuts 项目。本教程带你快速上手Cherri 包管理器的安装、共享与自动更新全流程。
一、Cherri 包管理器是什么?
在 Cherri 中,"包"就是一个包含 Cherri 源码的远程 Git 仓库。与传统包管理不同,它的核心特点是:
| 特性 | 说明 |
|---|---|
| 📦 Git 仓库即包 | 每个包对应一个cherri-{package_name}仓库,无需中心化仓库索引 |
| 🔄 编译时自动更新 | 每次编译.cherri文件时,自动检查并安装/更新依赖 |
| 🧩 自动 #include | 包中的代码会被自动注入到你的项目里,无需手动引用 |
| 🔐 信任机制 | 首次安装前会询问你是否信任该仓库,防止恶意代码自动注入 |
| 🏠 支持私有仓库 | 可通过--add-uri指定任意 Git 托管地址 |
包管理逻辑的完整实现位于 packages.go,命令参数注册在 args.go。
二、准备工作:安装 Cherri 编译器
Cherri 是一个 Go 编写的静态编译二进制,推荐通过包管理器安装:
Homebrew 方式(macOS):
brew tap electrikmilk/cherri brew install electrikmilk/cherri/cherriNix 方式:
nix profile install github:electrikmilk/cherri安装完成后,直接运行cherri(不带参数)即可看到樱桃 Logo 和完整的命令帮助。也可以将 ReadMe.md 作为快速参考。
三、创建你的第一个 Cherri 包:--init初始化步骤
包名遵循两种格式,cherri --init会做正则校验(见 newPackage):
- 私有包签名:
@{author}/{package_name} - 远程 Git 仓库:
https://{domain}/{username}/cherri-{package_name}
# 在当前目录初始化一个包 cherri --init @alice/myutils执行后会在当前目录生成info.plist—— 它是包的清单文件(manifest),记录包名、作者、托管地址以及依赖列表(结构定义见 cherriPackage)。之后把代码提交到以cherri-myutils命名的 Git 仓库,别人就能安装你的包了。
💡一个合格的包仓库必须满足:根目录存在入口文件
main.cherri和info.plist,否则安装会失败(校验逻辑见 install)。
四、安装一个包:一条--install命令
在你的项目目录(已有info.plist)中执行:
# 安装公开仓库包(默认托管在 github.com) cherri --install @bob/datekit # 也可以直接写完整仓库地址 cherri --install https://gitee.com/bob/cherri-datekit安装时发生的事情:
- Cherri 会先询问"Do you trust this package?",输入
y后该包签名会写入信任列表~/.cherri/trusted.plist(见 checkTrustedPackages); - 通过
git clone --depth 5浅克隆仓库到本地./packages/@bob/datekit/目录; - 校验
main.cherri与info.plist存在; - 把依赖写入项目的
info.plist,并递归安装该包自身声明的依赖(见 loadDependencies)。
输出示例:
Installing @bob/datekit from https://github.com/bob/cherri-datekit.git... [+] @bob/datekit installed: ./packages/@bob/datekit五、自动更新的魔法:编译时零操作拉取依赖
这是 Cherri 包管理器最贴心的设计——你甚至不需要手动执行安装。
编译入口 preParse 的流程是:
- 检测到当前目录存在
info.plist时,自动调用installPackages()检查每个依赖是否已克隆; - 对已存在的包跳过,对缺失的包自动重新克隆;
- 调用 includePackages 在源码顶部按签名排序自动插入
#include './packages/@user/name/main.cherri'语句,实现代码注入; - 再走正常的 include 解析(includes.go)完成编译。
也就是说,只要info.plist里登记了依赖,每次运行cherri main.cherri都会自动同步代码。依赖方升级后,你本地会自动拿到新实现——这就是"基于 Git 仓库的自动更新"。
六、常用包管理命令清单
| 命令 | 作用 |
|---|---|
cherri --init @{author}/{name} | 初始化包,生成info.plist |
cherri --install @user/pkg | 安装远程 Git 包 |
cherri --remove @user/pkg | 删除包文件并从清单移除 |
cherri --package | 查看当前包信息(含依赖列表) |
cherri --packages | 列出所有已安装包 |
cherri --tidy | 重新安装(强制刷新)全部依赖 |
cherri --add-uri gitee.com | 设置当前包的托管地址 |
🔁提示:当仓库端发生破坏性更新或本地文件损坏时,执行
cherri --tidy即可删除旧文件并全量重新克隆(实现见 tidyPackage)。
七、管理私有仓库:--add-uri一步配置
默认情况下,包会托管在github.com(URL 规则见 url)。如果你的仓库在 Gitee、自建 GitLab 或任何兼容 Git 的服务上:
# 发布方:将当前包关联到私有托管地址 cherri --add-uri gitee.com # 使用方:安装时可直接写完整 URL,无需额外配置 cherri --install https://gitee.com/alice/cherri-internal-tools--add-uri会把地址写入info.plist的Uri字段;清单中Uri为空时显示为Hosted: Private(见 printPackage)。
八、目录结构速览:包都装在哪里?
一个使用包管理器的 Cherri 项目,编译后的目录大致长这样:
my-project/ ├── info.plist # 包清单:作者、Uri、依赖列表 ├── main.cherri # 入口文件 └── packages/ ├── @alice/myutils/ # 克隆下来的包(含 main.cherri、info.plist) └── @bob/datekit/- 包的安装路径固定为
./packages/@用户/包名(见 path); - Cherri 的全局数据(如信任列表)存放在
~/.cherri/目录。
九、常见问题 FAQ
Q1:安装提示unable to install怎么办?仓库必须提供main.cherri和info.plist两个文件,且 Git 地址必须正确。可先用git clone手动验证仓库可达。
Q2:提示info.plist does not exist?说明当前目录还没初始化,先运行cherri --init @你的名字/包名(错误来源见 initPackageError)。
Q3:如何调试编译与包的注入过程?加上--debug(或-d)参数,会打印预处理文件、调试信息与.plist输出,包括 include 展开映射(printIncludesDebug)。
Q4:包被标记为 Archived 会怎样?编译器会打印黄色警告[!] Archived package,但仍会继续安装,提醒你关注包的维护状态。
十、写在最后
Cherri 包管理器用"Git 仓库 = 包"的极简设计,让 Shortcuts 项目第一次拥有了工程化的代码共享与依赖管理能力:--init建包、--install装包、--tidy刷新,编译时自动同步更新。配合 #include 多文件组织、函数定义与类型检查,构建大型 Shortcuts 项目再也不怕维护困难了。
📌相关源码:packages.go(包管理核心)、args.go(命令参数)、parser.go(编译时自动安装)。现在就开始发布你的第一个 Cherri 包吧!
【免费下载链接】cherri
Siri Shortcuts Programming Language 🍒
相关推荐
在 Mac 和 Linux 上打开 Visio 文件:drawio-desktop 导入 VSDX 实操
在 Mac 和 Linux 上打开 Visio 文件:drawio desktop 导入 VSDX 实操 上周一个 Windows 同事往群里发了个 .vsdx
桌面应用图形学从0构建StrykerOSS:Android Gradle + ndk-build编译指南与Release签名配置清单
从0构建StrykerOSS:Android Gradle + ndk build编译指南与Release签名配置清单 StrykerOSS(Stryker)是
网络安全从异常噪音到精准控制:全面解析Marlin固件中STM32F407VE风扇PWM优化方案
从异常噪音到精准控制:全面解析Marlin固件中STM32F407VE风扇PWM优化方案 你是否曾在3D打印过程中听到风扇发出刺耳的噪音?或者发现风扇转速时快时
智能硬件嵌入式固件物联网
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考