9/23/2010

自動的にアップデートをさせるようにする [Safari Extensions を作ってみる:第五回]

Safari Extension が 1 つできたとして、それのアップデートを自動的にさせたい場合はどうしたらいいのだろう。メニューの「Safari -> 環境設定...」を選択し、「機能拡張」タブをクリックすると、環境設定画面左下に「アップデート」と表示されている。おそらくここになんらかのアクションを与えられる筈だ。「機能拡張ビルダー」には「マニフェストをアップデート」という項目があるので、ここが関係していると思って、Safari Extensions Development Guide: Updating Extensions を見に行く。すると、このページののっけから答えが書いてあった。このページには 2 種類の xml コードが紹介されている。今回のエントリーで使用するのは上のコード(以下、このエントリー内では「plist コード」と称する)。

とりあえず、マニフェストファイルを用意する。名前は「manifest.plist」とする。
  1. 上述の plist コードを貼り付ける
  2. 「機能拡張ビルダー」の「バンドル識別子」の文字列をコピーし、plist コードの「com.yourCompany.safari.yourExtensionName」と置き換える
  3. 「機能拡張ビルダー」の上部にある「Safari Developer」の括弧内の文字列を plist コードの「YourCertificateID」と置き換える
  4. 「機能拡張ビルダー」の「機能拡張のバージョン」の「バンドルのバージョン」内の文字列をコピーし、plist コードの「Your current bundle version」と置き換える
  5. 「機能拡張ビルダー」の「機能拡張のバージョン」の「バージョンを表示」内の文字列をコピーし、plist コードの「Your current display version」と置き換える
  6. パッケージとしてビルドした Extension ファイル(拡張子:.safariextz)をアップする予定の URL を、plist コードの「Your-.safariextz-URL」と置き換える

「3」の YourCertificateID(Safari Developer ID)は入力するのが面倒な場合は、以下の方法でコピーできる。
  1. 「アプリケーション -> ユーティリティ -> キーチェーンアクセス」を起動する
  2. 一覧から「Safari Developer〜」の行で右クリックして「情報を見る」を選択する
  3. 表示された画面の「詳細な情報 -> サブジェクト名 -> 通称」にある括弧内の文字列を選択してコピー


なお、環境設定画面で自動アップデートとして反応するのは「バンドルのバージョン」だけで、「バージョンを表示」は関係ない。例えば配布している Extension をパッケージ化したときの「バンドルのバージョン」が「1」だとして、manifest.plist の「CFBundleVersion」が「1.1」だとアップデートを促してくれるが、パッケージ化したときの「バージョンを表示」が「1」で、manifest.plist の「CFBundleShortVersionString」が「1.1」でもアップデートは促してくれない。

あと、<dict> で一括りにして、複数の Extensions のマニフェストを 1 つのファイル(ここで言う manifest.plist)に纏められるので、このマニフェストファイルをアップロードする場所は、ある程度意味が共通する名称の方がいいと思う。

さて、このマニフェストファイルを作成し、アップロードした後の手順はこうなる。
  1. manifest.plist をサーバーにアップする
  2. 「機能拡張ビルダー」の「機能拡張の詳細」の「マニフェストをアップデート」に、「1」でアップした URL を入力する
  3. 「機能拡張ビルダー」の「パッケージをビルド...」をクリックして、保存する
  4. 保存した Extension を前述の「6」で指定した URL にアップロードする

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.