
Designed for Use を読んでいて、例として紹介されていたので試しに買ってみた RPG風タスク管理アプリ EpicWin が楽しい。ついついタスクを追加してしまう。
紹介はこちらが詳しい。
日常生活をRPGにするEpicWinを2週間続けて使ってみた。
このアプリは音なしでやるととても寂しいので、是非ヘッドフォンをして試してみてほしい。
ゲーム系アプリには音が重要なことがよくわかる。
「EpicWin を紹介する」もTodoに入れていたので紹介してみました。
PS Vitaに似たようなアプリがあるのだけれども、こちらはコンセプトは面白いんだけど残念ながら楽しくない。
『勇者のきろく』は日々のタスクをRPG感覚でこなす管理ソフト【PS Vitaクリエイターインタビュー】 – ファミ通.com
自分で作っている英単語学習アプリを自分でひたすらテストをしているのだけれども、実際やってみるとなかなか毎日継続して学習させるのは難しい。
何かアプリを起動するモチベーションを用意したいということで、これまで利用したことがなかったGame CenterのLeaderboard機能を試しに使ってみることにした。
昔Game Centerが出たての頃に試してみたときには面倒そうであまりひかれない機能だったのだけれども、今は情報が揃っていてLeaderboardを使うくらいであればあっという間に実現できてしまった。
Game Center のリーダーボード(スコアランキング)対応アプリの作り方 – Over&Out その後
や
iPhoneアプリをGameCenterのLeaderboard(ランキング)に対応させる方法 | PLUS
を参考にした。
しかし、試しているうちになぜかアプリをアクティブにしただけでLeaderboardが表示されてしまうようになってしまった。
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if(localPlayer) {
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if(error == nil) {
if(localPlayer.authenticated) { // GameCenter が利用可能
[self sendScoreToGameCenter];
GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewControlleralloc] init];
leaderboardController.leaderboardDelegate = self;
[self presentModalViewController:leaderboardController animated:YES];
}
} else { // GameCenter が利用できない
// alert を表示
}
}];
}
デバッガで調べていると、なぜかいきなり GKLocalPlayer の authenticateWithCompletionHandler のblock内の処理がいきなり呼び出されていることがわかった。
ということで
Deprecated GKLocalPlayer Methods
を読んでみたところ、このAPIを呼ぶとスレッドが走って、情報が得られた後にblock の処理が呼ばれるらしい。
ということで、バックグラウンドに入ったアプリをアクティブにするだけで、Leaderboardが表示されてしまっていた。
わかってしまえば簡単だけれども、この情報を他にWebで見た記憶がないのでメモとして残しておく。
しかしGame Center は利用するのは簡単だけれども、Game Centerを利用しないユーザから見ると結構うざい機能だ。
Game Centerの「○○さんお帰りなさい」を出さないよう設定する方法はありますか? | よくあるiPhoneの質問 | 教えて!AppBank
など、無効にしたいというコメントを大量に見つけることが出来た。
とりあえず利用するけれども、不評だったら機能を削除したりしようと思う。
書籍としては、この前BOOKSCANでスキャンした下記の本が役に立った。
MFMailComposeViewController を使ってメール送信ダイアログを表示しようとしたところ、Application tried to present a nil modal view controller on target が発生してアプリが強制終了されてしまう問題に遭遇。
iphone – 'Application tried to present a nil modal view controller on target' error/crash when trying to open mail composer – Stack Overflow
に書いてあるとおり、MFMailComposeViewController の canSendMail を使って、端末からメールを送れる状態であるかを確認する必要がある。
テスト用端末や Simulator だとメールの設定をしていないことも多いと思うので、遭遇することがありそうだ。
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil) {
MFMailComposeViewController * mailView = [[MFMailComposeViewController alloc] init];
mailView.mailComposeDelegate = self;
//Set the subject
[mailView setSubject:emailSubject];
//Set the mail body
[mailView setMessageBody:emailBody isHTML:YES];
//Display Email Composer
if([mailClass canSendMail]) {
[self.navControl presentModalViewController:mailView animated:YES];
}
}
ちなみに、メールを送信できない環境である場合自動的にダイアログが表示される。

さらにちなみに、SMSを送りたい場合は MFMessageComposeViewController を使い、その場合送信可能かどうかは canSendText を使うとのこと。
上記のStack Overflow の質問では、メールを送信したいのにこちらが使われていたので、二重に間違っていたことになる。

2013年3月に発売された fitbit ソフトバンクBB、Bluetooth 4.0接続の活動量計「fitbit」発売 – ケータイ Watch 即買って何週間か経ったので感想を書いてみる。


自分が買ったのは一番安い fitbit zip。5480円だった。
基本的には fitbit zip はBTLE(Bluetooth Low Energy)でスマートフォンとつながる万歩計だ。
これでPebbleに続き2台目のBTLEデバイスになる。
写真で100円玉と比較したとおり、とても小さい。本体だけなら8gらしい。
普通はぶらさげるための添付のケースなどを付けるのでもう少し重くなるだろうが、付けることは全く苦にならない。
電源はボタン電池(CR2025)だが、BTLEなので4-6ヶ月使えるらしい。
使い始めると自然な流れでiPhoneでfitbit.com のサイトに登録させられる。さすがにUSで練られてから導入された製品ということでとてもつかいやすい。
fitbitをfitbit.comに登録した後は、基本的にfitbit自体を見ることはなく、iPhone上のfitbitアプリを起動して歩数などを確認することになる。

fitbit アプリの使い勝手は特に問題なし。
fitbit から情報を取得して fitbit.com を更新しているようだ。
とりあえず fitbit を付けるようになってから、無駄にこまめに歩くようになったのはいいことだと思う。
ただの万歩計はつけて歩こうとは思わないが、付けて歩いてたまにアプリを起動すればWebに記録がたまっていくなら付けて歩こうかという気にもなる。
通勤時に自転車を使わず駅まで歩けば1万歩を超えて、テニスも加えると13000歩くらいになることがわかった。
テニスはもっと歩数を稼げると思ったが意外に3000歩くらいにしかならないようだった。
fitbit の API はこちらで公開されている。
Fitbit
もともとは何か作ろうと思って買ったのだが、現在はJava、PHP、.NET のサンプルしかないのと、アイデアが浮かんでいないので様子見をしている。
(Pebble の方はやりたいことがいろいろあるのだがまだSDKがでていない…)
いってしまえばBTLE付きのただの万歩計なのだが、特に不快なところがなくわかりやすい製品なので売れるのではないかと思う。
Hanako でスマホ・タブレット特集があるというので買ってみた。
大部分が特集記事で気合いが入っていた。3キャリア分特集しているので深くはないがその分広く浅く情報が得られる。
Kickstarter で iPhone/Android で使える腕時計 Pebble に出資してみたで出資してから11ヶ月待っていた Pebble E-paper Watchがついに届いた!!
ので感想を書いてみる。
まずはよい点から。

- デザインがよい。まだ出たばかりで稀少度が高いこともあり所有欲を満たされる
- 大きく押しやすいボタン。G-Shockはボタンを押す気にならないが、これはとても押しやすい。地味にポイント高い
- 電池が驚くほど持つ。無充電で7日間使えるようだ
- E-Paperの文字盤が美しい。文字盤のデザインがいろいろ変えられて楽しい
- Bluetooth でiPhoneの音楽再生をコントロールできる。これが意外に楽しい
- スマートウォッチだが小さくてまるで普通の腕時計のよう。SII Ruputer や IBM WatchPad と比較すると、隔世の感がある
とまあこのあたりはちまたのレビューでほめられているところだが、実際に使ってみるといろいろと残念なところもある。
次は使ってみて残念だったところを書いてみる。
- iOSではSMSくらいしか通知してくれない
- 日本語対応していない(日本語は豆腐表示になる)
- 表面がつやつやしていて美しいが、傷つきやすそう

iOS通知問題
iOSはAndroidと比較するとアプリ開発の自由度が低く、バックグラウンドに回ったアプリは(一部例外はあるものの)最大10分しか生存できない。また、サービス的なものも作ることが出来ないため、いろいろなアプリの通知を監視してPebbleに送る、というようなことは出来ないのでは、と想像していたがやはりできないようだ。(Jailbreakすれば出来るらしく、BTNotificationEnablerなるアプリがある)
しかしどういう仕組みかわからないが、SMS受信だけは通知されるらしい。今自分はSMSをほとんど使っていないのでまだ恩恵にはまだあずかっていないのだが。
この問題はiOSだけの問題で、Android ではほぼ全ての通知をPebbleに送信するアプリがあるらしい。このアプリを使うためにAndroid端末を使いたくなる。
また、本当にAppleがiWatch を出すのであれば、その時にはこの問題も解決するのではないだろうか。Apple謹製のiWatchだけの特権だとPebbleとしては困ってしまうが。
日本語非対応問題
日本語対応していないため、せっかく通知されても日本語は豆腐表示となる。
後からファームウェアアップデートで日本語対応されるとうれしいが、そんな大きな変更をアップデートで行うことができるだろうか。
表面が傷つきやすい問題
デザインはよく、表面もつやがあり美しいが、大事に使っていたのに初日から軽く傷が付いたところを見ると初代iPod nano 並に傷が入りやすい印象。
SDK出てない問題
発売と同時に出るはずだったSDKがまだ出ていない。唯一出たのは随分昔のAndroid向け情報。
Pebbleを使うためにAndroid端末がほしくなる。
ということでまだ問題もいろいろあるが、わかっていて買ったので後悔はない。
そもそも出資したときには製品として世に出るかもわからなかった。
SDKが出たら何を作ろう、と考えるのは楽しい。SDKが出たらきっと楽しいアプリがたくさん出るだろう。
今後のアップデート+SDK公開に期待したい。
レビュー達
追記 2013/03/26
SDK が本家からリリースされていない状況だがハッキングは進んでいるようだ。
Hacking Pebble
MacOSとBluetooth接続ができる libpebble やBTNotificationEnablerのコードがあったりする。
iOSのPebble App がSMS通知を受ける方法だが、いろいろ調べてみるとどうやら iOS6でサポートしたBluetooth MAPを使っているようだ。
iphone – SMS notifications in iOS6 – Stack Overflow
ios – How can I receive push notifications of an other app? – Stack Overflow
しかし仕組みはまだよくわかっていない。
Bluetooth MAPは主に車内で使うことを目的としてサポートされたように見える。
BTLEの情報は日本だと WF-BTLE に集まっているようだ。
最近ハンズオンも開催された。BTLEハンズオンを開催しました – Reinforce-Lab.’s Blog
Pebble によると SDK の第1弾は Watchface SDK になるとのこと。Update #34 Pebble Watchface SDK Coming Out in April – Pebble Forums
4月第2週には出るとのことなので、4/12(金)までには出るということなのだろう。
楽しみだ。
今作っている英単語学習用iPhoneアプリは基本的には自分で英単語を入力して問題にするのだけれども、さすがにそれだとスパルタンすぎるのでなにか丁度よい英単語集をプリインストールしたいと思い、リストを探していた。
なかなか自由に利用できるリストはないのだけれども、有名なものとして GSL (General Service List) と AWL (Academic Word List) があることを知った。
GSLはtheとかaとかgoodとか問題にするには平易すぎる単語が多いので、サンプルとして英単語学習アプリに入れるには適していなそう。
それに対してAWLの方はそれなりに広い範囲に適用できそうなリストだったので、アプリで利用してもよいか、作者のAveril Coxhead さんに確認したところ、快諾をいただけました。
アプリから元のリストをたどれるようにしてほしい、という要望があったので、アプリから
Academic Word List – School of Linguistics and Applied Language Studies – Victoria University of Wellington
のページを開けるように対応。
後は細かい使い勝手の改善と、ローカライズを終えればリリースできそう。
… と書いてからすでに一ヶ月以上経過。ようやくもうすぐリリースできそうだ。

そろそろPebbleのiPhone向けSDK情報が何か出ているかと思って探してみたら、まだ何も更新はなかった…
しかし、jailbreak 界ではすでにiPhone の Notification Centerに表示された情報をPebbleに送信する BTNotificationEnabler なるものが公開されているらしい。
Pebble watch pulls all notifications from the iPhone, but only if you jailbreak
早く jailbreak なしで使えるようにしてほしい。
物書堂は使い勝手のよい辞書アプリをたくさんリリースしている会社だ。
今作っている英単語学習アプリで物書堂の辞書アプリと連携できるとうれしいと思ったらサンプルコードが公開されていた。
辞典Appで検索 | iPhone | 物書堂
ProductController が提供されているので、呼び出しはとても簡単だ。(多少手を入れている)
ProductController * controller = [ProductController sharedController];
MKDSearchOption option = MKDSearchOptionDefault;
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
int monokakiIndex = [prefs integerForKey:MONOKAKI_JISHO_INDEX];
[controller searchAtIndex:monokakiIndex withString:searchText withOption:option];
物書堂アプリと連携した場合、物書堂アプリから1タップで呼び出し側のアプリに戻ることが出来るので、とても便利。

アプリ間連携はこれまであまりやったことがなかったが今後は活用してみよう。
[IOS] iOS オープンソースライブラリ徹底活用 菊田剛著 秀和システム | DevCafeJp で紹介されていた、SSPieProgressView for iOS – Cocoa Controls を使ってみたのでメモ。
デザインのよい円形のプログレスの表示をしてくれる。
自分の場合はカウントダウンタイマーのかわりとした。
2013/02/16時点での Class Reference はこちら。ARC をサポートしている。
SSPieProgressView Class Reference

使い方は簡単なので紹介するまでも無さそうだけれども参考までにコード片を貼ってみる。
SSPieProgressView *progressView6 = [[SSPieProgressViewalloc] initWithFrame:CGRectMake(170.0f, 95.0f, 130.0f, 130.0f)];
progressView6.progress = 0.66;
[self.viewaddSubview:progressView6];
_timer = [NSTimerscheduledTimerWithTimeInterval:0.05 target:self selector:@selector(decrementProgress:) userInfo:nil repeats:YES];
- (void)decrementProgress:(NSTimer *)timer {
_progressView7.progress = _progressView7.progress - 0.01;
if (_progressView7.progress == 0.0f) {
_progressView7.progress = 1.0;
}
}
Custom UI Controls for iOS and Mac OS X – Cocoa Controlsにはデザインのよい部品が多く登録されており、眺めているだけでも楽しい。