iPod touch Tips/Calendarの解析
出典: Fukudat
iPod touchをPDAとしても使いたい.
会社のグループウェア(Lotus Notes)のカレンダーと同期をとることを目指して,iPod touch のカレンダーアプリの解析を行う.
この解析結果に基づいてLotus Notesのカレンダーと同期する方法を作った.まだ不完全だが,とりあえず私としては満足.
[編集]
データの所在
予定などを記録しているデータの所在を探す.
$ 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
[編集]
テーブル構造
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 にアラームを鳴らす時間を設定
している.
[編集]
データベースの初期化
カレンダーデータベースを初期化するには,Media:iPod-touch-Calendar-ddl.sql を ddl.sql としてダウンロードして,以下を実行.
$ rm -f Calendar.sqlitedb # データベースファイルを消去 $ sqlite3 dbfile < ddl.sql # データベースを作りなおし
ddl.sql では,テーブルを定義し,_SqliteDatabaseProperties に必要な行を挿入している. この _SqliteDatabaseProperties には _UniqueIdentifier というキーがあるので,その値は個々の iPod で違うのかもしれない(1台しか持っていないので確かめようがない).その場合は,ddl.sql の中身を書き換える必要がある.
