【问题标题】:Custom ionic/cordva plugin for iOS. Method not defined in plugin error适用于 iOS 的自定义 ionic/cordva 插件。插件错误中未定义方法
【发布时间】:2018-01-26 12:02:36
【问题描述】:

我正在 swift 中为 iOS 编写自定义插件,但出现以下错误:

ERROR: Method 'initialize:' not defined in Plugin 'RabbitMqPlugin'

我已经搜索以找到解决方案,但我无法弄清楚问题所在。

下面是我的代码。

plugin.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    id="cordova-plugin-rabbitmq"
    version="0.0.1">
    <name>RabbitMqPlugin</name>
    <js-module src="www/plugin.js" name="RabbitMqPlugin">
       <clobbers target="RabbitMqPlugin" />
    </js-module>

<!-- ios -->
<dependency id="cordova-plugin-cocoapod-support" />
<dependency id="cordova-plugin-add-swift-support" />
<platform name="ios">
    <pods-config ios-min-version="9.0" use-frameworks="true">
    </pods-config>
    <pod name="RMQClient" />

    <config-file target="config.xml" parent="/*">
        <feature name="RabbitMqPlugin">
            <param name="ios-package" value="CDVDevice"/>
        </feature>
    </config-file>

    <source-file src="src/ios/CDVHttpRequest.swift" />
    <source-file src="src/ios/CDVRabbitMq.swift" />
    <source-file src="src/ios/CDVRabbitMqPlugin.swift" />
</platform>
</plugin>

plugin.js 文件在 www 文件夹中:

var exec = require('cordova/exec');

var PLUGIN_NAME = 'RabbitMqPlugin';

 var RabbitMqPlugin = {
    initialize: function(phrase, cb) {
    exec(cb, null, PLUGIN_NAME, 'initialize', [phrase]);
 }
};

module.exports = RabbitMqPlugin;

CDVRabbitMqPlugin.swift 文件在 src/ios 文件夹中:

import Foundation

@objc(RabbitMqPlugin) class RabbitMqPlugin : CDVPlugin {
var mRabbit:rabbitMQ!;

@objc(initialize:)
func initialize(_ command: CDVInvokedUrlCommand){
    var pluginResult = CDVPluginResult(
        status: CDVCommandStatus_ERROR
    );

    let token = command.arguments[0] as! String;

    if (token.characters.count > 0) {
        mRabbit = rabbitMQ(mToken: token);

        pluginResult = CDVPluginResult(
            status: CDVCommandStatus_ERROR
        );
    }

    self.commandDelegate!.send(
        pluginResult, 
        callbackId: command.callbackId
    )
  }
}

为了支持 swift,我已经安装了 cordova-plugin-add-swift-support 模块。 我已经为 Android 添加了自定义插件 ionic 插件,并且我成功地实现了我的 ionic 项目。

希望你能帮助我。谢谢

【问题讨论】:

    标签: ios swift cordova ionic-framework


    【解决方案1】:

    你在plugin.xml中的feature是错误的,应该是

    <feature name="RabbitMqPlugin">
        <param name="ios-package" value="RabbitMqPlugin"/>
    </feature>
    

    另外,如果你没有用 CDVClassname 命名类,不要命名包含那些以 CDV 开头的类的文件,不确定这是否会在 Swift 中失败,但最好将 Swift 文件命名为与类相同的名称它们包含

    【讨论】:

    • 是的,非常感谢。现在我得到了这个:线程警告:['RabbitMqPlugin'] 花了'20.425049'毫秒。插件应该使用后台线程。同样在检查中我得到这个:加载资源失败:不支持的 URL gap://ready
    • 这只是一个警告。如果你想摆脱它,你可以使用后台线程,请参阅插件指南的线程部分。 cordova.apache.org/docs/en/latest/guide/platforms/ios/…。关于不受支持的 URL,您是否使用了 WKWebView 插件?您的 index.html 中是否有 Content-Security-Policy 元标记?有的话可以分享一下吗?其他插件有用吗?
    • 我已经添加了 webview 插件。是的,我添加了安全元标记,它是: 是的,其他插件可以工作。
    • 内容安全策略。将其更改为&lt;meta http-equiv="Content-Security-Policy" content="default-src file://* *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline' *"&gt;
    • 发送前,类似pluginResult.setKeepCallbackAsBool(true)
    猜你喜欢
    • 2017-07-30
    • 2021-03-13
    • 2013-07-21
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多