B-棒6

あらゆる雑事の備忘録。

【swift4.0】「連絡先」からQRコードを作成する

これは何

連絡先データを利用して、QRコードを作成します。

データの取得

前回の続きです。具体的にdelegateメソッドに触れていきます。
「連絡先」アプリからデータの取得 - B-棒6

今回はこちらのメソッドを使用します。

func contactPicker(_ picker: CNContactPickerViewController,  didSelect contact: CNContact)

連絡先一覧から名前を選択した際に呼ばれます。
この辺を使います。

/// 姓
contact.familyName
/// 名
contact.givenName
/// 電話番号
contact.phoneNumbers
/// Eメールアドレス
contact.emailAddresses

名前プロパティいっぱいある...…
間違ってるかもしれません。
どうでもいいけど、givenNameってプロパティ名良い。

QRコードの規格

こちらを参考にしました。
キャリアごとに異なっていた頃もあるようですが、auキャリアのiPhoneAndroid端末で確認したところ、この方式のQRコードで登録できたので、今はこれで統一されてるのかな。 www.nttdocomo.co.jp

例えば、次のようなデータがある場合。 f:id:ago3:20180816231810p:plain

MECARD:N:あご さん;TEL:11-111-1111;TEL:22-222-2222;TEL:3-3333-3333;EMAIL:sample1@mail.com;EMAIL:sample2@main.com;EMAIL:sample3@mail.com;

名前はスペースを入れることで、姓と名を判別しているようでした。

QRコード生成

// String → Data変換
let data = text.data(using: .utf8)!
// QRコード生成のフィルター
// inputCorrectionLevelは、誤り訂正レベル。「L」「M」「H」のいずれか。
let qrFilter = CIFilter(name: "CIQRCodeGenerator", withInputParameters: ["inputMessage": data, "inputCorrectionLevel": "M"])!

// QRコード生成       
let sizeTransform = CGAffineTransform(scaleX: 10, y: 10)
let qrImage = qrFilter.outputImage!.transformed(by: sizeTransform)

// CIImageからUIImage生成        
let uiImage = UIImage(ciImage: qrImage)

できた

f:id:ago3:20180817000515p:plain

ふと気付いたのですが、連絡先アプリからの取得だと、自分の連絡先を取れないですね。

※2018-8/20追記
別途、取得手段は何かしらあると思うけど、まあそれはまた後ほど。
ムリでした(^ν^)
自分の項目登録するしかない。

それでは。