Comment get la version de l'application et build dans une application iOS PhoneGap?

Lorsque vous configurez un projet PhoneGap, vous voyez ce qui suit:

CONSTRUIRE

Comment puis-je get cette information dans l'application iOS? Existe-t-il un moyen de le faire avec phonegap? Qu'en est-il d'un plugin? Si aucun plugin n'existe, et qu'il existe un moyen de le faire dans une application iOS, un plugin peut être écrit. Je n'ai juste pas été capable de find des réponses.

Merci!

Je voulais offrir ma solution (basée sur la solution d'Adam Ware).

Normalement, je n'aime pas donner tout le code aux gens pour copyr et coller, mais j'ai l'printing que c'est un peu une exception car beaucoup de gens qui plongent dans PhoneGap ne connaissent rien à Objective-C et sa syntaxe amusante ( comme moi).

Alors, voici ce que j'ai traversé en utilisant le code et en suivant le guide que Adam a pointé:

Dans mon dossier de plugin de projet sur <project name>/Plugins/ , j'ai créé MyCDVPlugin.m et MyCDVPlugin.h .

J'ai déjà écrit en C, donc je comprends les en-têtes, mais pour ceux d'entre vous qui ne le font pas, cela dit au complicateur ce qu'il faut chercher, donc nous lui indiquons simplement le nom de notre méthode et importons l'en-tête de Cordova:

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

Ces parameters sont les parameters standard du plugin Cordova (pour autant que je sache). Notre fonction, en tant que getter, n'a pas de parameters dans un sens, mais ceux-ci sont toujours requirejs. (les options peuvent être facultatives? Je n'ai pas testé.)

Dans notre .m , tout ce dont nous avons besoin est la fonction actuelle, notre en-tête d'avant, et CDVPluginResult.h :

 #import "MyCDVPlugin.h" #import <Cordova/CDVPluginResult.h> @implementation MyCDVPlugin - (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { NSSsortingng* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; NSSsortingng* callbackId = [arguments objectAtIndex:0]; CDVPluginResult* pluginResult = nil; NSSsortingng* javaScript = nil; pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsSsortingng:version]; javaScript = [pluginResult toSuccessCallbackSsortingng:callbackId]; [self writeJavascript:javaScript]; } @end 

Fondamentalement, cela obtient le numéro de version et le renvoie à votre callback de succès. (Je ne pense pas que cette méthode ait vraiment un cas d'échec, donc elle n'a pas de callback d'échec.)

Par souci d'exhaustivité, Xcode ne met pas automatiquement à jour les files (ce qui a du sens), mais j'oublie toujours. Ce n'est pas parce que vos files se trouvent dans votre directory de projet qu'ils sont dans votre projet. N'oubliez pas de les faire glisser dans votre directory Plugins dans votre projet:

Glisser des fichiers dans le projet.

Aussi, assurez-vous d'append votre plugin à votre input Plugins Cordova.plist :

Modification de Cordova.plist

De là, il est assez simple d'appeler la méthode à partir de JavaScript (assurez-vous de l'utiliser après le triggersment de 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", []); 

C'est tout! Simple, vrai …? J'espère que cela aidera quelqu'un d'autre un peu dépassé par le côté Obj-C de PhoneGap.

Comme un petit tweak à la réponse géniale de @ CWSpear, je voulais aussi saisir le Build:

Prenez la construction et la version:

 NSSsortingng* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionSsortingng"]; NSSsortingng* build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

Jetez-les dans un Dict:

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

Modifiez le pluginResult pour returnner le nouveau 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", []); 

Je ne connais pas assez l'objective C pour le renvoyer comme deux arguments dans la fonction de callback de cordova.exec de JS, sinon ce serait probablement le plus simple.

Steve

Un plugin existe maintenant: http://plugins.cordova.io/#/package/uk.co.whiteoctober.cordova.appversion

Je viens de le tester, fonctionne comme un charme.

Si vous utilisez jquery, nous pouvons get la version de l'application à partir de cette fonction cordova.getAppVersion.getVersionNumber du plugin cordova -plugin-app-version .

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

Mais si nous utilisons angular alors nous devons mettre le code de réglage de la version à l'intérieur du $ timeout, alors cela fonctionnera 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); });