CordovaLib 3.8.0 を Swift プロジェクトに追加しました (完全に Cordova ベースのプロジェクトではなく、スタンドアロンの Web ビュー (Cleaver) として)。そのために、PhoneGap サイトの指示に従い、次のブリッジ ヘッダーを作成して追加しました。
// Cordova-Bridging-Header.h
#import <Cordova/CDV.h>
次に、簡単なプラグインを作成しました。
// HelloPlugin.swift
import Foundation
@objc(HelloPlugin) class HelloPlugin: CDVPlugin {
override func pluginInitialize() {
super.pluginInitialize();
}
func sayHello( command: CDVInvokedUrlCommand ) {
let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAsString: "hello");
commandDelegate.sendPluginResult( pluginResult, callbackId: command.callbackId );
}
}
そして、それをconfig.xmlに追加しました
// config.xml
[...]
<feature name="HelloPlugin">
<param name="ios-package" value="HelloPlugin" />
<param name="onload" value="true" />
</feature>
(シミュレーターで) アプリを実行すると、cordova とプラグインの両方が読み込まれていることがわかります。
2015-04-07 20:28:09.277 Test[32687:4349827] Apache Cordova native platform version 3.8.0 is starting.
2015-04-07 20:28:09.278 Test[32687:4349827] Multi-tasking -> Device: YES, App: YES
2015-04-07 20:28:09.279 Test[32687:4349827] Unlimited access to network resources
2015-04-07 20:28:09.362 Test[32687:4349827] [CDVTimer][helloplugin] 0.042975ms
2015-04-07 20:28:09.362 Test[32687:4349827] [CDVTimer][TotalPluginStartup] 0.176013ms
ただし、Safari を介して JS コンソールにアクセスし、sayHello 関数を呼び出そうとすると、何も返されません。
// JS (ran manually on console)
cordova.exec(
// success
function(){
console.log( 'success ->', this, arguments );
},
// failure
function(){
console.log( 'fail ->', this, arguments );
},
// plugin name
'HelloPlugin',
// method name
'sayHello',
// arguments
['a', 'b', 2]
);
次に、CDVViewController.m に移動し、URL スキーム ハンドラーにブレークポイントを設定しました。
- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
/*
* Execute any commands queued with cordova.exec() on the JS side.
* The part of the URL after gap:// is irrelevant.
*/
if ([[url scheme] isEqualToString:@"gap"]) {
cordova.exec() を実行すると、このコードがまったく呼び出されないことがわかりました。基本的に同じ方法で Cordova を使用している Objective-C プロジェクトの同じ場所にブレークポイントを配置すると、ブレークポイントが起動します。
不足している、または試してみる必要があるものはありますか?