未找到插件,或者不是 CDVP 插件。检查 config.xml 中的插件映射

Posted

技术标签:

【中文标题】未找到插件,或者不是 CDVP 插件。检查 config.xml 中的插件映射【英文标题】:Plugin not found, or is not a CDVPlugin. Check your plugin mapping in config.xml 【发布时间】:2014-02-15 01:04:08 【问题描述】:

我已经在 plugin.xml 中声明了我的 ios 插件文件,如下所示:

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

  <header-file src="src/ios/CDVOP.h" />
  <source-file src="src/ios/CDVOP.m" />

在插件 javascript 文件中,我有这个函数,我稍后会从 JavaScript 应用程序调用它

showCatPictures: function(interval) 
  exec(null, null, 'CDVOP', 'showCatPictures', [interval]);   
,

我正在运行使用来自 xcode 的此插件的应用程序来查看调试输出。当我调用showCatPictures 函数时,我得到了这个:

OP Cordova Tests[1122:60b] ERROR: Plugin 'CDVOP' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2014-02-14 16:23:45.233 OP Cordova Tests[1122:60b] -[CDVCommandQueue executePending] [Line 127] FAILED pluginJSON = [
  "INVALID",
  "CDVOP",
  "showCatPictures",
  [
    30
  ]
]

我怀疑这可能与我导入的所有东西有关,所以这里是 CDVOP.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <Cordova/CDVPlugin.h>
#import <Cordova/CDV.h>
#import <Cordova/CDVViewController.h>

//OP SDK
#import "OpenpeerSDK/HOPStack.h"
#import "OpenpeerSDK/HOPLogger.h"
#import "OpenpeerSDK/HOPMediaEngine.h"
#import "OpenpeerSDK/HOPCache.h"
#import "OpenpeerSDK/HOPAccount.h"
#import "OpenpeerSDK/HOPIdentity.h"

@interface CDVOP : CDVPlugin <UIWebViewDelegate> 
    NSString* callbackId;
    UIImageView* peerImageView;
    UIImageView* selfImageView;


@property (nonatomic, copy) NSString* callbackId;
@property (retain, nonatomic) UIImageView *peerImageView;
@property (retain, nonatomic) UIImageView *selfImageView;

- (void) authorizeApp:(CDVInvokedUrlCommand*)command;
- (void) configureApp:(CDVInvokedUrlCommand*)command;
- (void) getAccountState:(CDVInvokedUrlCommand*)command;
- (void) startLoginProcess:(CDVInvokedUrlCommand*)command;
- (void) showCatPictures:(CDVInvokedUrlCommand*)command

@end

这是 CDVOP.m 的顶部:

#import "CDVOP.h"

@implementation CDVOP

@synthesize webView, selfImageView, peerImageView, callbackId;

-(CDVPlugin*) initWithWebView:(UIWebView*)theWebView

    self = (CDVOP*)[super initWithWebView:theWebView];
    NSLog(@">>> initializing with cordova webView <<<"); // actually this does not get called!
    return self;


// stress test UIImageViews using a series of cat pictures
- (void)showCatPictures:(CDVInvokedUrlCommand*)command
   
    //initialize and configure the image view
    CGRect selfRect = CGRectMake(0, 0, 100.0, 200.0);
    self.selfImageView = [[UIImageView alloc] initWithFrame:selfRect];
    [self.webView.superview addSubview:self.selfImageView];

    // load pictures and start animating
    NSLog(@"displaying cat pictures");
    selfImageView.animationImages = [NSArray arrayWithObjects:
      [UIImage imageNamed:@"1.JPG"], [UIImage imageNamed:@"2.JPG"], [UIImage imageNamed:@"3.JPG"],
      [UIImage imageNamed:@"4.JPG"], [UIImage imageNamed:@"5.JPG"], [UIImage imageNamed:@"6.JPG"],
      [UIImage imageNamed:@"7.JPG"], [UIImage imageNamed:@"8.JPG"], nil];

    selfImageView.animationDuration = 0.3;
    [selfImageView startAnimating];

知道为什么插件似乎没有正确初始化,为什么我不能用exec 调用它的方法吗?

【问题讨论】:

【参考方案1】:

这是我在问题中忘记提及的一个不重要的小细节。这就是使用插件的示例应用程序中的www/config.xml 的样子。你能发现问题吗?

<widget id="org.sample.test" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>My Cordova Test</name>
    <description>
        A series of tests demonstrating the use of my cordova plugin
    </description>
    <author email="" href="">
        That would be me
    </author>
    <content src="index.html" />
    <access origin="*" />
</widget>

注意应用程序名称&lt;name&gt;My Cordova Test&lt;/name&gt; 中的空格。起初这似乎可行,但它会在稍后将托管您的插件的文件夹名称中放置空格。这足以干扰插件安装过程。这是我为解决此问题所做的:

将测试应用的名称更改为MyCordovaTest cordova platform remove ios cordova plugin remove org.myplugin.cordova cordova platform add ios cordova plugin add ../my-plugin cordova build ios

现在插件已正确安装并按预期初始化。非常感谢#phonegap IRC 房间的好心人帮助我调试了这个问题。我希望这对某人有所帮助。

【讨论】:

我的名称为“testApp”,然后我也收到此错误。【参考方案2】:

在我的情况下,当我在 ios 中遇到同样的问题时,错误是在插件的 plugin.xml 文件中

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

该值与 swift 文件中存在的值不匹配,在 swift 文件中类的开头是这样的

@objc(HWPUDPSender) public class UDPSender: CDVPlugin, GCDAsyncUdpSocketDelegate

这里我们可以在 plugin.xml 中看到值是 UDPSender 但在 swift 文件中它是 HWPUDPSender 并且这两个应该相同

【讨论】:

以上是关于未找到插件,或者不是 CDVP 插件。检查 config.xml 中的插件映射的主要内容,如果未能解决你的问题,请参考以下文章

错误:未找到插件“org.apache.cordova.barcodeScanner”,或者不是 CDVP 插件。检查 config.xml 中的插件映射

Cordova/Phonegap / iOS:错误:找不到插件“Plugin01”,或者不是 CDVP 插件。检查 config.xml 中的插件映射

WP主题检查插件错误未显示位置

PushPlugin 未找到,或者不是 CDVPlugin

WordPress:检查是不是安装了插件(ACF)

依赖检查的插件