2017年1月29日日曜日

Watch Connectivityがうまく動作してくれなかった話

iPhone と Apple Watch のデータ送受信で使う、WatchConnectivity
その中の通信方法である、updateApplicationContext(_:) がうまく動かなくてしばらくハマった。

sendMessage(_:replyHandler:errorHandler:) は正常に動作するので、activate() のし忘れということも無い状況。
処理を行うタイミングを色々変えてもダメ。

いろいろ探ってみてわかった原因は...

送信内容が、前回送ったものと同じの時、送信されない

ということ。
(sendMessageは、同じ内容でも送信される)

状況をもっと正確に言うと、
アプリをインストール後、1回目の送受信はうまくいく。
だが、2回目以降で、送信内容が同じの場合、送受信が全くされない。
違う内容を送信すると、送受信できる。

「前回と同じ内容なんだがから、送受信しなくてもいいんじゃない?」 という発想の仕様なのだろうか。
だが、Apple Watchのアプリを再インストールした時など、送信先の状況が変わっている可能性だってあるのに...!

以前(watchOS2? XCode7?)は、同じデータ内容でも送受信できてた気がするのだが、気のせいだろうか...?


• • •

2017年1月23日月曜日

watchOS3.0 Complicationの更新方法

Apple WatchのWatch Faceに表示できる、Complication(コンプリケーション)。
ここでとても大事になってくるのが、どれくらいの頻度で更新できるのか? です。
これらは、watchOS3になって更新方法がガラっと変わりました。

watchOS 2.0


更新回数制限は明記されていません。
実際に試してみると1時間に2回まで。3回以上だと制限を超える感じ。

watchOS 3.0

watchOS 2.0のgetNextRequestedUpdateDate(handler:) は廃止され、以下の仕組みに変わりました。


iPhone のコードから更新する場合


iPhoneから更新する場合は、1日に50回まで利用可能です。
残り回数も取得できるので計画的な利用ができるようになりました。
transfer... をCallすると、そこそこ速いタイミングで更新されます。


Apple Watchのコードから更新する場合

Apple Watch上のアプリをBackgroundでも動作させるには、Workout向けアプリなど、種類が限られています。
Backgroundで動作できないアプリの場合は、時間を指定してアプリを起こす必要があります。


更新回数制限については、明記されていません。

ドキュメントを引用すると、

Background app refresh tasks are budgeted. In general, the system performs approximately one task per hour for each app in the dock (including the most recently used app). This budget is shared among all apps on the dock. The system performs multiple tasks an hour for each app with a complication on the active watch face. This budget is shared among all complications on the watch face. After you exhaust the budget, the system delays your requests until more time becomes available.

Background app Refresh タスクは予算化されています。
一般的に、システムはドック内の各アプリ(最近使用したアプリを含む)ごとに、1時間あたり約1つのタスクを実行します。
この予算はドックのすべてのアプリで共有されます。
システムは、Activeなコンプリケーションがある各アプリに対して、1時間に複数のタスクを実行します。
この予算はWatchFace上のすべてのコンプリケーションで共有されます。
予算が全て使い果たされた後、システムはより多くの時間が利用可能になるまで、更新要求を遅らせます。


1分後にBackground refreshを指定したところ、
5分後だったり、30分後だったり、1時間後だったり...と結構バラバラになりました。
だいたい10分程度ほどで更新ができているようにも見えますが、あまり多くの更新はやっぱりやめたほうがよさそうな。

...が、「予算を使い果たしたので今日はもう更新されない」というものではなく、1時間に1回は更新し続けられるのでまだ使える場面が増えたようにも思います。


通知から更新する場合

PKPushTypeComplication (iOS 9.0+)  を使って更新もできるようです。
(試せていませんが...)



• • •

2017年1月17日火曜日

プチアプリ第一弾: Smoking Logリリースしました

今年の目標の一つ、たくさんアプリを作ること。
その第一弾として、Smoking Log - 喫煙記録 をリリースしました!



これは、減煙するためのアプリ。
前回喫煙してからどれくらいの時間が経ったのか?をみつつ、続けて吸いすぎないように気をつける事ができるようになります。
Apple Watchアプリももちろんあるっ

登録は、+ ボタンを押すとカウントアップするだけ。(過去の入力はできない)
...というとーってもシンプル機能。
機能を多く欲しい方には向いてません。ごめんなさい。

このアプリは、Flask LLPではなく、個人アカウントからリリースしています。

こういうプチアプリは、気軽に個人アカウントでリリースして、これは伸びそう...となれば、機能や、洗練度を上げてFlaskにお引っ越しという方向もありかなー?とも目論見中。

この手の減煙アプリはすでにApp Storeに存在するのですが、使い勝手、デザイン、Apple Watchアプリの有無などを見ていくとコレ!と思うものがなくて作成に至った次第。
続けて記録していく系のアプリは、気に入ったものでないと続けられない...デスヨネ。

減煙のために作成したアプリですが、タバコっぽいモチーフはアプリアイコンぐらい。
なので、日ごとにカウントする とか ストップウォッチ とか別の用途に使えるかもです。
アプリ本体は無料なので、よければどーぞ!


• • •

2017年1月9日月曜日

2016年ふりかえり

明けました2017年!
2016年を振り返りつつ、今年を考えてみる。

Appleの課金系動き

iAd の終了

2016年6月末、iAdが終了した。
iAdとはiOS用の広告プラットフォームで、開発者はiAdを組み込んで広告を表示することにより収入を得ることができなくなった。

Search Ads 登場

Search Ads がUSストアに登場。
Search Ads は、App Storeの検索時にそのキーワードに沿った広告を出せる機能。
この仕組は、アプリ内広告よりはタップされる可能性はたしかに高いと想像できる。

自動継続課金のハードルが下がる

自動継続課金が、メディア系以外でも使えるようになった。
また、2年目からの利益は70%から80%に変更された。

放置アプリをApp Storeから掃除開始

AppStoreに放置されていて最新のレビューガイドラインに沿っていないアプリは削除されることになった。


これらの目的はいろいろあると思うが、AppleがApp Store上のアプリ品質を上げたいという意図があるのは確かと思う。
そして、アプリ内広告だけでは、継続的にアップデートできるような収入を得ることは難しいと判断したとも捉えられる。

アプリの売上だけで開発を続けていきたい私としては、考える事が多いところ。

Apple Watch

2016年秋にwatch OS3が登場。Glanceがなくなるという衝撃事件が発生。
Glance系のバグレポートをいくつか出していたが、ずっと未対応のままだったのはそういうことか。
代わりにDockが追加されたが、Life Cycleがなかなか難しい事になった。

ともあれ、iOSアプリを作成すると、Apple Watchアプリも対応したくなる。
これは、私がApple Watchを持っているからというのが大きいからだろう。
それと同時に、Todayウィジェット欲が消えていった。
Todayウィジェットで表示したかった機能は、Apple Watchアプリで欲しい機能とほぼ同じことが多いからだ。
この感覚は、Watchを持っていない人とズレてしまうので気をつけなければいけない。

Apple Watch Series 2 の発売後、Watchユーザーは増えたような気がする。
だが、もう少し増えてほしかったとも思う。
スマートウォッチの分野の広がりはこれぐらいが限度なのだろうか。

2017年に向けて

Apple Watchアプリは、もうしばらくは取り組んでいくと思う。
Apple TVアプリは、なにかtvOSにテコ入れがあるまでは、多分手をつけない。
iPhoneアプリは、ちゃんと作る(!?) Flaskアプリの他に、個人アカウントであまり時間をかけずに作成したミニアプリを追加していきたい。
macOSのアプリにも手をつけてみたい。
健康に気をつけたい。

今年もよろしくおねがいします!


• • •