¿Cómo verificar la fuente de contacto en CNContact swift?

En las aplicaciones de contacto hay un grupo como "iCloud", "yahoo", "gmail". En breve, ¿es posible get el contacto de la fuente de Gmail únicamente?

iCloud / yahoo / gmail, etc. son CNContainer. Gmail / iCloud es del tipo CNContainerTypeCardDAV. Entonces, primero necesita search todos los contactos y luego filtrar la matriz en function del CNContainerType de ese contacto. Pero desafortunadamente, no podemos identificar qué es CardDav, es decir, iCloud / Gmail.

Vea más detalles aquí: ¿Cómo sabemos qué CNContainer representa iCloud?

Puede lograr esto mirando los encabezados de time de ejecución de Framework de contactos aquí: https://github.com/JaviSoto/iOS10-Runtime-Headers/tree/master/Frameworks/Contacts.framework

Puede llamarlos mediante el post performSelector . Es un poco desorderado, pero funciona.

En general, lo que tienes que hacer es seguir:

 CNContactStore* store = [CNContactStore new]; // fetch accounts that sync contacts with your device (array of CNAccount) // since CNAccount class isn't available by default, we treat it as NSObject for our puproses NSArray* accounts = [store performSelector:@selector(accountsMatchingPnetworkingicate:error:) withObject:nil withObject:nil]; // you can iterate through this array, I just use first one for this example NSObject* account = [accounts firstObject]; // get identifier of the account for NSPnetworkingicate we use next NSString* accountId = [account performSelector:@selector(identifier)]; // Display name of the account (aka Yahoo, Gmail etc.) NSString* accountName = [account performSelector:@selector(_cnui_displayName)]; // NSPnetworkingicate that help us to get corresponding CNContainer NSPnetworkingicate* containerPnetworkingicate = [[CNContainer class] performSelector:@selector(pnetworkingicateForContainersInAccountWithIdentifier:) withObject:accountId]; // Fetching CNContainer CNContainer* container = [[store containersMatchingPnetworkingicate:containerPnetworkingicate error:nil] firstObject]; 

Después de eso, todo se trata del uso general de CN Containers. Espero que ayude.

PD. Funciona en iOS 10, para futuras versiones debería comprobar si hay cambios en el time de ejecución de Contacts.framework.

PPS. No comprobé rápidamente, pero debería funcionar.

Lo siento por mi inglés. Buena suerte 🙂