Cordova iOS插件未找到。

17

我最近将Cordova版本从2.3.0升级到了2.9.0。在遵循所有升级指令后,我能够在模拟器中启动应用程序。然而,在Xcode中,我看到以下错误:

ERROR: Plugin 'Device' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["Device1776032119","Device","getDeviceInfo",[]]
ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["NetworkStatus1776032120","NetworkStatus","getConnectionInfo",[]]
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","deviceready has not fired after 5 seconds."]]
ERROR: Plugin 'Logger' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","Channel not fired: onCordovaConnectionReady"]]
ERROR: Plugin 'Logger' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
-[CDVCommandQueue executePending] [Line 103] FAILED pluginJSON = ["INVALID","Logger","logLevel",["LOG","Channel not fired: onCordovaInfoReady"]]

这是我的config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<widget>
    <feature name="Geolocation">
        <param name="ios-package" value="CDVLocation" />
    </feature>
    <feature name="Device">
        <param name="ios-package" value="CDVDevice" />
    </feature>
    <feature name="Accelerometer">
        <param name="ios-package" value="CDVAccelerometer" />
    </feature>
    <feature name="Compass">
        <param name="ios-package" value="CDVLocation" />
    </feature>
    <feature name="Media">
        <param name="ios-package" value="CDVSound" />
    </feature>
    <feature name="Camera">
        <param name="ios-package" value="CDVCamera" />
    </feature>
    <feature name="Contacts">
        <param name="ios-package" value="CDVContacts" />
    </feature>
    <feature name="File">
        <param name="ios-package" value="CDVFile" />
    </feature>
    <feature name="NetworkStatus">
        <param name="ios-package" value="CDVConnection" />
    </feature>
    <feature name="Notification">
        <param name="ios-package" value="CDVNotification" />
    </feature>
    <feature name="FileTransfer">
        <param name="ios-package" value="CDVFileTransfer" />
    </feature>
    <feature name="Capture">
        <param name="ios-package" value="CDVCapture" />
    </feature>
    <feature name="Battery">
        <param name="ios-package" value="CDVBattery" />
    </feature>
    <feature name="SplashScreen">
        <param name="ios-package" value="CDVSplashScreen" />
    </feature>
    <feature name="Echo">
        <param name="ios-package" value="CDVEcho" />
    </feature>
    <feature name="Globalization">
        <param name="ios-package" value="CDVGlobalization" />
    </feature>
    <feature name="InAppBrowser">
        <param name="ios-package" value="CDVInAppBrowser" />
    </feature>
    <feature name="Logger">
        <param name="ios-package" value="CDVLogger" />
    </feature>
    <feature name="LocalStorage">
        <param name="ios-package" value="CDVLocalStorage" />
    </feature>
    <plugins>
    </plugins>
    <preference name="KeyboardDisplayRequiresUserAction" value="true" />
    <preference name="SuppressesIncrementalRendering" value="false" />
    <preference name="UIWebViewBounce" value="true" />
    <preference name="TopActivityIndicator" value="gray" />
    <preference name="EnableLocation" value="false" />
    <preference name="EnableViewportScale" value="false" />
    <preference name="AutoHideSplashScreen" value="true" />
    <preference name="ShowSplashScreenSpinner" value="true" />
    <preference name="MediaPlaybackRequiresUserAction" value="false" />
    <preference name="AllowInlineMediaPlayback" value="false" />
    <preference name="OpenAllWhitelistURLsInWebView" value="false" />
    <preference name="BackupWebStorage" value="cloud" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />
    <access origin="*.googleapis.com"/>
    <access origin="*.gstatic.com"/>
    <access origin="*.s3.amazonaws.com"/>
</widget>
13个回答

31

对于未来的搜索者(如我!),我遇到了类似的问题,试图将控制台插件添加到我的项目中。在安装插件后,我需要执行的关键步骤是确保插件的源文件(CDVlogger.m)的“目标成员资格”设置包括了我的应用程序名称。


我很好奇是什么原因导致插件文件没有选中“目标成员资格”。我查看了其他已经选中的插件的plugin.xml文件,但我没有发现任何不同之处。 - inorganik
我正在使用相同的代码构建多个应用程序,因此在xcode项目中创建了多个目标。最初创建的默认目标是唯一拥有文件成员资格的目标。因此,我的cordova命令不知道它们的存在。我承认我没有深入研究config.json或类似的东西,以查看是否有办法处理xcode项目中的多个目标。但在xcode中手动添加它们是一个简单的解决方法。 - Paul
6
类似的方法适用于我:在XCode中,转到Build Phases -> 打开Compiled Sources下拉菜单。 单击+并添加缺少的插件.m文件。原文链接:https://dev59.com/LWIk5IYBdhLWcg3wPcGB#21148428 - bjunix
你的解决方案实际上也是这样,但更加方便。 - bjunix
这是Cordova的错误跟踪器上的问题。我已经追踪并调试了这个问题。参见此处的评论以获取说明和解决方法。这是一个与node-xcode有关的问题,我已经提交了一个问题和拉取请求,它已被接受。 - initialxy

26

完美地工作了,谢谢..! - Sreekanth Karini
帮助了! cordova:^8.0.0 cordova-ios:^4.5.5 - firedev

17

我也遇到了同样的问题。我使用 Node 的软件包管理器下载了 Cordova 3.0 命令行工具。然后我在终端中使用该工具创建了我的项目、为其添加了平台,并像这样构建了它。

cordova create myApp com.project.RobertW myApp
cd myApp
cordova platform add ios
cordova platform add android
cordova build

之后,当我尝试在模拟器中运行Xcode时,我发现了同样的错误。似乎现在PhoneGap默认不会将任何插件包含在项目中,因此即使在您的配置文件中存在它们,它们也可能不在插件文件夹中。您必须手动添加它们或通过命令行工具添加。我使用了命令行工具,因为我认为这样更容易。

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git
cordova build

在完成这个步骤后,我再次在模拟器中运行了我的应用程序,一切都正常。这里有一些关于命令行工具的好指导:http://docs.phonegap.com/en/3.0.0/guide_cli_index.md.html#The%20Command-line%20Interface

我认为如果PhoneGap 3.0需要Logger、Device和Network Status插件,它会自动包含这些插件,但在我的情况下并没有。希望这可以帮到你。

编辑:在Xcode中iOS版本的config.xml中,您还需要进行以下更改才能使Logger插件正常工作。以下是默认设置。

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

将上面的内容更改为这个

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

现在你的所有控制台函数都应该可以正常工作而不会抛出错误。


2
大家好,我刚遇到了与CDVDevice相关的问题。唯一有效的解决方法是创建一个新项目,重新添加所需插件,然后将www文件夹中的现有代码添加进去。这样就可以再次正常工作了(耶)。 - Dominik
我已经解决了问题(当我更新Cordova 6.0.0 -> 6.1.1时出现的问题),通过移除iOS平台并再次添加它。在创建新项目之前,请尝试此方法。 - Alexander
它对我有效,因为我的console.log是导致我屏幕空白的关键问题。谢谢,Hugo - user1802434
谢谢!在我的情况下,在Xcode的iOS版本的config.xml中添加以下名称:CDVDevice、CDVStatusBar、CDVFile、CDVSplashScreen。 - Ruslan Novikov

6

我在使用Phonegap 3.0.0时遇到了设备信息插件的同样问题。为解决此问题,我只需卸载并重新安装该插件,然后重新构建我的项目即可。

phonegap local plugin remove org.apache.cordova.device
phonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
phonegap local build ios

使用 Cordova,对插件进行卸载和重新安装对我来说起作用了。 - rafaelbiten

4

我又回到使用旧的<plugin>格式。虽然它已经被弃用了,但这是唯一能够适用于我的方式。

<plugins>
    <plugin name="Device" value="CDVDevice" />
    <plugin name="Logger" value="CDVLogger" />
    ...
</plugins>

嘿,我总是觉得每次使用新版本的Phonegap时设置一个新项目并将我的文件复制回去更容易。这只是我的个人偏好。 - Jarrod
我也做了同样的事情,但是弃用消息真的让我非常烦恼。太令人沮丧了。 - Calvin
我也做了同样的事情,对于Facebook连接插件它起作用了:<plugin name="org.apache.cordova.facebook.Connect" value="FacebookConnectPlugin" /> - Ryan Walton

3
在我的情况下,解决方案是为我使用的所有插件在我的config.xml中添加这行代码。
    <feature name="Device">
    <param name="ios-package" value="CDVDevice" />
    <param name="onload" value="true" />
</feature>

<feature name="FCMPlugin">
    <param name="ios-package" value="FCMPlugin" />
    <param name="onload" value="true" />
</feature>

<feature name="StatusBar">
    <param name="ios-package" value="CDVStatusBar" />
    <param name="onload" value="true" />
</feature>

<feature name="CDVLocation">
    <param name="ios-package" value="CDVLocation" />
    <param name="onload" value="true" />
</feature>

<feature name="cordova.logger">
    <param name="ios-package" value="CDVLogger" />
    <param name="onload" value="true" />
</feature>

<feature name="Logger">
    <param name="ios-package" value="CDVLogger" />
    <param name="onload" value="true" />
</feature>

<feature name="Console">
    <param name="ios-package" value="CDVLogger" />
    <param name="onload" value="true" />
</feature>


<feature name="SQLitePlugin">
    <param name="ios-package" value="SQLitePlugin" />
    <param name="onload" value="true" />
</feature>

  <feature name="Keyboard">
    <param name="ios-package" value="IonicKeyboard" />
    <param name="onload" value="true" />
</feature>

1
这个解决方案只适用于我的情况。我手动添加了一些插件,这解决了我的问题。谢谢! - olanchuy

2

在使用Xcode 6和PhoneGap 3.5时,我遇到了这个问题。

步骤:

phonegap plugin remove org.apache.cordova.camera 
phongap plugin add org.apache.cordova.camera 
phongap platform remove ios
phongap build ios

这可能不是最好的解决方案 - 因为您会失去您的Xcode设置 - 但它可以解决问题。


2
遇到了这个问题。发现唯一的解决办法是通过CLI添加插件后运行cordova prepareprepare将必要的文件复制到platforms文件夹中的XCode项目中。
我认为这应该作为build命令的一部分,或者如果项目存在,则作为plugin add命令的一部分来完成。也许这是一个错误,也许是故意的,但我找不到太多关于它的文档。
类似的问题和答案请参考此处

1
我也遇到了这个问题。我只是自己创建了目录(platforms/ios/appname/Plugins/org.apache.cordova.console),并将缺失的文件(CDVLLogger.h和CDVLLogger.m)复制到该目录中。然后编译成功了。
我正在使用cordova 3.5版本。

你从哪里获取这些文件? - Arnold Roa

0
如果您在使用Ionic时遇到此错误,请尝试运行cordova run ios --device而不是ionic run ios --device。这对我解决了问题。我认为Ionic cli v2会搞砸事情,因为该项目是Ionic 1项目。在更新Ionic cli之前,我没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接