2011-10-18 9 views
13

Me preguntaba si era posible utilizar iCloud para sincronizar el archivo de preferencias de una aplicación entre dispositivos. El archivo de preferencias del que estoy hablando es el archivo com.domain.appname.plist creado por NSUserDafults para almacenar las preferencias de la aplicación.¿Puedo utilizar iCloud para sincronizar el archivo plist NSUserDefaults

me gustaría tener la opción de mantener las preferencias de mi archivo app sincronizados entre dos dispositivos diferentes (un iPad y un iPhone, por ejemplo). ¿Es este un uso aceptable de la sincronización de iCloud? ¿O tendría que convertir el archivo plist en un tipo diferente de documento, almacenarlo en la nube y convertirlo de nuevo en el archivo de preferencias de la aplicación al recuperarlo?

gracias!

Respuesta

13

hay una biblioteca disponible para hacer esto con una línea de código

https://github.com/MugunthKumar/MKiCloudSync

+0

Eso es en realidad casi exactamente lo que hice. Usé ese código como un tutorial y luego terminé codificando mi propia implementación, que requiere que el usuario especifique que quiere sincronizar con iCloud en lugar de hacerlo de forma transparente. Sin embargo, estoy marcando esto como la respuesta correcta porque el código MKiCloudSync me ayudó a entender lo que tenía que hacer para implementar la sincronización de iCloud. – Jackson

+0

¿Hay una implementación rápida? – samir105

+1

Swift: https://github.com/ArtSabintsev/Zephyr – jamesk

11

Es posible sincronizar las preferencias entre dispositivos usando iCloud. Sin embargo, recomendaría no compartir el archivo plist entre dispositivos.

El NSUbiquitousKeyValueStore debe ser adecuado para lo que intentamos hacer. Es muy similar a NSUserDefaults, por lo que debería ser fácil de recoger.

Para usarlo, simplemente habilite el derecho com.apple.developer.ubiquity-kvstore-identifier en su archivo de derechos y simplemente duplique las preferencias que desea sincronizar en el ubicuo almacén de valores de claves. Una vez que esté en la kvstore ubicua, podrás verla desde la aplicación en otros dispositivos. Incluso puede sincronizar entre diferentes aplicaciones siempre que usen el mismo identificador.

También debe registrarse para la notificación NSUbiquitousKeyValueStoreDidChangeExternallyNotification para ver si hay nuevos cambios y actualizar los valoresUsuariosUsuarios estándar en el dispositivo en consecuencia.

+0

Eso suena muy útil y yo' Me alegra saber que hay una clase de iCloud para esto. Mi aplicación utiliza una lista personalizada de URL de la cámara web e información asociada (nombres, tasas de actualización) que se almacena en el plist. Me pregunto si los datos de esa aplicación serían demasiado para almacenarlos de esta manera (está limitado a 64 kb). Esto podría ser mejor para configuraciones más simples, como qué URL está seleccionada actualmente, etc., pero no para almacenar datos de la aplicación. Ya tengo una forma para que los usuarios importen y exporten datos por correo electrónico con un esquema de URL personalizado, por lo que estoy tratando de decidir si iCloud es la mejor manera de hacerlo. – Jackson

+2

El almacén de valores clave omnipresente es sin duda más adecuado para valores de configuración más pequeños. Si tiene datos que pueden superar los 64 kb, deberá usar la sincronización basada en documentos. Escribiría los datos de la aplicación en un archivo plist separado y lo movería al ubicuo contenedor de iCloud donde se sincronizaría con otros dispositivos. Yo diría que usar iCloud y hacer que la sincronización de datos entre dispositivos sea completamente transparente para sus usuarios es definitivamente una mejor experiencia. – kevinyc

16

similares a MKiCloudSync, también tengo una biblioteca en GitHub llama SDCloudDefaults. En lugar de sincronizar automáticamente, hay un nuevo objeto que utiliza en lugar de NSUserDefaults que se guarda tanto en iCloud como en NSUserDefaults. Esto significa que puede decidir qué elementos se almacenan localmente y cuáles se almacenan en la nube.

(me encontré MKiCloudSync después de haber puesto en práctica. Creo que es inteligente, pero no quiero sincronizar todo a iCloud así que mi solución todavía funciona mejor para mí.)

+0

Muchas gracias por agregar eso. Agregué una sentencia if a MKiCLoudSync al principio, pero luego no terminé usándola y terminé reescribiéndola para mis propios fines. Terminé sincronizando todo pero solo cuando el usuario lo dice (no automáticamente en segundo plano). – Jackson

+0

gracias, exactamente lo que estaba buscando – davis

Cuestiones relacionadas