雑文発散

«前の日記(2015-06-17) 最新 次の日記(2015-06-19)» 編集
過去の日記

2015-06-18 [長年日記]

[Pebble] 自作 Pebble アプリをバージョンアップして初代 Pebble のサポートを追加した話

先日 Pebble の Appstore へ登録した Watchface アプリをバージョンアップした。バージョンアップと言っても、これまで Basalt プラットフォーム(カラー対応の Pebble Time / Pebble Time Steel)のみのバイナリだったところに、Aplite プラットフォーム(初代 Pebble / Pebble Steel)のバイナリを加えただけである。

Pebble app for Aplite and Basalt platforms.

昨日の日記で「次は Animating Layers を学ぼうかな」と言っていたとおりにドキュメントを読んでいたら、ソースコード内で Aplite / Basalt プラットフォームの切り分け方法が分かったので、自作アプリにも適用してみた。

プラットフォームの切り分けは、C 言語の #ifdef で行えば良いのであった。

#ifdef PBL_PLATFORM_BASALT
  // code for basalt
#else
  // code for aplite
#endif

#ifdef PBL_PLATFORM_APLITE という切り分けもできるけど、今のところ Aplite / Basalt の 2 つのみなので、「Basalt か否か」での切り分けにしてしまった。

これで build すると、Aplite と Basalt のバイナリが入った .pbw パッケージファイルが作成される。「パッケージと言っても、どうせ zip ファイルだろ?」と思って、unzip -l を試してみたら、やはり zip でまとめてあるだけであった。

% unzip -l beaver-typeface-watchface.pbw
Archive:  beaver-typeface-watchface.pbw
  Length     Date   Time    Name
 --------    ----   ----    ----
      520  06-18-15 07:51   appinfo.json
     1018  06-18-15 07:51   basalt/pebble-app.bin
    26014  06-18-15 07:52   basalt/app_resources.pbpack
      387  06-18-15 07:52   basalt/manifest.json
     1014  06-18-15 07:51   pebble-app.bin
    26014  06-18-15 07:52   app_resources.pbpack
      366  06-18-15 07:52   manifest.json
 --------                   -------
    55333                   7 files

圧縮ファイルのトップレベルにいる pebble-app.bin が Aplite(初代 Pebble)用のバイナリで、basalt ディレクトリ以下の basalt/pebble-app.bin が Basalt(Pebble Time)用のバイナリって感じでパッケージングされている。

このバイナリを Appstore へ登録すれば OK ! と思ってやってみたのだが、なぜか Status: invalid みたい(正確な表示を忘れてしまった)になっていて、なぜなんだー!と悩んでしまった。でも、よく見ると「同じバージョンがもう登録済みだぜ(意訳)」みたいなメッセージを見つけて理解した。

バージョンアップしたバイナリを登録する場合には appinfo.jsonversionLabel を書き換えないといけないのであった。そして 1.0 から 1.1 へバージョン番号を上げた。

-  "versionLabel": "1.0",
+  "versionLabel": "1.1",

これでもう一度 build して、Appstore へ登録したら無事に認識されたので Publish した。

続いて iOS の Pebble.app(初代 Pebble 用)でも Pebble Time.app(Pebble Time 用)のそれぞれで Appstore を開いて、オレのアプリが「Version 1.1」の表記になっていることを確認した。

だがしかし、初代用の Pebble.app の表記に「Time Required」のラベルが付いたままなのを発見。このままだと、バイナリは初代対応なのに、初代へインストールできないという状態だ。

Pebble app for Aplite and Basalt platforms.

iOS の Pebble.app アプリを終了させ、もう一度起動しても変わらないので、アプリ内のキャッシュ的な問題ではなさそうだ。最初のリリースが「Pebble Time 専用」だったので、このラベルは「アプリが最初に登録されたとき」に付与され、後からは更新されない仕組みなのかもなぁ。

ということで、つたない英語で Developer Support へ問い合わせを投げてみた。さて、どうなるかな。