Ios Cordova 1.6.1-未找到插件,或插件不是CDVPlugin

Ios Cordova 1.6.1-未找到插件,或插件不是CDVPlugin,ios,static-libraries,phonegap-plugins,cordova,Ios,Static Libraries,Phonegap Plugins,Cordova,对不起,我的英语不是很好。 我用的是cordova 1.6.1。 我创建了一个新的基于cordova的项目,并对其进行了扩展,添加了一个插件。我用我创建的插件构建了一个静态库,并尝试运行包含该库的项目(该库可以在xcode的构建设置中找到),而没有插件文件夹中的源代码 运行应用程序时出现以下错误: [信息]客户端通道(1)正在初始化。。。 CDVPlugin类MNClientChannelPlugin(pluginName:MNClientChannelPlugin)不存在。 错误:找不到插件“

对不起,我的英语不是很好。 我用的是cordova 1.6.1。 我创建了一个新的基于cordova的项目,并对其进行了扩展,添加了一个插件。我用我创建的插件构建了一个静态库,并尝试运行包含该库的项目(该库可以在xcode的构建设置中找到),而没有插件文件夹中的源代码

运行应用程序时出现以下错误:

[信息]客户端通道(1)正在初始化。。。 CDVPlugin类MNClientChannelPlugin(pluginName:MNClientChannelPlugin)不存在。 错误:找不到插件“MNClientChannelPlugin”,或者插件不是CDVPlugin。检查Cordova.plist中的插件映射

对这些错误的一些评论: 1) 第一行是我编写的JavaScript代码的日志,这表示启动了“initialize”函数。此函数调用名为MNClientChannelPlugin的插件的init函数。 2) &3)这些日志来自本机iOS cordova sdk(从getCommandInstance(2)和CDVViewController.mm的execute(3)函数调用)

在Codova.plist中,我将MNClientChannelPlugin作为键和值。使用此配置,当我将MNClientChannelPlugin源(.mm&.h)放入Plugins文件夹时,它可以工作,但当我使用MNClientChannelPlugin.mm创建静态库时,它就不能工作。(我将这个库包含在我的项目中,并将.h标题放在Plugins文件夹中)。 科尔多瓦似乎在图书馆里找不到资料来源

Cordova插件在Cordova.Framework中,而不是在 带有.m和.h文件的Plugins文件夹,因此似乎可以创建 插件,将它们打包到库中,并在基于cordova的 但我觉得这对我不起作用。。。 我查看了档案和提交文件,但没有找到任何文件
解决方案有人知道问题出在哪里吗?

是的,我找到了解决办法

问题是:

  • MNClientChannelPlugin保存在静态库中
  • 您的主项目引用静态库
  • 链接器足够聪明,只链接主项目实际使用的类
  • 就链接器所知,您的项目没有使用MNClientChannelPlugin,因为它没有在任何地方引用
  • 它不会在任何地方被引用,因为只有当phonegap应用程序碰巧请求了MNClientChannelPlugin实例时,才会加载该类
  • 因此,该类没有链接到您的最终二进制文件,您会得到上面的错误
解决方案是强制链接器包含MNClientChannelPlugin对象

简单的方法是将-all_加载添加到主项目的“其他链接器标志”中。这将产生连锁反应,链接项目中每个静态库中的每个类。但它确实有效

更好的方法是在静态库的名称中使用-force_load。下面是一篇关于这方面的帮助文章,尽管我自己还没有尝试过:


好的,我找到了解决这个问题的办法

问题是:

  • MNClientChannelPlugin保存在静态库中
  • 您的主项目引用静态库
  • 链接器足够聪明,只链接主项目实际使用的类
  • 就链接器所知,您的项目没有使用MNClientChannelPlugin,因为它没有在任何地方引用
  • 它不会在任何地方被引用,因为只有当phonegap应用程序碰巧请求了MNClientChannelPlugin实例时,才会加载该类
  • 因此,该类没有链接到您的最终二进制文件,您会得到上面的错误
解决方案是强制链接器包含MNClientChannelPlugin对象

简单的方法是将-all_加载添加到主项目的“其他链接器标志”中。这将产生连锁反应,链接项目中每个静态库中的每个类。但它确实有效

更好的方法是在静态库的名称中使用-force_load。下面是一篇关于这方面的帮助文章,尽管我自己还没有尝试过:


如果您使用的是Pushwoosh(我假设您是),说明中明确指出您应该复制并粘贴此代码:

<key>PushNotification</key>
<string>PushNotification</string>
PushNotification
推送通知
到“Cordova.plist”中的插件。因此,如果您有我曾经遇到的上述错误,这意味着您没有将其复制并粘贴到插件。将键和字符串值移动到正确的位置应该可以消除错误


Happy hack!!!

如果您使用的是Pushwoosh(我想您是),说明中明确指出您应该复制并粘贴此代码:

<key>PushNotification</key>
<string>PushNotification</string>
PushNotification
推送通知
到“Cordova.plist”中的插件。因此,如果您有我曾经遇到的上述错误,这意味着您没有将其复制并粘贴到插件。将键和字符串值移动到正确的位置应该可以消除错误


快乐黑客!!!

我有同样的问题…有人吗?我有同样的问题…有人吗?