自分のことではなく、iPhone(iOS)のCalDAV(カレンダー)のデータ取得のことである。

数日前から、寝る前にPCで設定した予定(イベント)が、起きてもiPhoneのカレンダーに反映されていない(開始時刻になっても通知が出ていなかった)ことに気付き、原因や対処方法を見つけようと格闘して来たのだが、未だに良く分かっていない。

現象

  • データの取得方法が「フェッチ」なのにも関わらず、数時間前にiPhone以外(PC)で設定した予定(イベント)が、iPhoneのカレンダーに反映されていないことがある。
  • 設定後、iPhoneのカレンダーアプリを開けば(起動すれば)、問題は起こらない(反映される)。

内部動作の推測

  • iOSのCalDAVクライアントは、設定されたフェッチ周期を無視して、自分の都合でサーバからデータを取得する(例: 設定は30分なのに、 実際には30分~2時間。大抵、段々長くなる)。なお、しばらくフェッチがなかった後にカレンダーアプリを開けば、その時にフェッチされる。
  • カレンダーアプリのバックグラウンド更新間隔(起床間隔)は長く(30分~1時間?)、フェッチされたデータは、すぐにはカレンダーアプリに反映されない(カレンダーアプリを開けば、即座に反映される)。

※この内部動作(推測)を見ていると、「どーせ誰も使ってないんだから、少しくらい(フェッチを)さぼってもいいじゃん。気が向いたらやるからさあ。アプリだって寝てるしさ。」というiOSのつぶやきが聞こえて来る。。。

その他に分かったこと

  • 無効化しているかフェッチ間隔が「手動」のCalDAVアカウントがあるサーバの他のアカウントからも、フェッチしない。: 最初の問題の原因だった。
  • iOSの標準カレンダーアプリが使用するカレンダーをなしにすると、別のカレンダーアプリを動かしていてもフェッチしない。
  • カレンダーアプリがデータを更新しようとしないと、フェッチしないようだ。
  • 標準カレンダーアプリは、(長時間)スリープ中にフェッチしなかったり、フェッチ周期が伸びたりする。

試した設定1

  • 同じCalDAVサーバのすべてのアカウントを「フェッチ」にする。
  • 標準カレンダーアプリに加えて、Fantastical 2をバックグラウンド更新ありで動かす。
  • 標準カレンダーアプリの使用するカレンダーを、登録しているすべてのCalDAVのカレンダーにする。
  • 標準カレンダーアプリではすべてのカレンダーの通知が出てしまうので、通知はoffにし、Fantastical 2で通知を出す。

iOSでは、OSがなまじっかCalDAVに対応しているので、CalDAV対応のカレンダーアプリは(調べた限り)なく、また、標準カレンダーアプリがOSから独立していないために、この問題をちゃんと解決するのはとても難しそうだ。上の設定は4時間程度うまく働いているが、明日の朝どうなっているか、心配である。

一晩動かしてみたら、フェッチ周期はほぼ30分以内となっていて、信じられないくらいちゃんとフェッチしていた。が、消費電力が多目な感じだった。標準アプリと並行してFantastical 2が動作しているからかも知れない。もう少しチューニングしたい。(12/28 8:24)

なお、Googleカレンダーに対応しているアプリはあるので、一旦、Googleを経由するといいのかも知れない。が、Google依存を止めるためにCalDAVを使っているので、僕にとっては本末転倒である。

PS. 以前使っていたiPhone 4Sでは起こっていなかったので、近頃のマルチタスク対応のiOSの問題なのかも知れない。

(12/28 3:46, 12/29 6:17 一部修正, 12/28 8:24,8:35 加筆, 12/29 14:22 一部修正)

  •   0
  •   1

コメントを書く

名前    

メール 

URL