美文网首页MacDeveloper
使用Sparkle实现软件的检查更新

使用Sparkle实现软件的检查更新

作者: _我和你一样 | 来源:发表于2020-04-10 12:40 被阅读0次

    使用Sparkle实现软件的检查更新

    上sparkle官方连接:https://sparkle-project.org/ 闪闪放光的sparkle是开源的,它非常好的实现了软件的更新功能。

    不像有些软件,检查更新只提供一个下载链接,让用户去下载,下载完成之后再进行安装更新。sparkle可以直接进行软件的安装和更新操作。

    当然了,这里提到的更新都是App Store之外的应用更新,上架App Store的应用不允许提供检查更新和更新的功能,这些功能由App Store负责,App Store的更新不在此讨论范围之内。

    1.在项目中集成sparkle

    我这里使用cocoapod进行集成,当然也可以手动集成

    pod 'Sparkle'
    

    2.添加ED公钥

    在info.plist文件中添加ED公钥,

    key为:SUPublicEDKey

    value: 获取的公钥

    如何获取公钥呢?

    运行 ./bin/generate_keys 可以获取公钥,generate_keys 这个文件是Sparkle工具提供的,

    可以在这里下载最新的版本:https://github.com/sparkle-project/Sparkle/releases/

    我下载的版本是1.2.3.0,无需下载源码,下载编译好的工具即可,我下载的是Sparkle-1.23.0.tar.xz

    generate_keys 就在解压之后的/bin/目录下,这个/bin目录下还有用于签名的sign_update工具

    执行./bin/generate_keys 可以获取公钥,如果没有,就再执行一次。

    3.添加用于解析更新的xml文件地址

    在info.plist文件添加此内容

    key:SUFeedURL

    value: 用于解析更新内容的xml地址

    这里要注意两点:

    至于xml文件的内容,这个也是重中之重。

    4.编写xml文件

    上面的连接已经给出了示例,这里主要说明一下

    更新内容的连接在releaseNotesLink标签里,

    <sparkle:releaseNotesLink>
                    http://you.com/app/2.0.html
                </sparkle:releaseNotesLink>
    

    也可以直接使用下面的方式,直接说明更新内容

    <description>
              <![CDATA[
                <ul>
                  <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
                  <li>Suspendisse sed felis ac ante ultrices rhoncus. Etiam quis elit vel nibh placerat facilisis in id leo.</li>
                  <li>Vestibulum nec tortor odio, nec malesuada libero. Cras vel convallis nunc.</li>
                  <li>Suspendisse tristique massa eget velit consequat tincidunt. Praesent sodales hendrerit <a href="#">pretium</a>.</li>
                </ul>
              ]]>
            </description>
    

    更新日期

     <pubDate>Wed, 09 April 2020 19:20:11 +0000</pubDate>
    

    版本-下载地址-文件大小-版本号 在下面的标签里

    <enclosure url="http://0.0.0.0:8000/Update.app.zip" sparkle:version="2.0" length="4945096" type="application/octet-stream" sparkle:edSignature="8jomTVaWC7p3rxgNW8xXlRK2oe4eyFQiJ9+oknCIoKrH8+sF7jy2xQ+Mx37F00WenDBuOIy2ymD3nTQuQkyOCw==" />
    

    这里面的edSignature和length要重点说一下,length是文件大小,而edSignature则是文件的签名信息,如何获取这个签名和文件大小呢?

    同样使用之前提到的sparkle的sign_update工具

    ./Downloads/Sparkle-1.23.0\ 2/bin/sign_update /Users/user/Library/Developer/Xcode/DerivedData/Update-etfquozbuzwagxdusjlobdpvaxio/Build/Products/Debug/Update.app.zip
    
    sparkle:edSignature="8jomTVaWC7p3rxgNW8xXlRK2oe4eyFQiJ9+oknCIoKrH8+sF7jy2xQ+Mx37F00WenDBuOIy2ymD3nTQuQkyOCw==" length="4945096"
    

    可以设置最低的系统版本支持

    <sparkle:minimumSystemVersion>10.13</sparkle:minimumSystemVersion>
    

    5.在软件中添加Sparkle对象

    1. 打开main.storyboard
    2. 在资源库中添加Object对象到Application场景目录下,并修改Object的class为SUUpdater
    image.png
    1. 添加一个检查更新的菜单到主菜单,将检查更新菜单拖拽到刚才的Updater对象上(就是刚才的Object),绑定Updater的 checkForUpdate事件,即可。

    相关文章

      网友评论

        本文标题:使用Sparkle实现软件的检查更新

        本文链接:https://www.haomeiwen.com/subject/lbfrmhtx.html