Error al leer valores en CFPrefsPlistSource iOS 10
xcode ios10 (8)
Actualicé mi Xcode 8 a beta 2 hoy y estoy tratando de compartir datos entre App y Today Extension. Me enfrento con esta advertencia de registro:
2016-07-08 18: 00: 24.732472 ProjetctX [941: 42801] [Valores predeterminados del usuario] Error al leer los valores en CFPrefsPlistSource <0x1700f1280> (Dominio: group.xpto, Usuario: kCFPreferencesAnyUser, ByHost: Sí, Contenedor: (nulo)) : El uso de kCFPreferencesAnyUser con un contenedor solo está permitido para Contenedores del sistema, separándose de cfprefsd
¿Alguien puede ayudarme?
A continuación, le mostramos cómo usar NSUserDefaults con grupos de aplicaciones para pasar datos entre su aplicación principal y su extensión:
-
En su aplicación principal, seleccione su proyecto en el Navegador de proyectos.
-
Seleccione el objetivo principal de su aplicación y elija la pestaña Capacidades.
-
Cambie el interruptor Grupos de aplicaciones a ENCENDIDO. Esto se comunicará con el Portal del desarrollador para generar un conjunto de derechos.
-
Crea un nuevo contenedor. Según Apple, su ID de contenedor debe comenzar con "group", por lo que un nombre como "group.io.intrepid.myapp" es perfecto.
-
Seleccione su objetivo de extensión y repita el proceso de habilitar Grupos de aplicaciones. No cree un nuevo grupo de aplicaciones, simplemente seleccione el grupo que acaba de crear en el objetivo principal de la aplicación.
-
Al leer o escribir NSUserDefaults en su aplicación o en su extensión, no acceda a NSUserDefaults.standardUserDefaults (). En su lugar, use NSUserDefaults (suiteName: "group.io.intrepid.myapp"). Nota: El nombre de la suite es el nombre del contenedor del grupo de aplicaciones creado en el Paso 4.
¡Asegúrese de habilitar el grupo y usar la misma identificación de grupo para la sección de extensión y capacidad de la aplicación!
El crédito va a http://blog.intrepid.io/ios-app-extensions
Cambiar de
[[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxx"];
a
[[NSUserDefaults alloc] initWithSuiteName:@"nnnnnnnnnn.group.com.xxx.xxx"];
Donde
nnnnnnnnn
es el número de su equipo, el que utiliza para firmar su código.
Probado bajo Xcode 8 GM y iOS 10 GM, ¡y funcionó!
Compila con Xcode 8.1 Beta y verás la misma advertencia, pero también obtendrás el valor.
El SuiteName (postfix) no debe ser el ID del paquete principal.
Esta es en realidad una advertencia falsa que se introdujo en iOS 10 y macOS 10.12. (Fuente: https://twitter.com/Catfish_Man/status/784460565972332544 )
El consejo de anteponer su ID de equipo silenciará la advertencia, pero también creará un nuevo valor predeterminado de usuario vacío. Esto dará como resultado que los datos almacenados previamente sean ilegibles.
Por el momento, la solución es simplemente ignorarlo.
Además, el miembro del personal de Apple CFM en los foros :
El mensaje registrado es espurio a menos que esté haciendo cosas muy específicas que no creo que sean posibles sin usar funciones privadas (se agregó para detectar el mal uso de esas funciones, pero desafortunadamente también se detectó un caso de uso normal).
Estoy enfrentando este mismo problema cuando intento usar initWithSuiteName. Parece que esto es un error de Apple. La única solución / solución que encontré es restablecer todas las configuraciones del dispositivo. Vaya a Configuración -> General -> Restablecer -> Restablecer todas las configuraciones.
Esto no borra ningún contenido en el iPhone, solo borra todas las configuraciones. Después de restablecer la configuración, todo funcionó bien. Avísame si te ayuda también.
También tuve el mismo problema con mi aplicación macOS.
Resuelto por: ¡ Reinicia el dispositivo!
https://.com/a/39876271
si sufre este problema cuando intenta guardar datos en la aplicación de extensión utilizando
userDefault
, tal vez haya escrito este código:
[[NSUserDefaults standardUserDefaults] initWithSuiteName:@"group.xxx.com"];
Este código restablece default
userDefault
.
En realidad, el código correcto es:
[[NSUserDefaults alloc] initWithSuiteName:@"group.xxx.com"];