Ich befolgte die Anweisungen von dieser Seite, http://moduscreate.com/writing-a-cordova-plugin-in-swift-for-ios/, um meine eigenen Cordova Plugins für die iOS Plattform zu erstellen. Zuerst habe ich plugman installiert und ein neues Plugin erstellt. Das ist mein plugin.xml:Ein Cordova/Ionic Plugin in Swift schreiben
<?xml version='1.0' encoding='utf-8'?>
<plugin id="com-moduscreate-plugins-echoswift" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<name>ModusEchoSwift</name>
<js-module name="ModusEchoSwift" src="www/ModusEchoSwift.js">
<clobbers target="modusechoswift" />
</js-module>
<platform name="ios">
<config-file target="config.xml" parent="/*">
<feature name="ModusEchoSwift">
<param name="ios-package" value="ModusEchoSwift" />
</feature>
</config-file>
<source-file src="src/ios/ModusEchoSwift.swift" />
</platform>
</plugin>
Hier meine js-Datei für das Plugin ist, das heißt ModusEchoSwift.js:
var exec = require('cordova/exec');
exports.echo = function(arg0, success, error) {
exec(success, error, "ModusEchoSwift", "echo", [arg0]);
};
exports.echojs = function(arg0, success, error) {
if (arg0 && typeof(arg0) === 'string' && arg0.length > 0) {
success(arg0);
} else {
error('Empty message!');
}
};
Und das ist meine Mutter Swift-Klasse, das heißt ModusEchoSwift.swift:
@objc(ModusEchoSwift) class ModusEchoSwift : CDVPlugin {
func echo(command: CDVInvokedUrlCommand) {
var pluginResult = CDVPluginResult(
status: CDVCommandStatus_ERROR
)
let msg = command.arguments[0] as? String ?? ""
if msg.characters.count > 0 {
/* UIAlertController is iOS 8 or newer only. */
let toastController: UIAlertController =
UIAlertController(
title: "",
message: msg,
preferredStyle: .Alert
)
self.viewController?.presentViewController(
toastController,
animated: true,
completion: nil
)
let duration = Double(NSEC_PER_SEC) * 3.0
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(duration)
),
dispatch_get_main_queue(),
{
toastController.dismissViewControllerAnimated(
true,
completion: nil
)
}
)
pluginResult = CDVPluginResult(
status: CDVCommandStatus_OK,
messageAsString: msg
)
}
self.commandDelegate!.sendPluginResult(
pluginResult,
callbackId: command.callbackId
)
}
}
Dies sind die Dateien in meinem Plugin. Jetzt versuche ich eine einfache Warnung mit diesem Plugin in meinem ionischen Projekt zu zeigen. Ich habe eine einfache index.html gerade jetzt, wo ich die Warnung will zeigen, hier ist sie:
<ion-pane>
<ion-header-bar class="bar-stable">
<h1 class="title">Ionic Blank Starter</h1>
</ion-header-bar>
<ion-content>
<div ng-controller="myController">
Hello {{user}}
</div>
</ion-content>
</ion-pane>
Und hier ist mein Controller:
.controller('myController', function($scope){
console.log("Ok");
$scope.user = "kAy";
ModusEchoSwift.echo('Plugin Ready!', function(msg) {
console.log("Success");
},
function(err) {
console.log("Error");
}
);
})
Hier in dieser Controller bekomme ich immer wieder den Fehler, dass ModusEchoSwift nicht definiert ist, was ich nicht verstehe! Kann mir jemand sagen wie ich die Funktion meines Plugins in meinem bestehenden ionischen Projekt nutzen soll?
Haben Sie die Datei cordova.js in Ihren HTML-Code aufgenommen? – Gandhi
Ya ich habe, n ich denke nicht das ist das Problem –
Ist Ihr Plugin in iOS-Plattform Plugins-Ordner enthalten? Ist Ihr benutzerdefinierter Plugin-Eintrag auch in Ihrem Projekt-Plugins-Ordner in der ios.json-Datei verfügbar? – Gandhi