【Objective-C】Contacts.framework(iOS連絡先取得) コンテナ、グループ、コンタクトの関係性や連絡先アプリの仕様について【Xcode11 iOS13対応】

こういう人に向けて発信しています。
・iOS13で連絡先が正しく取得できなくなった人
・端末内の連絡先を取得して活用したい人
・Objective-C中級者

Contacts.frameworkとはそもそも何か。

Xcodeでインストール出来る公式フレームワークで、
iPhone/iPadの端末内の連絡先を取り扱う為に必要な
フレームワークとなります。

どんな事が出来るのか

・連絡先を取得して表示する。
・連絡先の内容を変更する。
・連絡先を送信する。 などなど

今回は連絡先を取得するという機能について、
詳しく説明していきます。

連絡先の内容を変更する事については難しい事ではありません。
連絡先クラスのプロパティを参照して書き換えるだけです。

iOS標準 連絡先アプリの仕様について

下記の概念がiOSで標準で用意されている連絡先アプリには存在します。

・コンテナ
・グループ
・コンタクト(最小単位の連絡先1件データ)

コンテナ(CNContainer)とは

typedef NS_ENUM(NSInteger, CNContainerType){
       CNContainerTypeUnassigned = 0,
       CNContainerTypeLocal,      //デフォルトのローカルのコンテナ
       CNContainerTypeExchange,  //EXCHANGEなどの外部の連絡先格納コンテナ
       CNContainerTypeCardDAV   //iCloudなどのCardDAVサーバー(iCloudという認識でok)
   } NS_ENUM_AVAILABLE(10_11, 9_0);
    */

CNContainerTypeLocalを参照しておけば、
iOS標準の連絡先が格納されている所を参照できるという認識でOKです。

発展して、iCloud連絡先を取得したい場合はCardDAVを活用しましょう。
コンテナが一番大きい箱になりますね。

補足説明:EXCHANGE連絡先について
(2019/10/27追記)

Exchangeで連携されたグループに関してはコンテナ扱いで取得します。
たとえばExchangeで5件グループがあって「1,2,3,4,5」とあった場合、
デフォルトコンテナと5件のコンテナが取得できます。
そしてグループ名はcontainer.nameで取得できます。

グループ(CNGroup)とは

ここらへんからはiOSユーザーであれば実感が湧く内容かと思います。



画像1

画面左上のグループがグループ(Group)と言われるものです。
iOSの仕様としては特定の連絡先AはグループA、グループBなど複数のグループにも所属出来るような仕様となっております。

また、iOS端末上では作成不可能なので
iCloud連携してグループを作成する必要性がございます。

(連絡先SSというアプリでiPhone内でグループ作成できるので、
非常にデバッグ時に重宝いたしました。必需品ですね。)

コンタクト(CNContact)とは

そのまんま連絡先の情報です。特に補足説明もありません。
CNContact型の変数に.lastNameなど参照すれば、
登録されている名前など取得可能です。

以上のことを総括して、図解するとこうなります。

無題のプレゼンテーション

連絡先はもちろんノングループ、未所属の連絡先も存在可能です。

関連記事について




この記事が気に入ったらサポートをしてみませんか?