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:
Inoltre, assicurarsi di aggiungere il tuo plugin per il vostro Cordova.plistPlugins
entrata:
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.
Quale soluzione hai finito per implementare? Hai dovuto creare il tuo plugin PhoneGap? Ho esattamente lo stesso problema di te. –
@FarhanAhmad So che sono passati alcuni mesi, ma ho pubblicato una risposta più dettagliata con la mia soluzione. – CWSpear