質問: CNGroup.identifier中は普通、 abcdefg1-abc2-abc3-abc4-abcdefg12345 となっているはずが、何がしらの条件が重なると、 abcdefg1-abc2-abc3-abc4-abcdefg12345:ABGroup: と余計なものが付いてきます。 この「何がしらの条件」を特定しきれていませんがこれはバグでしょうか? ご回答よろしくお願い致します。
回答: 試行回数が少ない&ドキュメントには記載がないので憶測を含みますが、`:ABGroup`の suffix はローカルに作成されたグループのときに付与されるのかと思います。 説明 == Contacts framework の Containers and Groups の図を見ていただくと分かりやすいのですが、連絡帳から取得できる `CNContact` のデータソース(=**アカウント**)は複数ありえます。 > > A user may have contacts in their device’s local account and/or server accounts configured to sync contacts. Each account has at least one container of contacts. A contact can be in only one container. > > > **私訳:** ユーザーはデバイスローカル、同期を設定したサーバーアカウントのいずれか、および複数の連絡帳を持つことができます。各アカウントは少なくとも一つの **コンテナ** を持ちます。連絡帳はひとつのコンテナの場合もあります。 > > > ローカルデバイス、iCloud、Gmail、Facebook などなど端末に紐付けた様々なデータの集まりが連絡帳データです。 アカウントはひとつ以上の **`CNContainer`** と呼ばれる集まりを持っています。 > > A group is a set of contacts within a container. Not all accounts support groups and some accounts support subgroups. > > > **私訳:** **グループ** はコンテナ内の連絡帳のセットです。すべてのアカウントがグループをサポートしておらず、またいくつかのアカウントはサブグループをサポートしています。 > > > **`CNGroup`** とは、この「 `CNContainer` 内部での連絡帳の集合」を表しています。 このため、 * グループの名前(`name`) * グループの識別子(`identifier`) * 保存先のコンテナ(`CNContainer`の`identifier`) の3つの情報を持っているのですが、ローカルデータにグループを保存する場合には、データソースもコンテナもないので、`:ABGroup`の suffix で区別しているのだと思われます。 ローカルへの保存 ``` let saveRequest = CNSaveRequest() let group = CNMutableGroup() group.name = "test group" saveRequest.add(group, toContainerWithIdentifier: nil) try! self.store.execute(saveRequest) ``` このように、`saveRequest.add(_,toContainerWithIdentifier:)` に `nil` を指定したケースではローカル保存となり、`:ABGroup` suffix が付与されます。 サーバーアカウントへの保存 外部から連携されたグループ情報の読み込み時や、 ``` let contact = /* グループに含めたい、外部から連携されているコンタクト */ let container = try self.store.containers(matching: CNContainer.predicateForContainerOfContact(withIdentifier: contact.identifier)) let containerIdentifier = container.identifier ``` ローカルデータ以外の `CNContact` から、`CNContainer` の `identifier` を取得し、`toContainerWithIdentifier:` に渡してグループを作成した場合には、`:ABGroup` suffix は付与されませんでした。