sincronizar pwa puedo porque files con como app iphone cocoa-touch cocoa data-synchronization

pwa - porque no puedo sincronizar mi iphone con itunes



Aplicación offline de iPhone con sincronización. (6)

Estoy estudiando la creación de una aplicación que funcione tan bien fuera de línea como en línea. Dado que la aplicación no puede comunicarse con el servidor mientras está fuera de línea, hay un cierto nivel de sincronización que debe tener lugar.

¿Cuáles son algunas buenas herramientas para leer y comenzar a pensar al planificar operaciones fuera de línea con sincronización para tu iPhone?

¿Qué herramientas tendría que crear yo mismo, en comparación con las herramientas que Apple ya proporciona para ayudar con este problema en particular?


Almacenaría toda la información que reúno sin conexión en una base de datos SQLite. Luego, a petición del usuario, puede sincronizar toda la información almacenada con un servidor mediante HTTP o un protocolo TCP / IP personalizado que pueda crear.

He estado utilizando este enfoque en las aplicaciones de Palm OS durante casi 10 años, y funcionan de manera muy efectiva.

Por lo que sé, la única "herramienta" que tendrá que lograr es este antiguo OBJETIVO-C con Cocoa Touch. Aunque podría usar algunas bibliotecas TCP / IP C ++ que le facilitarán la vida si decide implementar su propio protocolo.


Es probable que empujar aquí no sea una opción viable, ya que la cantidad de datos que puede enviar es minúscula, y básicamente vuelve a decirle a mi aplicación que haga una llamada al servidor. Utilizamos un modelo en línea / fuera de línea en Satchel. Cuando tenemos que comunicarnos con el servidor, agrupamos esa comunicación (una URL y posiblemente algunos datos POST) y los almacenamos en una base de datos. Si estamos en línea, lo retiramos, lo enviamos y, cuando recibimos una respuesta válida, eliminamos el registro de la base de datos. Si estamos desconectados, esas filas se acumulan, y la próxima vez que ESTAMOS en línea, se envían. Este no es un modelo viable en todas las situaciones, pero puede adaptarse a la mayoría.

En 3.0, tienes acceso a CoreData, que es una excelente herramienta de administración de datos. Aparte de eso, la familia NSURLXXX es tu amiga.


Hay una gran cantidad de aplicaciones en la tienda de aplicaciones que dependen tanto de los datos en línea como fuera de línea.

lo que realmente debería hacer es iniciar la aplicación, ejecute un subproceso en segundo plano (que se ejecuta de forma silenciosa para que su usuario nunca vea ningún retraso). este hilo descarga los últimos datos de su servidor y los inserta en su base de datos local (sqlite es la mejor opción)

asegúrese de implementar algún tipo de control de versiones de datos para que su aplicación solo descargue datos que realmente se hayan modificado desde la última descarga; de lo contrario, estaría descargando innecesariamente el conjunto de datos completo, que puede ser bastante grande (según los requisitos de su aplicación)

También asegúrese de probar la conectividad de Internet al hacer esto. Si no hay internet disponible, avise al usuario para asegurarse

De esta manera obtienes lo mejor de ambos mundos. Los usuarios que se encuentran lejos de Internet pueden seguir usando su aplicación con sus datos locales de sqlite

En iPhone OS 3.0, Apple ha introducido servicios push, donde puede simplemente "PULSAR" sus datos en lugar de hacer un "PULL"; sin embargo, esto no está disponible en el iPhone OS actual (2.xx)


He estado trabajando en una aplicación que maneja este comportamiento exacto durante los últimos 2 meses aproximadamente. Tiene un pequeño subconjunto de funciones que solo están en línea y un gran conjunto de funciones que están fuera de línea / en línea.

Estoy usando sqlite para el almacenamiento local como se sugiere aquí con una versión modificada de la biblioteca sqlitepersistentobjects. La versión base de sqlitepersistentobjects no es segura para subprocesos, así que tenga cuidado si la está utilizando. (revise objectiverecord in: objectivesync para una alternativa segura para subprocesos, pero esté preparado para profundizar en el código). Si está dispuesto a desarrollar para el 3.0 sdk, entonces los datos centrales son otra posibilidad para una biblioteca sqlite.

La arquitectura general es lo suficientemente simple. He modelado el almacenamiento local utilizando sqlite y la interacción remota utilizando recursos objetivos contra una aplicación de rieles y la API REST. Puede usar xml o json para la serialización de datos.

Cuando un objeto se modifica localmente, el cambio se guarda primero en el registro de la base de datos sqlite para ese objeto y luego se agrega a una cola que se serializa y almacena también en la base de datos sqlite local. (La cola puede ser procesada en cualquier momento)

Si hay una conexión disponible, cualquier cambio local en cola se deserializa y se agrega a una NSOperationQueue que luego los procesa en segundo plano.

Para hacer que todo esto funcione, he subclasificado NSOperation para que pueda admitir varios tipos de operaciones de colas remotas: crear, actualizar, eliminar utilizando esencialmente un recurso objetivo para realizar las solicitudes remotas.

Lo bueno de usar NSOperationQueue y NSOperation es que manejan el subprocesamiento de fondo por lo que recomiendo echar un vistazo a los documentos de Apple para esas clases y también a la guía de subprocesos de Apple.

Cuando se carga la aplicación, se realiza un poco de verificación remota y se procesa en segundo plano para desplegar los datos más recientes, aunque, para ser sincero, todavía estoy cambiando la forma en que se comporta un poco.

Ese es un resumen rápido de lo que he tenido que enfrentar hasta ahora ... espero que ayude un poco.


Me pregunto si ha considerado usar un marco de sincronización para administrar la sincronización. Si eso le interesa, puede echar un vistazo al proyecto de código abierto, el servicio de sincronización de OpenMobster. Puedes hacer las siguientes operaciones de sincronización

  • de dos vías
  • cliente unidireccional
  • dispositivo unidireccional
  • arrancar

Además, todas las modificaciones se rastrean y sincronizan automáticamente con la nube. Puede tener su aplicación fuera de línea cuando la conexión de red está inactiva. Rastreará cualquier cambio y lo sincronizará automáticamente en segundo plano con la nube cuando se devuelva la conexión. También proporciona sincronización como iCloud en múltiples dispositivos

Además, las modificaciones en la nube se sincronizan mediante notificaciones push, por lo que los datos siempre están actualizados, incluso si se almacenan localmente.

Aquí hay un enlace al proyecto de código abierto: http://openmobster.googlecode.com

Aquí hay un enlace a iPhone App Sync: http://code.google.com/p/openmobster/wiki/iPhoneSyncApp


http://blog.webscale.co.in/?p=159 Este artículo enumera los enfoques para manejar la sincronización de datos fuera de línea / en línea. Puede ayudarte si quieres crear tu propio marco.