iOS Plugins
Ta razdelek ponuja podrobnosti za kako izvajati native plugin kodo na platformi iOS. Pred obravnavo tega, glejte Uporaba Plugins za pregled plugin strukturo in njene skupne JavaScript vmesnik. Ta oddelek še dokazati vzorec echo plugin, ki komunicira s spletni pogled Cordova native platformo in nazaj.
IOS plugin se izvaja kot Objective-C razred, ki razširja v CDVPlugin
razred. Za JavaScript je exec
metoda je service
parameter na zemljevidu Objective-C razred, vsak plugin razred mora biti registriran kot a <feature>
tag v direktorij imenovan uporaba config.xml
datoteke.
Plugin razred kartiranje
Del JavaScript plugin uporablja je cordova.exec
metoda, kot sledi:
exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]);
To šerifov na zahtevo v UIWebView
iOS native strani, učinkovito kliče je action
metoda na je service
razreda, z argumenti, ki so opravili v v args
array.
Določite plugin kot a <feature>
tag v Cordova iOS aplikacijo projekta config.xml
datoteke, uporabljate v plugin.xml
datoteko, samodejno, kot je opisano v Plugins uporabo injicirati te oznake:
<feature name="LocalStorage">
<param name="ios-package" value="CDVLocalStorage" />
</feature>
Zunanja oblika name
atribut mora ujemati, kar ste jih določili kot JavaScript exec
call's service
parameter. Na value
atribut mora ujemati z imenom plugin Objective-C razred. Na <param>
elementa name
mora biti vedno ios-package
. Če ne upoštevate teh smernic, lahko zbrati plugin, vendar Cordova še vedno ne morejo v postranski to.
Inicializacija plugin in življenju
En primerek predmeta plugin je ustvarjen za življenje vsakega UIWebView
. Plugins so običajno predstavljen, ko najprej sklicuje klic iz JavaScript. Drugače lahko biti predstavljen tako, a param
imenovan onload
da true
v v config.xml
datoteke:
<feature name="Echo">
<param name="ios-package" value="Echo" />
<param name="onload" value="true" />
</feature>
Tam se ne imenuje initializer za plugins. Namesto tega uporabljajte plugins na pluginInitialize
način za njihovo logiko zagonu.
Plugins za dolgotrajen zahteve, v ozadju dejavnosti, kot so predvajanje medijev, poslušalci ali ki ohraniti notranje stanje bi bilo izvajala v onReset
metoda za čiščenje teh dejavnosti. Metoda izvede, ko se UIWebView
premakne se nova stran ali Osveži, ki polnitve JavaScript.
Pisanje iOS Cordova Plugin
JavaScript poziv požari izklop zahteva plugin native stran, in ustrezne iOS plugin Objective-C je preslikan pravilno v v config.xml
datoteko, vendar kaj končni iOS Objective-C plugin razred pogled všeč? Karkoli se odpravi na plugin z JavaScript je exec
funkcija je prešla v ustrezen plugin razred action
metoda. Plugin metoda je ta podpis:
- (void)myMethod:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
NSString* myarg = [command.arguments objectAtIndex:0];
if (myarg != nil) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
Za več podrobnosti glej [CDVInvokedUrlCommand.h](https://github.com/apache/cordova-ios/blob/master/CordovaLib/Classes/CDVInvokedUrlCommand.h)
, [CDVPluginResult.h](https://github.com/apache/cordova-ios/blob/master/CordovaLib/Classes/CDVPluginResult.h)
, in[CDVCommandDelegate.h](https://github.com/apache/cordova-ios/blob/master/CordovaLib/Classes/CDVCommandDelegate.h)
.
iOS vrste sporočil CDVPluginResult
Uporabite lahko CDVPluginResult
različne rezultat vrste nazaj JavaScript callbacks, z uporabo metod razreda, ki sledijo tem vzorcu:
+ (CDVPluginResult*)resultWithStatus:(CDVCommandStatus)statusOrdinal messageAs...
Ustvarite lahko String
, Int
, Double
, Bool
, Array
, Dictionary
, ArrayBuffer
, in Multipart
vrst. Lahko tudi izpustite argumentov poslati status ali vrnitev napake ali celo odločite, da ne spodbuda poljuben čep rezultat, pri čemer niti callback požari.
Opomba za kompleksne vrnjenih vrednosti naslednje:
messageAsArrayBuffer
pričakuje, da boNSData*
in pretvori vArrayBuffer
v JavaScript povratni klic. Prav tako vseArrayBuffer
JavaScript pošlje na plugin se pretvorijo vNSData*
.messageAsMultipart
pričakuje naNSArray*
katerekoli druge podprte vrste, in pošlje celoten niz, kot jearguments
vaš JavaScript povratni klic. Na ta način vse trditve so serializirana ali mogoče deserializirati kot potrebno, tako da je varno za vrnitevNSData*
kot multipart, vendar ne kotArray
/Dictionary
.
ECHO iOS Plugin primer
Primerjal JavaScript vmesnik echo funkcija, opisana v uporabo Plugins, uporabite na plugin.xml
injicirati a feature
Specifikacija za lokalne platforme config.xml
datoteke:
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="Echo">
<param name="ios-package" value="Echo" />
</feature>
</config-file>
</platform>
Nato bi dodamo naslednje Echo.h
in Echo.m
datoteke je Plugins
mapo znotraj Cordova iOS aplikacija imenika:
/********* Echo.h Cordova Plugin Header *******/
#import <Cordova/CDV.h>
@interface Echo : CDVPlugin
- (void)echo:(CDVInvokedUrlCommand*)command;
@end
/********* Echo.m Cordova Plugin Implementation *******/
#import "Echo.h"
#import <Cordova/CDV.h>
@implementation Echo
- (void)echo:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
NSString* echo = [command.arguments objectAtIndex:0];
if (echo != nil && [echo length] > 0) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end
Potrebno uvoz na vrhu datoteke razširja razred iz CDVPlugin
. V tem primeru plugin podpira le eno echo
dejanje. Pridobi echo niz s pozivom na objectAtIndex
način dobili prvi parameter je arguments
array, ki ustreza argumente, ki so jih v sprejel JavaScript exec()
funkcijo.
Preveri parameter prepričati se to ni nil
ali prazen niz, vračajo z PluginResult
s je ERROR
status, če je tako. Če parameter prehaja ček, vrne s PluginResult
s je OK
status, ki poteka v izvirniku echo
niz. Končno, pošlje rezultat na self.commandDelegate
, ki izvede na exec
metoda je uspeh ali neuspeh callbacks na strani JavaScript. Če se imenuje uspeh callback, prehaja v je echo
parameter.
iOS integracije
V CDVPlugin
razred značilnosti druge metode, da vaš plugin lahko preglasite. Zajamete lahko na primer v [pause](../../../cordova/events/events.pause.html)
, [resume](../../../cordova/events/events.resume.html)
, app končati in handleOpenURL
dogodkov. Glej CDVPlugin.h in CDVPlugin.m razred za usmerjanje.
Navojev
Plugin metod običajno izvesti v istem nit kot glavni vmesnik. Če vaš plugin zahteva blokiranje klica ali zahteva veliko predelavo, uporabite ozadje nit. Na primer:
- (void)myPluginMethod:(CDVInvokedUrlCommand*)command
{
// Check command.arguments here.
[self.commandDelegate runInBackground:^{
NSString* payload = nil;
// Some blocking logic...
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:payload];
// The sendPluginResult method is thread-safe.
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}];
}
Debugging iOS Plugins
Debug na strani Objective-C, morate Xcode's vgrajen iskalnik napak. Za JavaScript, na iOS 5,0 lahko uporabite Weinre, projekt Apache Cordova ali iWebInspector, a tretji stranka korist. Za iOS 6, lahko priložite Safari 6.0 vaš app teče v iOS 6 Simulator.
Skupnih pastem
Ne pozabite dodati vaš plugin preslikava v
config.xml
. Če ste pozabili, napake prijavljeni Xcode konzolo.Ne pozabite dodati vseh gostiteljev povežete v seznam dovoljenih, kot je opisano v priročniku Whitelist domene. Če ste pozabili, napake prijavljeni Xcode konzolo.