2012-07-18 3 views
14

Quando si sta configurando un progetto di PhoneGap, si vede il seguente:Come ottenere la versione dell'applicazione e creare un'applicazione iOS PhoneGap?

BUILD

Come posso ottenere che le informazioni all'interno dell'applicazione iOS? C'è un modo per farlo con PhoneGap? Che dire di un plugin? Se nessun plugin esiste e c'è un modo per farlo in un'applicazione iOS, è possibile scrivere un plugin. Non sono stato in grado di trovare alcuna risposta.

Grazie!

+0

Quale soluzione hai finito per implementare? Hai dovuto creare il tuo plugin PhoneGap? Ho esattamente lo stesso problema di te. –

+0

@FarhanAhmad So che sono passati alcuni mesi, ma ho pubblicato una risposta più dettagliata con la mia soluzione. – CWSpear

risposta

22

Volevo offrire la mia soluzione (basata sulla soluzione di Adam Ware).

Normalmente non mi piace dare tutto il codice per le persone da copiare e incollare, ma ritengo che questa sia un'eccezione visto che molte persone che si immergono in PhoneGap non sanno nulla di Objective-C e del suo divertente sintassi di aspetto (come me).

Quindi, ecco quello che ho passato utilizzando il codice e seguendo la guida Adam ha sottolineato:

Nella mia cartella plugin di progetto a <project name>/Plugins/, ho creato MyCDVPlugin.m e MyCDVPlugin.h.

Ho scritto in C prima, quindi capisco le intestazioni, ma per quelli di voi che non lo fanno, è fondamentalmente dire al compilatore cosa cercare, quindi diciamo semplicemente il nome del nostro metodo e importiamo Cordova header:

#import <Cordova/CDVPlugin.h> 

@interface MyCDVPlugin : CDVPlugin 

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

@end 

Questi parametri sono i parametri standard del plug-in Cordova (per quanto ne so). La nostra funzione, in quanto getter, in realtà non ha alcun parametro, ma quelli sono ancora necessari. (options potrebbe in realtà essere opzionale non ho la prova?.)

Nel nostro .m, tutti abbiamo bisogno è la funzione reale, il nostro colpo di testa da prima, e 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 

In sostanza, questo diventa il numero di versione e lo restituisce al callback di successo. (Non pensavo che questo metodo avesse davvero un fallimento, quindi non ha fallito callback.)

Per motivi di completezza, Xcode non aggiorna automaticamente i file (che in realtà ha senso), ma Mi dimentico sempre. Solo perché i tuoi file sono nella tua directory di progetto, non significa che siano nel tuo progetto. Non dimenticare di trascinarli nella vostra directory dei plugin nel progetto:

Dragging files into the project.

Inoltre, assicurarsi di aggiungere il tuo plugin per il vostro Cordova.plistPlugins entrata:

Editing Cordova.plist

Da lì, è piuttosto semplice chiamare il metodo da JavaScript (assicurarsi di usarlo dopo l'attivazione di 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", []); 

Questo è tutto! Semplice, giusto ...? Spero che questo aiuti qualcun altro un po 'sopraffatto dal lato Obj-C di PhoneGap.

+0

Questo è esattamente quello che stavo cercando (al momento). Ho finito per implementarlo in un altro modo, quindi non posso davvero verificare se funziona. Sono sicuro che lo faccia! Ma grazie per la condivisione. Potrebbe aiutare qualcun altro a risolvere questo problema :) –

+0

@rjmunro Grazie! Ho usato anche quello snippet per la nostra versione di Android =). Buona idea su plugman lì. – CWSpear

+3

Dopo aver trovato questa risposta, l'ho inserito in un plug-in compatibile con plug-in e ho aggiunto il supporto per Android basato su questo. Il progetto è qui: github.com/whiteoctober/cordova-plugin-app-version (URL modificato) – rjmunro

2

Come un piccolo tweak per @ risposta impressionante di CWSpear, volevo anche per afferrare la Corporatura:

Afferra il build e la versione:

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

gettarli in un Dict:

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

Modificare il pluginResult per restituire il nuovo 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", []); 

non so abbastanza di obiettivo C per tornare come due args nella funzione di callback cordova.exec JS, altrimenti sarebbe probabilmente la più semplice.

Steve

0

Se si sta utilizzando jQuery allora possiamo ottenere la versione app da questa funzione cordova.getAppVersion.getVersionNumber di Cordova-plugin-app-versione del plugin Cordova.

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

Ma se usiamo angolare allora dobbiamo mettere il codice di impostazione versione all'interno del $ timeout allora funzionerà bene.

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); 
});