ABAddressBook to CNContact App Transition

Estoy trabajando en una aplicación que está a punto de iniciar, pero que utiliza el marco ABAddressBook. Con la desaprobación de ABAddressBook en iOS9, ¿debo verificar la versión de iOS del usuario y usar ABAddressBook para usuarios anteriores a iOS9 y CNContact para usuarios de iOS9?

¿Cómo se manejan todos los demás? No he estado en una situación como esta antes.

También he estado tratando e investigando este problema, lo que he optado por hacer es como lo sugiere; verifica la versión de iOS de los usuarios haciendo algo como lo siguiente:

NSString *version = [[UIDevice currentDevice] systemVersion]; BOOL isVersion8 = [version hasPrefix:@"8."]; BOOL isVersion7 = [version hasPrefix:@"7."]; //... 

… continuando en function de las versiones que ha decidido admitir para su aplicación.

Luego hago un chequeo para usar el marco de la Libreta de direcciones para versiones anteriores a iOS 9 y el marco de Contactos para iOS 9 y posteriores.

 if(isVersion7 || isVersion8){ //Use AddressBook } else{ //Use Contacts } 

Esa es la mejor forma en que podría pensar para lidiar con este negocio de desaprobación …

Deprecado no significa eliminado. Simplemente establezca un enlace a ambos frameworks como opcional y comience a diseñar un flujo de trabajo de datos que pueda manejar ambos frameworks. También tenga en count que CNContact es nuevo y está lleno de errores.

Una vez que creas que tu aplicación se refactoriza y iOS evolucionó a 9.1, dale luz verde

Cómo saber si el sistema es compatible con la funcionalidad

1) Verifique si existe la class

 if(NSClassFromString(@"CNContact")) { // Do something } 

Para las classs débilmente enlazadas, es seguro enviar el post directamente a la class. Cabe destacar que esto funciona para frameworks que no están explícitamente vinculados como "Obligatorio". Para las classs que faltan, la expresión se evalúa como nula.

2)

 #ifned NSFoundationVersionNumber_iOS_9 #def NSFoundationVersionNumber_iOS_9 NUMBER #endif if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9) { // Use address book } else { // Use contact framework } 

Ejecute la aplicación en el simulador para encontrar la constante NSFoundationVersionNumber

 if #available(iOS 9, *) { // iOS 9 - CNContact } else { // iOS 8 - ABAddressBook } 

Esta es la forma correcta de verificar.