iPhone Tips/Calendarの解析

出典: Fukudat.com

会社のグループウェア(Lotus Notes)のカレンダーと同期をとることを目指して,iPhone のカレンダーの解析を行う.

この解析結果に基づいてLotus Notesのカレンダーと同期する方法を作った.まだ不完全だが,とりあえず私としては満足.

1 データの所在

予定などを記録しているデータの所在を探す.

$ ssh -l root ipod find / -name "*Calendar*"
/Applications/DemoApp.app/Calendar.framework
...<snip>...
/private/var/mobile/Library/Calendar/Calendar.sqlitedb

sqlitedb に入っていることを確認.

Calendarアプリからいくつか確認用の予定データを入力してから,下のコマンドでファイルをゲット.file コマンドで SQLite 3.x database であることを確認.

$ scp root@ipod:/private/var/mobile/Library/Calendar/Calendar.sqlitedb .
$ file Calendar.sqlitedb
Calendar.sqlitedb: SQLite 3.x database

2 テーブル構造

sqlite3 でテーブルの構造を確認.

$ sqlite3 Calendar.sqlitedb
SQLite version 3.5.5
Enter ".help" for instructions
sqlite> .tables
Alarm                      OccurrenceCache
AlarmChanges               OccurrenceCacheDays
Calendar                   Recurrence
CalendarChanges            RecurrenceChanges
Event                      Task
EventChanges               TaskChanges
EventExceptionDate         _SqliteDatabaseProperties
sqlite> .schema Alarm
...<snip>...

解析結果をテーブル構造に示す.

要約すると

  • Event テーブルにイベントとして予定を格納
  • OccurrenceCache テーブルにイベントを発生日にグルーピングしてキャッシュ
  • OccurrenceCacheDays に1日ごとのイベントの数を数えておく
  • Alarm にアラームを鳴らす時間を設定

している.