开源框架:Sparkle for macOS软件版本自动更新产品实践

Sparkle是一个非常简单且易用的macOS应用程序更新框架,目前众多知名macOS App都在使用,包括微信、迅雷等 ,如下图:

     

官网地址:https://sparkle-project.org/

Github:https://github.com/sparkle-project/Sparkle

原理:提前在服务器配置好的xml文件,然后每次启动后解析xml,查看是否有比当前版本新的数据,有的话提示更新,注意检查的是Build,即CFBundleVersion的值。

具体操作如下:

第一步:引入SnapKit.framework,方式有两种,第一种就是直接pod导入,第二种就是下载源码本地编译生成framework导入项目。

1. pod导入

pod 'Sparkle'

2. 下载本地并编译出framework

git clone --recursive https://github.com/sparkle-project/Sparkle

 

第二步:创建自动更新检查连线,如下图:

即创建一个Object对象,然后设置他是Class类型为SUUpdater,然后按住control,拖动检查更新的菜单连线到更新对象的方法,如下图:

第三步:代码中编写检查更新的方法:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    
    //自动更新机制
    [[SUUpdater sharedUpdater] checkForUpdatesInBackground];
    
}

第四步:生成本地SUPublicEDKey写入到info.plist文件,如下图:

即在生成generate_keys然后直接拖动路径到终端下执行即可看到这个SUPublicEDKey,然后保存到info里面,如下图:

第五步:生成在线检查更新的xml文件,首先在info中添加文件地址,如下图:

通过直接执行命令generate_appcast(同上先生成可执行文件)来生成,首先把xxx.app压缩后放入一个文件夹,然后执行命令如下:


第六步:把xml文件和APP压缩包传到对应的服务器即可,如果想更丰富xml的内容,可以添加一些更新内容(description中添加),如下源码:

<?xml version="1.0" standalone="yes"?>
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
    <channel>
        <title>风车签名管理</title>
        <item>
            <title>1.0.4</title>
            <pubDate>Thu, 24 Dec 2020 10:51:32 +0800</pubDate>
            <sparkle:minimumSystemVersion>10.12</sparkle:minimumSystemVersion>
            <description>
              <![CDATA[
                <ul>
                  <li>新增【动态库导出】功能;</li>
                  <li>新增APP每日安装量统计功能;</li>
                  <li>新增APP到达安装限量邮件通知功能;</li>
                  <li>优化一些功能,修复已知bug。</li>
                </ul>
              ]]>
            </description>
            <enclosure url="http://xxxxxxxxx/download/pinwheel.zip" sparkle:version="5" sparkle:shortVersionString="1.0.4" length="5561536" type="application/octet-stream" sparkle:edSignature="/gOemYmxDFJlXspvPYGeAM2CJDJ/fmsxxxxxxxxxxiM0PzlWbeSz/25LLANDnWuWYzXNQsoZ3UeFBQ=="/>
        </item>
    </channel>
</rss>

至此,Sparkle就完美的实现了自动更新的功能,大快人心的时刻到了,产品【风车签名管理】展示效果图如下:

产品实践总结:在阅读和引入开源项目时,我们总会发现优雅思维和代码的存在,比如说在info.plist配置SUFeedURL文件请求地址、SUPublicEDKey安全效验码,甚至在xml中从容的配置多版本更新、升级版本内容,以及配置强制更新(即没有Skip 和 Later,只有Update)功能,一切都是如此的美妙,如果读者有疑问,可关注留言讨论。

啊,开源,是一件多么美妙的事业,再次感谢 Sparkle 团队的开源精神。

附录:参考微信更新弹窗和XML文件:

XML文件:https://dldir1.qq.com/weixin/mac/mac-release.xml

<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
	<channel> 
		<title>Mac Wechat</title> 
		<link>https://mac.weixin.qq.com</link> 
		<description>Most recent changes with links to updates.</description> 
		<language>en</language> 
		<item> 
			<title>2.6.1.19</title> 
			<description xml:lang="en">
				<![CDATA[  
				<h2>2.6.1.19</h2>
				<li> Set remarks for groups.</li>
				<li> Hide a chat in the chat list.</li>
				<li> Bug fixes and improvements.</li>
				]]> 
			</description> 
			<description xml:lang="zh-Hans">
				<![CDATA[  
				<h2>2.6.1.19</h2>
				<li> 可以给群聊设置备注;</li>
				<li> 可以在聊天列表中不显示某个聊天;</li>
				<li> 修复了一些已知问题。</li>
				]]> 
			</description> 
			<description xml:lang="zh-Hant">
				<![CDATA[  
				<h2>2.6.1.19</h2>
				<li> 可為群組設定備註;</li>
				<li> 可在聊天清單中設定隱藏某個聊天;</li>
				<li> 修復一些已知問題。</li>
				]]> 
			</description> 
			<pubDate>2021-01-14 20:32:57</pubDate> 
			<enclosure url="https://dldir1.qq.com/weixin/mac/WeChatMac.dmg?t=1610627577" sparkle:version="16853" sparkle:shortVersionString="2.6.1.19" length="60864466" type="application/octet-stream" sparkle:dsaSignature="MCwCFBYlOcX8O/cHSRzdAZBicDuTzL9eAhQw6kgy+Q6MAqtejwXOvKoX195Tkw==" sparkle:md5="52bb402c8112f1fa23752dba25ebd2e8" /> 
			<sparkle:minimumSystemVersion>10.11</sparkle:minimumSystemVersion> 
		</item> 
		<item> 
			<title>2.3.31.22</title> 
			<description xml:lang="en"> 
				<![CDATA[  <h2>2.3.31.22</h2> <li> Fixed various bugs;</li> ]]> 
			</description> 
			<description xml:lang="zh-Hans"> 
				<![CDATA[  <h2>2.3.31.22</h2> <li>修复了一些已知问题;</li> ]]> 
			</description> 
			<description xml:lang="zh-Hant"> 
				<![CDATA[  <h2>2.3.31.22</h2> <li> 修復了一些已知問題</li> ]]> 
			</description> 
			<pubDate>2020-05-21 18:40:20</pubDate> 
			<enclosure url="https://dldir1.qq.com/weixin/mac/WeChatMac_10_10.dmg" sparkle:version="13425" sparkle:shortVersionString="2.3.31.22" length="33457380" type="application/octet-stream" sparkle:dsaSignature="MC0CFQCb/M1dbbxrENJxmFrqPgJoaVJPtAIUHC/sMPXL1iJmrF6p+Cn8R+XNPqI=" sparkle:md5="f6923955df322302a68167fa8f3078ac" /> 
			<sparkle:maximumSystemVersion>10.10.6</sparkle:maximumSystemVersion> 
		</item> 
	</channel> 
</rss>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

群鸿

感谢认可,多谢打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值