¿Cómo get la versión de la aplicación y crear una aplicación iOS PhoneGap?

Cuando está configurando un proyecto PhoneGap, ve lo siguiente:

CONSTRUIR

¿Cómo puedo get esa información dentro de la aplicación iOS? ¿Hay alguna forma de hacerlo con phonegap? ¿Qué hay de un complemento? Si no existe un complemento y hay una manera de hacerlo en una aplicación de iOS, se puede escribir un complemento. No pude encontrar ninguna respuesta.

¡Gracias!

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

Normalmente no me gusta simplemente dar todo el código para que las personas lo copien y peguen, pero siento que es una exception, ya que mucha gente que se sumerge en PhoneGap no sabe nada sobre Objective-C y su syntax de aspecto divertido ( como yo).

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

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

Antes he escrito en C, así que entiendo los encabezados, pero para aquellos de ustedes que no lo hacen, básicamente le dice al cumplidor qué search, así que simplemente le decimos el nombre de nuestro método e importamos el encabezado de Cordova:

 #import <Cordova/CDVPlugin.h> @interface MyCDVPlugin : CDVPlugin - (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; @end 

Esos parameters son los parameters estándar de complemento de Cordova (hasta donde sé). Nuestra function, como getter, en realidad no tiene ningún parámetro en un sentido, pero aún se requieren. (las options pueden ser realmente opcionales? No probé.)

En nuestro .m , todo lo que necesitamos es la function real, nuestro encabezado de 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, esto obtiene el número de versión y lo devuelve a su éxito de callback. (No pensé que este método realmente tiene un caso de error, por lo que no tiene una callback fallida).

Para completar, Xcode no actualiza automáticamente los files (lo que realmente tiene sentido), pero siempre me olvido. El hecho de que sus files estén en el directory de su proyecto no significa que estén en su proyecto. No te olvides de arrastrarlos a tu directory de complementos en tu proyecto:

Arrastrando archivos al proyecto.

Además, asegúrese de agregar su complemento a la input de Plugins Cordova.plist :

Edición de Cordova.plist

A partir de ahí, es bastante simple llamar al método desde JavaScript (asegúrese de usarlo después de que se 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! Simple, correcto … Espero que esto ayude a alguien más abrumado por el lado Obj-C de PhoneGap.

Como un pequeño truco para la sorprendente respuesta de @ CWSpear, también quería tomar la Build:

Agarra la compilation y la versión:

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

Lanza en un dictado:

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

Modifique 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 el objective C para devolverlo como dos arguments en la function de callback JS cordova.exec, de lo contrario, probablemente sea el más sencillo.

Steve

Existe un complemento ahora: http://plugins.cordova.io/#/package/uk.co.whiteoctober.cordova.appversion

Solo lo pruebo, funciona como un hechizo.

Si está utilizando jquery, podemos get la versión de la aplicación de esta function cordova.getAppVersion.getVersionNumber de cordova-plugin-app-version cordova plugin.

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

Pero si usamos angular entonces tenemos que poner el código de configuration de la versión dentro del $ timeout, entonces 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); });