Chciałem zaoferować moje rozwiązanie (oparte na rozwiązaniu Adama Ware'a).
Zazwyczaj nie podoba mi się podawanie całego kodu dla ludzi do kopiowania i wklejania, ale mam wrażenie, że jest to wyjątek, ponieważ wiele osób nurkujących w PhoneGap nie ma pojęcia o Objective-C i jego zabawnym wyglądająca na składnię (jak ja).
Więc oto co przeszedłem używając kodu i zgodnie z instrukcjami Adam wskazał na:
W moim folderze wtyczek projektu w <project name>/Plugins/
, stworzyłem MyCDVPlugin.m
i MyCDVPlugin.h
.
Napisałem wcześniej w C, więc rozumiem nagłówki, ale dla tych, którzy tego nie robią, w zasadzie mówię komplementowi, czego szukać, więc po prostu mówimy o nazwie naszej metody i importujemy Cordova nagłówek:
#import <Cordova/CDVPlugin.h>
@interface MyCDVPlugin : CDVPlugin
- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
Te parametry to standardowe parametry wtyczki Cordova (o ile wiem). Nasza funkcja, jako getter, w rzeczywistości nie ma żadnych parametrów, ale są one nadal wymagane. (options
rzeczywistości może być opcjonalnie nie przetestować?).
w naszym .m
, wszystko czego potrzebujemy jest rzeczywista funkcja, nasz Główka przed i 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
Zasadniczo, ten dostaje numer wersji i przekazuje go do twojego oddzwaniania powodzenia. (Nie sądziłem, że ta metoda rzeczywiście ma awarię, więc nie ma zwrotnego połączenia zwrotnego.)
Dla kompletności, Xcode nie aktualizuje automatycznie plików (co ma sens), ale Zawsze zapominam. To, że pliki znajdują się w katalogu projektu, nie oznacza, że są one w twoim projekcie. Nie zapomnij, aby przeciągnąć je do katalogu wtyczek w projekcie:

Ponadto, upewnij się dodać wtyczkę do swojej Cordova.plistPlugins
wpis:

Stamtąd można łatwo wywołać tę metodę z JavaScript (pamiętaj, aby użyć jej po wywołaniu 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", []);
To wszystko! Proste, prawda ...? Mam nadzieję, że to pomaga komuś innemu trochę przytłoczony przez stronę Obj-C PhoneGap.
Jakie rozwiązanie wdrożyłeś? Czy musisz stworzyć własną wtyczkę PhoneGap? Mam taki sam problem jak ty. –
@FarhanAhmad Wiem, że minęło kilka miesięcy, ale wysłałem bardziej szczegółową odpowiedź z moim rozwiązaniem. – CWSpear