¿Es posible tener una aplicación de iPhone de actualización automática?

StackOverflow https://stackoverflow.com/questions/3977265

  •  09-10-2019
  •  | 
  •  

Pregunta

¿Es posible tener una aplicación iPhone auto-actualización?

Creo que la respuesta es no, pero no estoy seguro.

Tengo una aplicación de base de datos impulsado que está en vigor un catálogo de productos. Quiero la base de datos para estar en el iPhone los usuarios por lo que el catálogo es rápido de usar. Sin embargo, periódicamente el contenido en los cambios de base de datos.

Me podría crear una notificación de inserción de avisar al usuario de que hay una actualización de base de datos lista, pero sería mejor si las actualizaciones de la aplicación en sí.

¿Fue útil?

Solución

Como Fluchtpunkt respondió, una aplicación para iOS puede descargar nuevos datos, simplemente no puede descargar el nuevo código. Muchas aplicaciones de iOS, tales como la multitud de clientes de Twitter, sobre todo la descarga de datos y visualización.

Cuando una aplicación va a meter en problemas si es su interfaz, no permite conocer la aplicación se está descargando datos. Una aplicación no debe utilizar hasta la adjudicación plan de datos de un iPhone sin que el usuario lo sepa. Dejando que el conocimiento del usuario puede variar de notificaciones explícitas incluyendo la opción de cancelar la descarga a hacer que el concepto de la aplicación que ver con la descarga de datos (por ejemplo, clientes de Twitter).

El usuario también debe ser notificado si la aplicación está compartiendo información con el servidor. La aplicación puede querer enviar esos datos a la descarga de datos específicos de forma selectiva. Por ejemplo, la aplicación podría utilizar la información de ubicación de adaptar la base de datos, la descarga de los elementos disponibles en la región del dispositivo pasa a ser. Un proceso de inicio de sesión puede ser suficiente notificación, si los datos son cuenta específica.

Otros consejos

, siempre y cuando no es necesario cambiar nada dentro de la aplicación de haz de esto es posible. Sólo tiene que guardar su contenido a los documentos Directorio.

Y, por supuesto, se le permite actualizar su propia base de datos.

No es posible cargar un archivo ejecutable en el iPhone, aunque vale la pena señalar que se puede cargar paquetes de recursos de forma dinámica. Si utiliza IB para la creación de sus puntos de vista, a continuación, puede crear un punto de vista totalmente nuevo, lo puso en la nube y cargarlo desde la aplicación. La única salvedad es que sólo se puede actualizar el diseño, pero no extender la funcionalidad.

Para cargar un XIB dinámicamente, utilizar el método initWithNibName,

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

y pasar en el haz cargado dinámicamente.

En el Mac, es posible tener los paquetes que contienen código ejecutable que puede ser cargado dinámicamente, pero no en el iPhone. Hay una configuración Plist llamado NSPrincipalClass para el Mac, pero por desgracia no para el iPhone todavía.

u puede hacerlo con la notificación de inserción, aparte de que u puede establecer un temporizador que descargar nuevos datos cada hora especificada, pero el problema es la aplicación tiene que estar abierto todo el time.in iOS 4 hay notificación local que puede enviar notificación de motivación a usuario, incluso cuando la aplicación está cerrada

Mi aplicación utiliza una base de datos SQLite y lo actualiza. Con cada inicio (o al despertar desde el modo suspendido) se conecta al servidor web y comprueba si hay una nueva base de datos. Para autenticar la base de datos, en primer lugar, sólo se descarga un archivo que contiene la suma MD5 de la base de datos en línea y calcula la suma MD5 de la base de datos en el teléfono. Sólo si las sumas son diferentes, se descargará la nueva base de datos. Esto tiene el efecto secundario interesante que mantiene el bajo tráfico.

El código de ejemplo para calculatimg la suma MD5:

#define CHUNK_SIZE 16384
#import <CommonCrypto/CommonDigest.h>

+ (NSString *)md5SumForFileAtPath:(NSString *)path {
    NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path];

    CC_MD5_CTX md5;
    CC_MD5_Init(&md5);

    BOOL done = NO;
    while(!done)
    {
        NSData* fileData = [handle readDataOfLength:CHUNK_SIZE];
        CC_MD5_Update(&md5, [fileData bytes], [fileData length]);
        if ([fileData length] == 0) done = YES;
    }
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(result, &md5);

    NSString *digest = [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
                    result[0], result[1], result[2], result[3],result[4], 
                    result[5], result[6], result[7], result[8], result[9], 
                    result[10], result[11], result[12], result[13],
                    result[14], result[15]
                    ];
    XLog("Checksum for file %@: %@", path, digest);
    return digest;  
}

Sin embargo, la descarga de la base de datos sólo es una buena solución si la base de datos no es grande. Además, me gzipped la base de datos y extraer después de la descarga.

#import <zlib.h>
+ (void)gunzipFileAtPath:(NSString *)zippedPath toPath:(NSString *)unzippedPath {
    gzFile file = gzopen([zippedPath UTF8String], "rb");
    FILE *dest = fopen([unzippedPath UTF8String], "w");
    unsigned char buffer[CHUNK_SIZE];
    int uncompressedLength;
    while (uncompressedLength = gzread(file, buffer, CHUNK_SIZE) ) {
        if(fwrite(buffer, 1, uncompressedLength, dest) != uncompressedLength || ferror(dest)) {
            NSLog(@"error writing data");
        }
    }
    fclose(dest);
    gzclose(file);
}

Es perfectamente bien para mostrar sólo el indicador de actividad de la red en la barra de estado y no utilizar una barra de progreso u otro indicador. Si la base de datos del teléfono es hasta la fecha, ni siquiera notificar al usuario, ya que es información innecesaria y sólo se distraerlo. Sin embargo, si hay una actualización, se desvanecen en una superposición de la barra de estado y mostrar la información durante unos segundos. A partir de las votaciones de mis usuarios, puedo decir que aprecian más o menos esta solución.

No se olvide que se agrega la criptografía mediante el cálculo de la suma MD5. Usted tiene que indicarlo a Apple cuando subir tu próxima actualización. Yo sólo tenía que responder a una pregunta más y decir que yo uso la codificación sólo para la autenticación. La aplicación fue aprobado sin ningún problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top