Pebbleアプリ開発メモ

Pebbleアプリ、Watchface開発のメモを残していきます。

【Pebble】設定完了後の再読み込み

設定完了後はデータを書き込んでinitを呼びたくなりますが、これをやると見た目は再起動されたように見えても中のハンドラとかがぐちゃぐちゃになってエミュレーターが起動しなくなったり、インストールすらできなくなったりします。

initはコード中には書かず地道に書くレイヤーやタイマーを再設定しましょう。

【Pebble】データの永続化(App側・PebbleKit JS・サーバー側)

データの永続化には3種類あります。

Cで書くと時計に、PebbleKit JSファイルに書くとローカルのlocalStorageに、設定ページに書くとwebViewのlocalStorageに保存されます。

ユーザーに設定をさせてそれをCやPebblekit JSから読みたいときは渡ってきた設定ファイルをそれぞれに保存しなければならないようです。

なにか良い方法あれば教えて下さい。

App側
// 存在チェック
if(!persist_exists(KEY_TIME_SHOW_IN_C)) {
    persist_write_bool(KEY_GMT_ENABLED, false);
    persist_write_string(KEY_GMT_TIME_DIFF, "-11");
    persist_write_bool(KEY_TIME_SHOW_IN_C, true);
    persist_write_bool(KEY_FORECAST_ENABLED, false);
    persist_write_string(KEY_FORECAST_API_KEY, "");
  }
PebbleKit JS(プロジェクト内のhoge.js)
localStorage.setItem(KEY_GMT_ENABLED, false);
localStorage.setItem(KEY_GMT_TIME_DIFF, "-11");
localStorage.setItem(KEY_TIME_SHOW_IN_C, true);
localStorage.setItem(KEY_FORECAST_ENABLED, false);
localStorage.setItem(KEY_FORECAST_API_KEY, "");
設定ページ(hoge.php等)
localStorage.setItem(KEY_GMT_ENABLED, false);
localStorage.setItem(KEY_GMT_TIME_DIFF, "-11");
localStorage.setItem(KEY_TIME_SHOW_IN_C, true);
localStorage.setItem(KEY_FORECAST_ENABLED, false);
localStorage.setItem(KEY_FORECAST_API_KEY, "");

プロジェクト設定にKEYの記述を忘れると受け渡しができないので忘れないよう注意。

【Pebble】文字列の扱い

文字列の扱い方です。純粋なCは10年ぶりくらいなので色々忘れていました。メモ。

初期化、代入
static char buff[32];
・
・
・
if(condition) {
    snprintf(buff, sizeof(buff), "%s", buff);
} else {
    snprintf(buff, sizeof(buff), "%s", "");
}

空の時はちゃんと空を入れてやらないとログに何も出ず落ちるので注意。

長さを取得
if((int)strlen(buff) < 1) {
    
}
フォーマット
APP_LOG(APP_LOG_LEVEL_DEBUG, "%02d : %s", someInt, someBuffer); // ok
比較
if(strcmp(t->value->cstring, "true") == 0) {

サーバーから設定取ってくる時とかに型がおかしくなる時ある。

切り抜き(substring的な)
strncpy(buff, appended_buffer + scrollCount, sizeof(appended_buffer) - scrollCount);

【Pebble】ビットマップの表示/非表示を切り替える

例えば充電中であることを示すアイコンを表示したい時、情報を取得して表示/非表示を切り替える必要が出てきます。

そういう時は、

layer_set_hidden(bitmap_layer_get_layer(s_charge_layer), !charge_state.is_charging);

というように切り替えることが出来ます。

Pebbleアプリの開発環境

Pebbleアプリの開発環境ですが、自分はCloudPebbleを使っています。

ブラウザからPebbleアカウントでログインすればすぐに使い始まられますし、シンタックスハイライトや補完も効くのでかなり便利&お手軽です。

エミュレーターも付いていて、ワンクリックでデプロイ&実行できます。

色々なプラットフォーム向けに開発してきましたが、過去最高に簡単な開発環境セットアップでした。

ブラウザですのでMacでもMacbookでも環境を共有できるのもいいですね。

ドキュメントも情報は少ないのですが割りと見やすいです。サンプルもまあまあ充実してます。

developer.getpebble.com