2012-07-18 21 views
14

Cuando está configurando un proyecto PhoneGap, verá los siguientes:¿Cómo obtener la versión de la aplicación y compilarla en una aplicación PhoneGap de iOS?

BUILD

¿Cómo puedo obtener esa información dentro de la aplicación para iOS? ¿Hay alguna manera de hacerlo con Phonegap? ¿Qué tal un plugin? Si no existe un complemento, y hay una forma de hacerlo en una aplicación de iOS, se puede escribir un complemento. Simplemente no he podido encontrar ninguna respuesta.

Gracias!

+0

¿Qué solución acabas de implementar? ¿Tuviste que crear tu propio plugin PhoneGap? Tengo el mismo problema que tu. –

+0

@FarhanAhmad Sé que han pasado unos meses, pero publiqué una respuesta más detallada con mi solución. – CWSpear

Respuesta

22

Quería ofrecer mi solución (basada en la solución de Adam Ware).

Normalmente no me gusta dar todo el código para que las personas copien y peguen, pero siento que esto es un poco una excepción ya que mucha gente que se zambulle en PhoneGap no sabe nada de Objective-C y es gracioso con una apariencia sintaxis (como yo).

Así que aquí es lo que pasé con el código y siguiendo la guía Adam señaló:

En mi carpeta de plugin proyecto en <project name>/Plugins/, creé MyCDVPlugin.m y MyCDVPlugin.h.

He escrito en C antes, así que entiendo los encabezados, pero para aquellos de ustedes que no lo hacen, básicamente le está diciendo al compilador qué buscar, así que simplemente le damos el nombre de nuestro método e importamos el de Cordova encabezado:

#import <Cordova/CDVPlugin.h> 

@interface MyCDVPlugin : CDVPlugin 

- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 

@end 

Esos parámetros son los parámetros de plugin estándar de Cordova (hasta donde yo sé). Nuestra función, como getter, en realidad no tiene ningún parámetro en un sentido, pero aún se requieren. (options en realidad podría ser opcional No he probado?.)

En nuestra .m, todo lo que necesitamos es la función real, nuestra cabeza desde antes, y CDVPluginResult.h:

#import "MyCDVPlugin.h" 
#import <Cordova/CDVPluginResult.h> 

@implementation MyCDVPlugin 

- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { 
    NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
    NSString* callbackId = [arguments objectAtIndex:0]; 

    CDVPluginResult* pluginResult = nil; 
    NSString* javaScript = nil; 

    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version]; 
    javaScript = [pluginResult toSuccessCallbackString:callbackId]; 

    [self writeJavascript:javaScript]; 
} 

@end 

Básicamente, se obtiene el número de versión y lo devuelve a su exitosa devolución de llamada. (No creo que este método tenga un caso fallido, por lo que no tiene una devolución de llamada fallida.)

Para mayor completitud, Xcode no actualiza automáticamente los archivos (lo que realmente tiene sentido), pero Siempre lo olvido. El hecho de que sus archivos estén en el directorio de su proyecto no significa que estén en su proyecto. No se olvide de arrastrarlos a su directorio de plugins en su proyecto:

Dragging files into the project.

También, asegúrese de añadir el plugin para su Cordova.plistPlugins entrada:

Editing Cordova.plist

A partir de ahí, es bastante sencillo llamar al método desde JavaScript (asegúrese de usarlo después de que se active deviceready):

// get and show the version number 
var gotVersionNumber = function(version) { 
    // cache value so we can use it later if we need it 
    Hub.Global.Version = version; 
    $('.version-number').text(version); 
}; 

// my plugin doesn't even have a failure callback, so we pass null. 
// 5th param (parameters to pass into our Obj-C method) is NOT 
// optional. must be at least empty array 
cordova.exec(gotVersionNumber, null, "MyCDVPlugin", "getVersionNumber", []); 

Eso es todo! Simple, ¿verdad ...? Espero que esto ayude a otra persona un poco abrumada por el lado Obj-C de PhoneGap.

+0

Esto es exactamente lo que estaba buscando (en ese momento). Terminé implementándolo de otra manera, así que realmente no puedo probar si esto funciona. ¡Estoy seguro de que sí! Pero gracias por compartir Podría ayudar a alguien más a tener este problema :) –

+0

@rjmunro ¡Gracias! Usé ese fragmento para nuestra versión de Android, también =). Buen pensamiento en Plugman allí. – CWSpear

+3

Después de encontrar esta respuesta, lo empaqué en un plugin compatible con Plugman y agregué soporte para Android basado en esto. El proyecto está aquí: github.com/whiteoctober/cordova-plugin-app-version (URL editada) – rjmunro

2

Como un pequeño pellizco a @ respuesta impresionante de CWSpear, también quería agarrar el Cuerpo:

Coge la construcción y la Versión:

NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
NSString* build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

echarlos en un diccionario:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:[NSString stringWithString:version] forKey:@"version"]; 
[dict setObject:[NSString stringWithString:build] forKey:@"build"]; 

Modificar el pluginResult para devolver el nuevo Dict:

pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:dict]; 

Cordova.exec:

cordova.exec(function(response){ 
     console.log(response.build); 
     console.log(response.version); 
    }, null, "MyCDVPlugin", "getVersionNumber", []); 

no sé lo suficiente sobre C objetivo de devolverlo como dos argumentos en la función de devolución de llamada cordova.exec JS, de lo contrario que probablemente sería el más sencillo. existe

Steve

0

Si está utilizando jQuery entonces podemos obtener la versión de la aplicación de esta función cordova.getAppVersion.getVersionNumber de Cordova-plug-in-app-plugin Córdoba.

cordova.getAppVersion.getVersionNumber().then(function (version) { 
    $('.version').text(version); 
}); 

Pero si usamos angular entonces tenemos que poner el código de ajuste de la versión dentro del tiempo de espera $ entonces todo funcionará bien.

angular.module('testApp', []) 
.controller('MainCtrl', function($scope, $rootScope, $timeout) { 
// Calling cordova plugin cordova-plugin-app-version 
    cordova.getAppVersion.getVersionNumber().then(function (version) { 
    $timeout(function() { 
      $rootScope.app = {}; 
      $rootScope.app.version = version; 
    }, 0); 
}); 
Cuestiones relacionadas