以前、VCFファイルをiPhone(iCloud)にインポートする方法を紹介しましたが、最近になって同じ手順でインポートしてみると失敗するようになっていました。今回、その問題について調べてみました。また、対策として簡易変換ツールも作りました!
VCFファイルをiCloudにインポートする方法
AndroidからiPhoneへアドレス帳を移行するような場合、VCFファイルをiPhone(iCloud)にインポートすることでできます。Google連絡先などから取り出したVCFファイルをiCloudにインポートする方法については、こちらの記事にまとめてあります。
iCloudへのインポートが失敗
VCFファイルのiCloudへのインポートが失敗
最近になって再度同じ手順で試してみましたが、なぜかiCloudへのインポートに失敗しました。念のため、Google連絡先からエクスポートするところからやり直してみましたが、やはり失敗します。
そのときのメッセージは以下の通りです。 以前は問題なくできていたので、何か仕様が変わったのでしょうか?
VCFファイルに大人数のデータが含まれていたので、とりあえず一人ずつのデータに分割してインポートを試してみました。それでもほとんどは失敗するのですが、まれにインポートが成功するデータがありました。成功する条件を絞り込んでいくと原因が見えてきました。
VCFファイルにFNフィールドがないとインポートに失敗するようです。
FNフィールド
FNというのは formatted name の略のようです。 名前の各要素が「;」で区切られて並んでいるNフィールドに対して、FNフィールドのほうはヒューマンフレンドリーな(人間に馴染みのある)形式になっています。
例:
N:Gump;Forrest FN:Forrest Gump
VCARD バージョン3.0の規約(RFC2426)を見てみると、以下のような記述を見つけました。
The VERSION, N and FN types MUST be specified in a vCard.
たしかにFNフィールドは必須になっているようです。
iCloudへのインポートに失敗しているVCFファイルは、古いAndroidから取り出したためかFNフィールドが含まれてないようです。
NからFNを作る
iCloudの仕様としてFNフィールドがないVCFファイルをインポートできないようなので、FNフィールドを追加するしかありません。
空っぽのFNフィールドを追加するだけでもいいかもしれませんが、同じく名前を表すNフィールドがあるので、それをもとに作ってしまえばよさそうです。では、Nフィールドのデータの並びはどうなっているのでしょう?
規約には以下の記載がありました。
The structured type value corresponds, in sequence, to the Family Name, Given Name, Additional Names, Honorific Prefixes, and Honorific Suffixes.
つまり、以下の順に並んでいるようです。
- 苗字
- 名前
- ミドルネーム/旧姓
- 敬称(前)
- 敬称(後)
とりあえず、欧米風に考えて、4.→ 2.→ 3.→ 1.→ 5.の順番に並び替えて連結してFNフィールを作ることにします。
変換ツール
上記のルールに従って、NからFNを生成するツールを作ってみました。
比較的単純なのでPythonのコードを公開するより、Webに埋め込んで使ってもらったほうがいい気がしたのでチャレンジしました。Webに埋め込むにはJavaScriptが良さそうだったのでまたググりながらコーディングしてみました。
そのツールがこちらで公開しているものです。
よかったら使ってみてください。
ちなみに、変換してFNフィールドを追加するよりもWebに埋め込んだり、色をつけたりする方法のほうが難しかったですね。。その内容も別途まとめたいと思います。
なお、らくらくスマートフォン3(F-06F)からiPhoneへアドレス帳を移行するための自作変換ツールはPython版ですが、こちらもFNを補完するように対応済みです。
まとめ
今回、以前は成功していたはずのVCFファイルのiCloudへのインポートが失敗するようになっていたため、その問題について調べてみました。原因はFNフィールドがなかったためのようです。その対策としてVCFファイルに自動でFNフィールド追加する簡易変換ツールも作りました。よかったら使ってみてください。
最後までお読みいただきありがとうございました!