Cómo compartir datos de llavero entre aplicaciones de iOS

Estoy describiendo un problema por el cual me tomó bastante tiempo aprender la respuesta.

El ejemplo de ” GenericKeychain ” es un buen comienzo para proporcionar un contenedor para compartir datos de llavero entre las aplicaciones cuando se utiliza el grupo de acceso en el init.

Sin embargo, la implementación de esto en mi aplicación arrojó un código de error oscuro (que tardó una eternidad en localizar) -25243, lo que significa: Sin control de acceso.

Ejecuté la aplicación de ejemplo de Apple (GenericKeychain) en mi iPad solo para obtener el mismo error. ¿Huh?

¿La documentación de Apple no cumple con lo necesario para lograr esto?

Después de algunas (muchas) búsquedas en toda la web, encontré la respuesta. El grupo de acceso que utiliza al construir su clase KeychainItemWrapper también debe especificarse en cada uno de los archivos de Entitlements.plist de su aplicación en la sección “keychain-access-groups”.

Parece casi obvio ahora que veo ” keychain-access-groups “. Sin embargo, no tenía ni idea de siquiera mirar allí. Espero que esto ayude a otros.

En realidad, no es difícil de hacer. Por favor sigue los pasos.

Aplicación 1:

  1. Abre las capacidades de destino de tu aplicación y habilita el intercambio de KeyChain.
  2. Agrega un identificador. (por ejemplo: com.example.sharedaccess)
  3. Agregue ” UICKeyChainStore ” a su proyecto.
  4. Asegúrese de tener una identificación de equipo agregada a su proyecto de App1.
  5. Agregue Security.framework a su proyecto de App1.
  6. Y agrega estos códigos a algún lugar que necesites.

    [UICKeyChainStore setString:@"someValue" forKey:@"someKey" service:@"someService"]; 

App2:

  • Abre las capacidades de destino de tu aplicación y habilita el intercambio de KeyChain.
  • Agrega un identificador. (por ejemplo: com.example.sharedaccess)
  • Agregue ” UICKeyChainStore ” a su proyecto.
  • Asegúrese de tener una identificación de equipo agregada a su proyecto de App2.
  • Agregue Security.framework a su proyecto de App2.
  • Y agrega estos códigos a algún lugar que necesites.

     NSString *string = [UICKeyChainStore stringForKey:@"someKey" service:@"someService"]; 
  • Tus TeamID deben ser iguales para ambos proyectos.

  • Intenté estos pasos en un dispositivo real de iPhone .
  • También probé estos pasos con el perfil de aprovisionamiento automático e iOs Development .
  • Los identificadores de paquetes de mis aplicaciones eran así: com.example.app1, com.example.app2.
    Intereting Posts