さて、相方さんのところにやってきた iPhone 4S ですが、なによりもまず電話帳の移行は最重要。
なのですが、公式サイトによると
どうやら旧携帯からサーバに電話帳をアップロードして、それをiPhoneで読み込む、という方法らしい。
いやいや、そもそも携帯壊れてますから!ってことで、先月SDカードにバックアップしていたデータからの移行を目指します。
あ、あらかじめ言っておくと、私の環境下ではこうやりましたっていうだけなので、携帯の機種によっては多少形式が違うかもしれませんし、保証はしませんので、あしからず。ちなみに、使用した元の携帯は830SHってやつ)
既存のアプリで読み込んでみる
SDカード(正確にはマイクロSDカード)をMacに差し込んで VCard形式の .vcf ファイルを探します。で、通常ならこれをMacのアドレスブックで読み込んでから同期すればよいのですが、既存の(僕の)アドレスブックと同期してごちゃごちゃしてもいやなので、直接iPhone内で読み込む方法を探します。
まあ、当然ながらそういう類いのアプリはいくつかでていて、有料のものも含めて、いくつか試してみました。
「いくつか」っていうのはつまりうまくいかなかったっていうことなんですが、そもそもファイルを読み込んだ瞬間に落ちるものとか、正常に読み込めているようにみえるものの、1つずつ手動で追加しなくちゃいけないものとかあって、いやいやそういうことじゃなくて一気にずばーっと読み込んで自動で登録して欲しいのですよ。登録数も10件とかそういう少数じゃないのですから。
結局自分でコードを書く
じゃ、結局どうするかっていうと、やっぱり自分でコード書かんといかんのかなあと思いながら、VCardのパーサ部分はさすがに面倒すぎるのでググって既存のオープンソースプロジェクトを探しました。
そしたらね、なんと、iOS5から標準のAPIでVCardの読み書きに対応しているじゃないですか!なんて便利!というわけで早速使ってみました。
ただ、やっぱりそのままの .vcf ファイルを読み込んでも1件も認識されず、うまくいきませんでした。(上記のファイルを読み込んだらすぐ落ちるアプリもこれが原因だったのかもしれません)
というのも、その .vcf ファイルはこんな感じになっていまして。
コンソールにでた警告をみるかぎりでは↓で、1つの要素中に改行を含んでいるのがダメっぽい。
で、これを削除すると、とりあえず正常に認識できたのですが、まだまだゴミが載っています。
ここまでくると、一通りアドレス帳に読み込んで使える物にはなるのですが、なぜか読み仮名が反映されていません。くわしくはわかりませんが、どうやらiOSはVCardのv3に対応しているっぽく(よく見たらこの .vcf ファイルはv2.1って書いてますね)て、そのへんの兼ね合いなのかなという感じ。
この SOUND;X-IRMC-N; の部分を X-PHONETIC-LAST-NAME; や X-PHONETIC-FIRST-NAME; で置き換えるとうまくいきました。
せっかくなので、サンプルがてらということで使用したプロジェクトを公開しておきます。
上記テキスト整形の部分は必要に応じて別途行うことを前提としています。ほとんど、単純なテキスト置換でできるので、それほど大変じゃないとは思いますが。
で、もちろんですが、自己責任でお願いします。(下手するとアドレス帳が消えるかもしれないですしね)
さてさて、これで無事に電話帳の移行ができました。めでたしめでたし。