Sparkle 常规使用姿势
Maria 在最近终于添加上了自动更新的功能,之前有想过加这个功能,但是当进入 Sparkle 官网看到密密麻麻的文档和需要手动签证书什么的字眼,懒癌突然发作。
寒假一天闲着总算是把这个功能添加上了。总的来讲,添加这个功能非常的简单,但前提是你使用较新版本的 Xcode,第二前提是你有耐心仔细的看使用文档[1](这一点特别重要,不然你会犯一些特别弱智的错误)。
appcast.xml
Sparkle 发布更新是通过 RSS 的方式来做的。Sparkle 自定义了一套专用的 xml 格式,如果手动书写的话会比较麻烦,所以自己写了一些小程序来快速生成 appcast.xml。
// npm install xml
var xml = require('xml');
var Appcast = function(info) {
this.title = info.title
this.description = info.description
this.language = info.language
this.items = []
}
Appcast.prototype.addItem = function(item) {
this.items.push({
"item": [{
"title": item.title,
},{
"pubDate": item.pubDate,
},{
"sparkle:releaseNotesLink": item.releaseNotesLink,
},{
"enclosure": [{
"_attr": {
"url": item.url,
"sparkle:version": item.version,
"sparkle:shortVersionString": item.shortVersionString,
"type": "application/octet-stream",
"sparkle:dsaSignature": item.dsaSignature,
}
}],
},{
"sparkle:minimumSystemVersion": "10.8"
}]
})
};
Appcast.prototype.xml = function(options) {
var cast = {
"rss": [{
"_attr": {
"version": "2.0",
"xmlns:sparkle": "http://www.andymatuschak.org/xml-namespaces/sparkle",
"xmlns:dc": "http://purl.org/dc/elements/1.1/"
}
},{
"channel": [{
"title": "Maria's Changelog",
},{
"description": "Most recent changes with links to updates.",
},{
"language": "en",
}]
}]
}
this.items.forEach(function(item) {
cast.rss[1].channel.push(item)
});
var xmlString = xml(cast, {
declaration: true,
indent: true
});
return xmlString;
};
module.exports = Appcast
使用示例:
var Appcast = require('./appcast.js')
cast = new Appcast({
title: "Maria's Changelog",
description: "Most recent changes with links to updates.",
language: "en"
})
cast.addItem({
title: "Version 1.2.6",
pubDate: "Wed, 09 Jan 2006 19:20:11 +0000",
releaseNotesLink: "http://proj.windisco.com/Maria/Maria_1.2.6.html",
version: "1701214",
shortVersionString: "1.2.6",
url: "http://proj.windisco.com/Maria/Maria_1.2.6.zip",
dsaSignature: "",
minimumSystemVersion: "10.8"
})
console.log(cast.xml());
DSA Signature
签证是可以自己手动签的,一开始我是觉得自己签很麻烦(对我就是这么的懒),给 Maria 上自动更新的功能也是拖了很久,最近几天下定决心做好这事之后好好看了看文档,发现 Sparkle 项目文件夹里就提供好了生成证书的二进制程序 ./bin/generate_keys
。生成的证书分为公钥和私钥(默认名字为 dsa_priv.pem
和 dsa_pub.pem
)。公钥放进 Xcode 项目文件文件夹里就行了,私钥则是用来生成密钥供每次发布更新时填进 appcast.xml
。
./bin/sign_update path_to_your_update.zip path_to_your_dsa_priv.pem
Draft