Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新功能:使用sparkle框架增加检查更新功能 #17

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Keldos-Li
Copy link
Collaborator

@Keldos-Li Keldos-Li commented Feb 17, 2023

由于需要最终执行分发的开发者签名,同时需要补充其他内容,本次提交不能直接合并入主分支。

What's changed?

  • 引入 Sparkle 框架,加入相应更新文件;
  • 填写 SU 相应配置;
  • 通过更新测试;

请参阅 使用 Sparkle 框架的文档
我已经基本完成了的配置,不过由于开发者签名原因,某些更改必须在川虎的计算机上完成。下面是具体的做法:

How to complete the feature develpopment?

  1. 在本地拉取 dev/updater 分支。(除了在终端中执行,好像也可以用 Xcode 的 source control……)
git checkout dev/updater
git pull origin dev/updater

打开项目,等待 Xcode 加载 Sparkle 库依赖。(我自己这里经常加载很慢……可能需要提前配置一下 github 的网络环境,Sparkle 比较大。

  1. 使用EdDSA签名

下载 Sparkle-2.3.2.tar.xz,然后(从该文件夹根目录中)运行 ./bin/generate_keys 工具。
然后将生成的公钥作为 SUPublicEDKey 属性添加到应用程序的 Info 中。(请修改 Xcode 项目配置中的 Info,而不是直接编辑 Info.plist,后者是自动生成的。)

image

  1. 撰写并发布 appcast

理论上应该在更稳定的外部服务器上存放 appcast.xml,例如川虎或许存放在自己的 gzblog.tech 下。不过为方便起见,也可以直接使用 github 的地址,例如 https://raw.githubusercontent.com/GaiZhenbiao/ChuanhuWallpaper/main/ChuanhuWallpaper/Updater/appcast.xml
(注:这是最终main分支的地址,当前不在main分支,如需测试请调整该地址)

SUFeedURL 属性添加到 Info 中。

image

每次发布更新时,都需要更新appcast.xml文件,记得同时更新托管服务器中的文件:

如果您更新常规应用程序包并设置了EdDSA签名,您可以使用工具自动生成appcast:

构建您的应用程序并压缩它(例如在ZIP/tar.xz/DMG存档中),并将存档放入新文件夹中。此文件夹将用于存储您未来的所有更新。
从Sparkle的分发存档中运行generate_appcast工具,指定更新存档的文件夹的路径。如果需要,允许它访问钥匙串(需要在appcast中生成signatueres)。

./bin/generate_appcast /path/to/your/updates_folder/

该工具将生成appcast文件(会使用SUFeedURL中的文件名)和*.delta更新文件,以加快增量更新。将您的存档、增量更新和应用程序广播上传到您的服务器。

一般可以在自动生成后手动修改release note。

注意,目前我提交在项目中的 appcast.xml 仅供测试,里面缺少了签名信息等,填入的app下载地址也是虚假的,请务必替换。

请提前在本地进行测试,一切确认无误后,再填入未来正确的Key值。

  1. 合并分支

这里是Keldos的提示:如果您在测试中进行了多次提交,可在最后使用git rebase -i [commit位置]删掉一部分用于测试的commit 以保持清爽的分支,最终执行 git push -f 强制覆盖远程仓库的提交。

另外:

请务必在 非main 分支中完成所有开发,全部完成(包括更新版本号等杂项)后再并入主分支,确保main分支是清晰完整稳定可用的。当一个项目成为公共开源项目后禁止直接在main上开发!!!

需要最终执行分发的开发者签名,本次提交不能直接合并入主分支。

该commit曾被rebase追加两个补充的提交:
1. update Sparkle package 2.3.1 -> 2.3.2
2. 修正 appcast.xml 位置
@Keldos-Li
Copy link
Collaborator Author

如果考虑未来上架 AppStore 的话,由于 Apple 不允许商店外的更新渠道,关闭该 PR。

@Keldos-Li Keldos-Li closed this Mar 1, 2023
@Keldos-Li
Copy link
Collaborator Author

(不对,好像还没确定要不要买开发者账号……重新打开,对不起对不起)

@Keldos-Li Keldos-Li reopened this Mar 1, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant