11月 032013
 

OS X Mavericks にしてしばらく使っていたのですが、 iTunes は iOS デバイスとカレンダー同期してくれなくなったんですね。iTunes の[概要]タブから「スケジュール」の項目が消えています。
と、いうことは iCal のスケジュールの情報は iCloud 経由で同期しろ。ってことなんですね。いやー。Apple も google みたいなことしてくれますなぁX-(。

このブログにも以前に書いているのですが、スケジュールは google に預けたくないし、当然 Apple にも預けたくない。そーいう人にとって、今回の Mavericks の iTunes の仕様変更は改悪ですね。困った困った。

さて、ではどうするか? と言えば、僕は自分で CalDAV サーバを持っているのでそれを利用することにしました。

CalDAV サーバを Mavericks の iCal と iPhone4・iPhone5、あと Thunderbird の Lightning からアクセスして参照・更新すれば一応は OK な状態になりますね。

今までは家の中専用で利用していた CalDAV サーバを SSL 化してグローバルからでもアクセス可能な状態にします。そして、 iCal・iPhone4・iPhone5・Lightning から接続テストをしてみます。が、 iOS もかぁなりクセがありますね。けっこう orz 的な事態になったのであります・・。orz。

今回はこの辺りの顛末についてちょっと書いてみます。

1. CalDAV の SSL 化
CalDAV 自体のインストールと設定については以前のエントリに書いたのでそっちを参照してください。あ。一点だけ。
古いバージョンの davical-0.9.9.4 から davical-1.1.1 にバージョンアップするとデータベースの互換性がなくなるようで、サクっと portmaster とか走らせると痛い目に遭います。
iCal とか Lightning で ics 形式のバックアップを取ってから davical とか postgresql などを一旦消してバージョンアップして、1.1.1 で動く状態にしてからバックアップした ics ファイルをインポートすると今度はサクっと動くようになります。 postgresql にデータが残っている状態でバージョンアップして『それを潰さないように』などと思っているとダメっぽいです。

さて本題。 CalDAV サーバと言っても基本的には httpd を httpsd とするだけなので、あと、自分しか利用しないのでヲレヲレ証明書で行きます。 FreeBSD 的には以下のコマンドを打つだけで簡単に SSL 化できます。

# cd /etc/ssl
# openssl genrsa -out ./server.key 2048
# openssl req -new -x509 -days 3650 -key server.key -out server.crt
# openssl x509 -in server.crt -out server.der -outform DER
# cd /usr/local/etc/apache22/
# ln -s /etc/ssl/server.crt
# ln -s /etc/ssl/server.der
# ln -s /etc/ssl/server.key

 
server.crt を作成する場合に色々聞かれてきますので値を入力します。server.der はブラウザにインストールするといちいち「このサイトは怪しいぜぃ。」って聞かれなくなります。

このオペレーションだと apache22 の SSL 化の設定は非常にラクチンですね。 httpd-ssl.conf は以下の部分だけ直すと作業は終了です。

#   General setup for the virtual host
DocumentRoot "/usr/local/www/davical/htdocs"
ServerName ical.running-dog.net:443
ServerAdmin takachan@running-dog.net
ErrorLog "/var/log/httpd-ssl-error.log"
TransferLog "/var/log/httpd-ssl-access.log"

 
あとは apache22 を再起動して作業は無事完了。各クライアントからアクセスして動作確認します。基本的には以下の URL で ics ファイルが取得可能な状態となるはずです。

https://ical.running-dog.net/caldav.php/takachan/home/

ここ、重要ですからねー。覚えといてくださいよー;-)。

 
2. iCal の設定
iCal は OS X に付属のカレンダーアプリです。「環境設定」→[アカウント]から”+”で追加します。 SSL で追加しましょう;-)。
[サーバ設定]タブでは CalDAV サーバの FQDN と URL を書きます。サーバパスは “/caldav.php/takachan/” を指定します。 CalDAV のコントロールパネルで他にカレンダーを設定した時に /home/ の部分が任意のパスとして生成され iCal 上に表示されるようになります。

 
3. iOS デバイスの設定
僕は手元に iPhone5 があって、それは既に iOS7 にしているのですが、このカレンダーアプリはどえりゃーやっかいでした・・。 Maverickes の iTunes も iOS7 もひでーことだぁ。と、知ることになるんですけども。

iOS の場合はまず、設定アプリから「メール/連絡先/カレンダー」を選択し「アカウントを追加」→「その他」→「CalDAVアカウントの追加」を選択し情報を入力します。
「サーバ」は FQDN のみで OK。「詳細設定」で色々指定してあげます。 SSL を有効にしてから「アカウントURL」に上記の URL を指定します。以上で設定は完了。次にカレンダーアプリを開き、しばらくすると新しく登録した CalDAV のアカウントが見えるようになります。うふふ。これでカレンダーの同期が完了だぁ;-)。

が、しかし・・。落とし穴はここからでした・・。orz iOS のカレンダーアプリは default のカレンダーが”カレンダー”として自動的に登録されるんですね。上に書いた URL 覚えていますか? CalDAV の default のカレンダーのパスなんですけども。もう一度書きますね。

https://ical.running-dog.net/caldav.php/takachan/home/

しかし、iOS のカレンダーアプリはここを参照してくれなくて、勝手に EUI-64 でパスを生成してそこに”カレンダー”ってタイトル付けて、そこにしかアクセスできないんですね・・。URL 的にはこんな感じ。

https://ical.running-dog.net/caldav.php/takachan/DE1A314-92BE-4518-A56E-B7138819A30B/

僕的には iOS のカレンダーアプリも /caldav.php/takachan/home/ を参照して欲しいのだけどここは見てくれない。で、新規にカレンダーを作成しようとするとまたまたサーバ上に EUI-64 のパスを作ってそこにタイトルを勝手に付ける仕様になっています。

とりあえず iOS はここで一旦終わって、次に Lightning の話を先に書きます。

 
3. Thunderbird Lightning の設定
Lightning は昔から利用しているしここにも何回かエントリとして登場しました。

Lightning でカレンダーを利用する場合には default の URL である

https://ical.running-dog.net/caldav.php/takachan/home/

を記述すると無事にカレンダーが表示できるのですが、上の iOS デバイスのカレンダーアプリが”カレンダー”と認識している EUI-64 なパスにしかアクセスできないので、Lightning に指定したパスも変更してあげる必要があります。まぁ、http:// から https:// に変更する必要があるので、この際テマは一緒かー。みたいな気はするんですけどね。

 
ちなみに、Lightning の場合はパスを /caldav.php/takachan/ で指定するとその配下の全てのカレンダーを表示してくれます。
Mavericks の iCal のパスは無条件に /caldav.php/takachan/ になって、配下のカレンダー全てを表示してくれます。
iOS の場合は無条件で UEI-64 のパスを掘って”カレンダー”とラベルを付けてそこにしかアクセスできません。 iOS 上で新規にカレンダーを作成するとそれは閲覧・更新可能な状態となりますが、自分で作成したものしか見えずに他のアプリで作成したカレンダーは見えません。
そー考えると iOS のカレンダーアプリが一番ワガママですね。

 
と、いうことで iTunes が iOS デバイスと同期できなくなったというのが一番大きな問題点なので、そこを Apple に何とかしてもらわないとお話にならないですね。一応、「iTunesの意見/感想を送る」から『カレンダー同期復活してくれー。』とは送っておきましたけどね。

CalDAV 経由ではなく、もっとスマートに同期できる方法があったら教えて頂きたいものです。