Swift 程序接入版本管理

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

给没有版本管理的 Swift 或 macOS 程序接入版本号、DMG 打包、Sparkle EdDSA 签名、appcast 与 GitHub Release 发版链路。当用户要给 Swift 应用加版本管理、自动更新、发版脚本,或排查应用内更新失败时使用。不用于普通功能开发。

一句话选型结论

按资料字段整理

Swift 程序接入版本管理是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_029d56a9/swift-release-setup
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_029d56a9仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量5.5 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Swift 程序接入版本管理当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

5.5 KB
模型实际读到的说明书原文,来自技能仓库

为 Swift 程序接入版本管理

本 skill 描述一条已在 macOS 项目上跑通的完整链路:Info.plist 版本号 → SwiftPM 打包 .app → DMG → Sparkle EdDSA 签名 → appcast → GitHub Release → 自动更新。assets/ 里是可直接复制的模板。

先确认目标形态

  • 已经是 .app bundle 且有 Resources/Info.plist → 直接按步骤改造。
  • 只有 SwiftPM 可执行文件、没有任何 bundle → 先用 assets/Info.plist.fragment.xml + assets/build-app.sh 造 bundle,再把代码里依赖 Bundle.main 的路径校验一遍。
  • 目标是 iOS / 非 Apple 平台 → 说明不适用,本链路只覆盖 macOS。

版本管理的最小定义:CFBundleShortVersionString(人看的,如 0.1.0)+ CFBundleVersion(机器比较的整数 build 号)。Sparkle 用后者判断新旧,必须单调递增。

步骤

  1. 写 Info.plist:复制 assets/Info.plist.fragment.xml 进 Resources/Info.plist 的 <dict>,替换 {{...}}。关键是 CFBundleIdentifier、CFBundleExecutable(必须等于 bundle 内可执行文件名)、SUFeedURL、SUPublicEDKey。

  2. 加 Sparkle 依赖:在 Package.swift 加
    swift .package(url: "https://github.com/sparkle-project/Sparkle", from: "2.6.4")
    target 的 dependencies 加 "Sparkle"。

  3. 接 Updater:复制 assets/Updater.swift,并在 App 的场景里加入菜单项:
    swift CommandGroup(after: .appInfo) { Button("检查更新…") { Updater.shared.checkForUpdates() } .disabled(!Updater.shared.canCheck) }

  4. 生成 EdDSA 密钥对(只需一次):
    bash swift build --disable-sandbox # 先下载 Sparkle .build/artifacts/sparkle/Sparkle/bin/generate_keys
    输出的公钥填进 SUPublicEDKey;私钥由 Sparkle 存进登录钥匙串,不要提交、不要丢失。换机器时要导出/导入(generate_keys -x / -f),否则无法再签发更新。

  5. 放脚本:把 assets/build-app.sh、assets/make-dmg.sh、assets/release.sh、assets/appcast.xml 放到 scripts/ 与仓库根目录,按 {{APP_NAME}} / {{owner}}/{{repo}} 替换,然后 chmod +x scripts/*.sh。appcast.xml 首次可以先用占位 item,第一次发版时由 release.sh 生成。

  6. 首次发版:
    bash ./scripts/release.sh --dry-run # 先看它打算做什么 ./scripts/release.sh # 0.1.0 → 0.1.1,打包+签名+写 appcast
    release.sh 只能递增版本号。要重发一个已存在的版本号(例如重建 0.1.0),不要用它,改为只把 CFBundleVersion +1 后手动跑 build-app.sh / make-dmg.sh / sign_update,再改 appcast 对应 item。

  7. 发布顺序固定:先创建 GitHub Release 并上传 DMG,再把 appcast 推到 main。反了会让用户拿到 404 的更新地址。
    bash gh release create v0.1.1 build/<App>-0.1.1.dmg --title "<App> 0.1.1" --notes "发版说明" git add Resources/Info.plist appcast.xml && git commit -m "release: v0.1.1" && git push

验证

# 线上 appcast(raw CDN 有约 5 分钟缓存)
curl -s https://raw.githubusercontent.com/<owner>/<repo>/main/appcast.xml | head -20

# 资产大小与字节:下载后用 sha256 对比本地签名包,必须完全一致
curl -sIL https://github.com/<owner>/<repo>/releases/download/v<版本>/<App>-<版本>.dmg | grep -iE "HTTP/|content-length"

应用内实测(当前代码的 build 号一般等于待发版本,直接开它只会说“已是最新”):

cp -R build/<App>.app /tmp/<App>-test.app
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion 1" /tmp/<App>-test.app/Contents/Info.plist
codesign --force --deep --sign - /tmp/<App>-test.app
open /tmp/<App>-test.app

菜单里点“检查更新…”应提示新版本;安装后 CFBundleVersion 变为目标值。排查日志:

log stream --level debug --predicate 'subsystem == "org.sparkle-project.Sparkle"'

必须知道的坑

  • 沙箱:make-dmg.sh(hdiutil 访问 /dev/rdisk*)和 sign_update(读钥匙串私钥)在受限沙箱里都会失败,必须在外层执行。swift build 需要 --disable-sandbox。
  • PlistBuddy 重排:PlistBuddy -c "Set ..." 会重写整个 Info.plist 的键顺序,产生巨大 diff。手动改版本号时直接编辑 <string> 值。
  • build 号必须递增:只改 CFBundleShortVersionString 不提 build,已安装的设备永远收不到更新。
  • ad-hoc 签名可用:Sparkle 2 的判定是 EdDSA 或 Apple 代码签名任一通过即可,没有 Developer ID 也能发更新;但没 Apple 签名的话用户首次打开仍需去隔离标记(xattr -dr com.apple.quarantine <dmg>)。
  • 不要重新打包 DMG:appcast 里的 edSignature 和 length 绑定的是那一份字节,重打后必须重新签名并重传。
  • 网络:raw.githubusercontent.com 与 GitHub 资产下载在国内常直连超时,curl/gh 用 HTTPS_PROXY;而 Sparkle 只认系统代理,测试前用 scutil --proxy 确认已开启。
  • gh auth login 的网络/权限:设备码授权发生在浏览器,但 CLI 交换令牌需要能访问 github.com;受限环境下加代理跑。

常见问题

5 问
答案由本站依据条目字段整理
Swift 程序接入版本管理怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_029d56a9/swift-release-setup。安装方式为未标注。装完刷新技能列表或重开客户端。

Swift 程序接入版本管理支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Swift 程序接入版本管理权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Swift 程序接入版本管理收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Swift 程序接入版本管理用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。