Плагин не найден или не является CDVPlugin. Проверьте сопоставление вашего плагина в config.xml

Я объявил свой файл плагина для iOS внутри plugin.xml следующим образом:

  <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?


person Aras    schedule 15.02.2014    source источник


Ответы (2)


Вот небольшая неважная деталь, которую я забыл упомянуть в вопросе. Вот как выглядело 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>

Обратите внимание на пробел в имени приложения <name>My Cordova Test</name>. Сначала кажется, что это работает, но добавляет пробелы в имя папки, в которой позже будет размещен ваш плагин. Этого достаточно, чтобы помешать процессу установки плагина. Вот что я сделал, чтобы решить проблему:

  • изменил название тестового приложения на 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 room, которые помогли мне решить эту проблему. Я надеюсь, что это поможет кому-то.

person Aras    schedule 16.02.2014
comment
у меня есть имя как testApp, тогда я также получаю эту ошибку. - person rohitwtbs; 09.04.2019

В моем случае, когда я столкнулся с той же проблемой в 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, и эти два значения должны быть одинаковыми.

person Awais Nasir    schedule 26.06.2019