【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ユーザーであれば実感が湧く内容かと思います。
画面左上のグループがグループ(Group)と言われるものです。
iOSの仕様としては特定の連絡先AはグループA、グループBなど複数のグループにも所属出来るような仕様となっております。
また、iOS端末上では作成不可能なので
iCloud連携してグループを作成する必要性がございます。
(連絡先SSというアプリでiPhone内でグループ作成できるので、
非常にデバッグ時に重宝いたしました。必需品ですね。)
コンタクト(CNContact)とは
そのまんま連絡先の情報です。特に補足説明もありません。
CNContact型の変数に.lastNameなど参照すれば、
登録されている名前など取得可能です。
以上のことを総括して、図解するとこうなります。
連絡先はもちろんノングループ、未所属の連絡先も存在可能です。
関連記事について
この記事が気に入ったらサポートをしてみませんか?