29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MacApp用アップデート管理システムSparkleの使い方

Last updated at Posted at 2015-07-13

先日MacOS用クリップボード拡張アプリ「Clipy」をリリースしました。
Clipyの開発については先日のQiitaの記事を参照ください。

今回はClipy内でも使用しているMacOSアプリケーション用アップデート管理フレームワークのSparkleの使用方法についてまとめます。
Sparkleを導入することにより、Macアプリケーションの自動アップデートなどをとても簡単に行うことができます。
Macアプリケーションをリリースされる方はぜひ導入してください。

今回の解説はMacAppStoreで配布しない場合の作成方法です。
基本的な作成方法は変わりませんが、証明書等少し変わってきますので、MacAppStoreで使用する場合は公式ドキュメントを参照ください。

Sparkleのインストール

SparkleはCocoaPodsで導入することができます。

platform :osx, '10.9'
source 'https://github.com/CocoaPods/Specs.git'
pod 'Sparkle'
pod install

でライブラリを導入してください。

証明書の作成

証明書の作成は用意されているシェルスクリプトを使用します。
Sparkleリポジトリ
よりコードをダウンロード/クローンしてください。

cd cloneDirectory
./bin/generate_keys.sh

上記のコードより、証明書作成シェルを実行すると、同階層にdsa_priv.pem dsa_pub.pemが作成されます。
この時、dsa_priv.pemの方は今後のアップデートでも使用するものなので、大切に保管してください。

また、作成したdsa_pub.pemはXcodeにドラッグアンドドロップでインポートしてください。
その後、Info.plistのSUPublicDSAKeyFile dsa_pub.pemを指定してください。

AppCastの準備

Sparkleのアップデートの確認はAppcastといわれるフォーマットを使用します。
公式のサンプルAppcastを参考していきます

サンプルを見てわかるよう、基本的にはxmlでアップデート情報を記載していきます。
以下のappcastが実際にclipyで使用しているappcastファイルです。

<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Clipy changelog</title>
    <link>http://clipy-app.com/appcast.xml</link>
    <description>Clipy update changelog.</description>
    <item>
      <title>Clipy 1.0.1</title>
      <description>
        <![CDATA[
          <ul> <li>Marvericsでメニューバーが表示されない問題の修正</li> </ul>
        ]]>
      </description>
      <pubDate>Sun, 5 July 2015 03:04:00 +0900</pubDate>
      <sparkle:minimumSystemVersion>10.9</sparkle:minimumSystemVersion>
      <enclosure url="https://github.com/Clipy/Clipy/releases/download/1.0.1/Clipy_1.0.1.dmg" sparkle:version="1.0.1" length="20150704" type="application/octet-stream" sparkle:dsaSignature="MCwCFDIOlk3gJGTc46P1CQgWrE8S5HYlAhQ5BW9XLWApES7lmglPg0Vn0pXpnA=="/>
    </item>
  </channel>
</rss>

重要な点は、
<sparkle:minimumSystemVersion>10.9</sparkle:minimumSystemVersion>
ここで、対象のOSのバージョンを指定しています。もし、使用ライブラリ等のアップデートでサポートするOSのバージョンが上がった際はこちらを変更します。

<enclosure url="https://github.com/Clipy/Clipy/releases/download/1.0.1/Clipy_1.0.1.dmg" sparkle:version="1.0.1" length="20150704" type="application/octet-stream" sparkle:dsaSignature="MCwCFDIOlk3gJGTc46P1CQgWrE8S5HYlAhQ5BW9XLWApES7lmglPg0Vn0pXpnA=="/>

ここでは、アップデートを行うdmgファイルのパスと、アプリのバージョン等を指定しています。

lengthはどこの情報も見ても何をいれるか定かではないため、アップデートを行った日付を暫定的に入れています。
どなたか正解を教えて下さい。

dsaSignatureについては後述するアップデートについてを御覧ください。

Info.plistに設定

作成したappcastファイルをサーバに置いてください。
Clipyの場合はすべてgithubで管理していますので、appcastファイルもgithubに置いています。

設置したファイルのURLはInfo.plistのSUFeedURLに設定してください。

設定画面にSparkleを設置

アプリケーションでは、よく見かける設定画面の今すぐアップデートボタンの設置を実装していきます。

まずは、Storyboard,xibにSUUpdaterを設置していきます。

SUUpdaterのActionを設置しているボタンのActionに適応させます。
これだけで、自動的にアップデートを検査しにいきます。

また、前回チェック時の時間のBindingも可能で、Binding設定するだけで自動で反映されます。

アップデート設定

コードでアップデート確認や、自動アップデートやアップデートチェックの時間設定等も行えます。
基本的にはアプリ起動時に設定を行って下さい。

let updater = SUUpdater.sharedUpdater()
// URL指定
let feed = "http://clipy-app.com/appcast.xml"
if let feedURL = NSURL(string: feed) {
  SUUpdater.sharedUpdater().feedURL = feedURL
}
// 自動アップデートを設定
updater.automaticallyChecksForUpdates = true
// 24時間(1日)毎にアップデート確認
updater.updateCheckInterval = 86400

実際にアップデート

実際にアップデートを行う手順を説明していきます。

アーカイブファイルを用意

.appを圧縮します。
ここで.appファイルのファイル名はアプリの名前のみにしてください。
Clipy.appという形です。
Clipy_1.0.1.appといった形では使用することができません。
対応しているフォーマットはzip tar.gz tar.gz2 dmg pkg です。
作成したアーカイブファイルに署名を行っていきます。

署名

こちらもSparkleのリポジトリ内に入っているシェルファイルを使用します。

./bin/sign_update.sh path_to_your_update.zip path_to_your_dsa_priv.pem

アーカイブしたアプリに証明書の作成時に作成したdsa_priv.pemを使って署名します。

実行すると

MCwCFDIOlk3gJGTc46P1CQgWrE8S5HYlAhQ5BW9XLWApES7lmglPg0Vn0pXpnA==

こんな感じで文字列が出力されます。
この出力された文字列がappcast内のdsaSignatureに対応します。

appcastの書き換え

appcastにアップデートを行った内容、アップデートするファイルのパス等を書き換えて完成です。

これでアプリが起動するたびにSparkleによってアップデートチェック走り、appcastに更新がかかっていればアップデート行うようになります。

まとめ

更新作業は割りと時間がかかってしまいますが、自動化するTips等もありますので、今後紹介できればと思います。
アプリアップデート機能はどのアプリでも使用しておいて損はないので、ぜひ導入してください。

はじめにもかきましたが、先日クリップボード拡張アプリケーションの「Clipy」をリリースしました。
Clipyにも自動アップデート機能がありますので、ぜひダウンロードしてお試し下さい!

ソースコードもすべてオープンソースで公開しておりますので、ご参考にしてください!

29
25
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?