先日 Pebble の Appstore へ登録した Watchface アプリをバージョンアップした。バージョンアップと言っても、これまで Basalt プラットフォーム(カラー対応の Pebble Time / Pebble Time Steel)のみのバイナリだったところに、Aplite プラットフォーム(初代 Pebble / Pebble Steel)のバイナリを加えただけである。
昨日の日記で「次は 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.json
の versionLabel
を書き換えないといけないのであった。そして 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」のラベルが付いたままなのを発見。このままだと、バイナリは初代対応なのに、初代へインストールできないという状態だ。
iOS の Pebble.app アプリを終了させ、もう一度起動しても変わらないので、アプリ内のキャッシュ的な問題ではなさそうだ。最初のリリースが「Pebble Time 専用」だったので、このラベルは「アプリが最初に登録されたとき」に付与され、後からは更新されない仕組みなのかもなぁ。
ということで、つたない英語で Developer Support へ問い合わせを投げてみた。さて、どうなるかな。