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:
También, asegúrese de añadir el plugin para su Cordova.plistPlugins
entrada:
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.
¿Qué solución acabas de implementar? ¿Tuviste que crear tu propio plugin PhoneGap? Tengo el mismo problema que tu. –
@FarhanAhmad Sé que han pasado unos meses, pero publiqué una respuesta más detallada con mi solución. – CWSpear