迁移 cordova 项目时找不到插件
Plugin not found while migrating cordova project
我正在将一个应用程序从 Cordova 2.2.0 迁移到 3.5。我正在为 iOS 使用自定义插件,它负责扫描条形码。我已经把代码放在Cordova Library项目下的一个文件夹里了。
我正在使用以下代码调用插件:
var RedLaserPlugin = {
scanBarcode: function(successFunction, failFunction) {
return Cordova.exec(successFunction, failFunction, "RedLaserPlugin",
"scanBarcode", []);
}
}
并且...在加载应用程序时,
document.addEventListener("deviceready", function () { Cordova.exec(rlp_success, rlp_failure, "RedLaserPlugin", "init", []); }, false);
在config.xml文件中我添加了插件的依赖使用...
<feature name="RedLaserPlugin">
<param name="ios-package" value="RedLaserPlugin" />
但是当我 运行 应用程序无法将插件绑定到 xcode 项目并提供以下内容时:
-[CDVCommandQueue executePending] [Line 159] FAILED pluginJSON = ["RedLaserPlugin1615451183","RedLaserPlugin","init",[]]
尝试了多种组合使其起作用,但 none 成功了。我错过了什么吗?
编辑:我在如下文件夹中创建了一个 plugin.xml:
<js-module src="www/RedLaserPlugin.js" name="RedLaserPlugin">
<clobbers target="navigator.RedLaserPlugin" />
=3.8.0" />
<!-- config file -->
<config-file target="config.xml" parent="/*">
<feature name="RedLaserPlugin">
<param name="ios-package" value="RedLaserPlugin" />
</feature>
</config-file>
<header-file src="platforms/ios/Production/Classes/MainViewController.h" />
<header-file src="platforms/ios/Production/Classes/MainViewController.m" />
<header-file src="platforms/ios/Production/Classes/MainViewController.xib" />
<header-file src="platforms/ios/Production/Classes/MainViewController.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPlugin.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPlugin.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserSDK.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.xib" />
并尝试使用 cmd
安装插件
cordova plugin add RedLaserPlugin.js
但是它在终端中给我这样的错误:
TypeError: Cannot read property 'match' of undefined
我假设您获得了一个从 Cordova 3.5 生成的新 Xcode 项目。
如果这是正确的,您是否添加了要编译的插件源代码?
转到构建阶段,然后打开编译源下拉列表。单击 + 并添加应该已经在您的插件目录中的缺少的插件源。
我认为您的 plugin.xml 无效。
这是我为自定义插件创建的示例 plugin.xml 模板:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="your_plugin_id"
version="your_version">
<name>plugin_name</name>
<description>description</description>
<license>Apache 2.0</license>
<keywords>keyword_of_the_plugin</keywords>
<!-- ios -->
<platform name="ios">
<source-file src="Plugin_source_file" />
<framework src="required_framework" />
<config-file target="config.xml" parent="/*/plugins">
<feature name="feature_name">
<param name="ios-package" value="plugin_name"/>
</feature>
</config-file>
<config-file target="config.xml" parent="/*">
<access origin="*" />
</config-file>
</platform>
<!-- android -->
<platform name="android">
<!-- android-specific elements -->
</platform>
</plugin>
例如检查以下documentation
我正在将一个应用程序从 Cordova 2.2.0 迁移到 3.5。我正在为 iOS 使用自定义插件,它负责扫描条形码。我已经把代码放在Cordova Library项目下的一个文件夹里了。
我正在使用以下代码调用插件:
var RedLaserPlugin = {
scanBarcode: function(successFunction, failFunction) {
return Cordova.exec(successFunction, failFunction, "RedLaserPlugin",
"scanBarcode", []);
}
}
并且...在加载应用程序时,
document.addEventListener("deviceready", function () { Cordova.exec(rlp_success, rlp_failure, "RedLaserPlugin", "init", []); }, false);
在config.xml文件中我添加了插件的依赖使用...
<feature name="RedLaserPlugin">
<param name="ios-package" value="RedLaserPlugin" />
但是当我 运行 应用程序无法将插件绑定到 xcode 项目并提供以下内容时:
-[CDVCommandQueue executePending] [Line 159] FAILED pluginJSON = ["RedLaserPlugin1615451183","RedLaserPlugin","init",[]]
尝试了多种组合使其起作用,但 none 成功了。我错过了什么吗?
编辑:我在如下文件夹中创建了一个 plugin.xml:
<js-module src="www/RedLaserPlugin.js" name="RedLaserPlugin">
<clobbers target="navigator.RedLaserPlugin" />
=3.8.0" />
<!-- config file -->
<config-file target="config.xml" parent="/*">
<feature name="RedLaserPlugin">
<param name="ios-package" value="RedLaserPlugin" />
</feature>
</config-file>
<header-file src="platforms/ios/Production/Classes/MainViewController.h" />
<header-file src="platforms/ios/Production/Classes/MainViewController.m" />
<header-file src="platforms/ios/Production/Classes/MainViewController.xib" />
<header-file src="platforms/ios/Production/Classes/MainViewController.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPlugin.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPlugin.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserSDK.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.h" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.m" />
<header-file src="platforms/ios/Production/Plugins/RedLaserPluginFiles/RedLaserOverlayController.xib" />
并尝试使用 cmd
安装插件cordova plugin add RedLaserPlugin.js
但是它在终端中给我这样的错误:
TypeError: Cannot read property 'match' of undefined
我假设您获得了一个从 Cordova 3.5 生成的新 Xcode 项目。
如果这是正确的,您是否添加了要编译的插件源代码?
转到构建阶段,然后打开编译源下拉列表。单击 + 并添加应该已经在您的插件目录中的缺少的插件源。
我认为您的 plugin.xml 无效。
这是我为自定义插件创建的示例 plugin.xml 模板:
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
id="your_plugin_id"
version="your_version">
<name>plugin_name</name>
<description>description</description>
<license>Apache 2.0</license>
<keywords>keyword_of_the_plugin</keywords>
<!-- ios -->
<platform name="ios">
<source-file src="Plugin_source_file" />
<framework src="required_framework" />
<config-file target="config.xml" parent="/*/plugins">
<feature name="feature_name">
<param name="ios-package" value="plugin_name"/>
</feature>
</config-file>
<config-file target="config.xml" parent="/*">
<access origin="*" />
</config-file>
</platform>
<!-- android -->
<platform name="android">
<!-- android-specific elements -->
</platform>
</plugin>
例如检查以下documentation