2013-06-29 142 views
17

我最近从2.3.0升级到Cordova 2.9.0。遵循所有升级说明后,我能够在模拟器中启动应用程序。然而,在Xcode我看到以下错误:Cordova iOS插件未找到

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> 

回答

4

我回去使用旧<plugin>格式。尽管它已被弃用,但它是唯一适用于我的方法。

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

嘿,我总是发现每次使用新版本的Phonegap时都会设置一个新项目,并将我的文件复制回来。 – Jarrod

+0

我也是这样做的,但不赞成的信息真的会让我失望。太令人沮丧了。 – Calvin

+0

我做了同样的工作,它的Facebook连接插件:

16

我有同样的问题。我刚刚使用节点的包管理器下载了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 

这样做后,我再次在模拟器中运行myApp,一切正常。有在命令行工具一些很好的说明操作:

http://docs.phonegap.com/en/3.0.0/guide_cli_index.md.html#The%20Command-line%20Interface

我想认为,如果PhoneGap的3.0需要记录器,设备和网络状态,它会自动,但在我的情况下,它没有包括那些插件不。希望这可以帮助。

编辑:在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

+0

我已经通过删除ios平台并重新添加它来解决了这个问题(当我更新了cordova 6.0.0 - > 6.1.1时出现了这个问题)。在创建新项目之前尝试一下。 – Alexander

+0

它适用于我作为我的console.log是我的一个空白屏幕的关键问题。谢谢,雨果 – user1802434

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 
+0

使用科尔多瓦,卸载并重新安装插件做了我的伎俩。 – rafaelbiten

2

自己碰到这个问题。发现通过CLI添加插件后,唯一的解决方案是运行cordova prepareprepare将必要的文件复制到platforms文件夹内的XCode项目。

我认为这应该作为build命令或plugin add命令的一部分完成,如果项目存在。也许这是一个错误,也许是故意的,但我找不到很多文档。

Similar question with answers

30

对于未来的搜索者(像我一样!),我有一个类似的问题试图添加控制台插件到我的项目。安装插件后,我缺少的一步是确保插件(CDVlogger.m)的“目标成员资格”设置的源文件包含我的应用程序名称。

+0

我很好奇可能导致插件文件没有选中“目标成员”。我查看了其他拥有它的插件的plugin.xml文件,没有什么不同,我可以看到。 – inorganik

+0

我从相同的代码构建了几个应用程序,所以我在xcode项目中创建了多个目标。只有最初创建的默认目标文件在其成员资格中。所以我的科尔多瓦命令不知道他们。我承认我没有深入了解配置。json或类似的东西,看看我是否有办法在xcode项目中处理多个目标。但在xcode中手动添加它们是一个简单的修复。 – Paul

+6

类似的工作对我来说:“在XCode中,转到Build Phases - >打开Compiled Sources下拉菜单,点击+并添加缺少的插件.m文件。”从http://stackoverflow.com/a/21148428/80254 – bjunix

1

我也有这个问题。我简单地创建了自己的目录(platforms/ios/appname/Plugins/org.apache.cordova.console),并将缺少的文件(CDVLLogger.h和CDVLLogger.m)复制到此目录。然后编译成功。

我使用科尔多瓦版本3.5

+0

你从哪里得到这些文件? –

2

发生在我身上的PhoneGap的3.5和Xcode 6个

步骤:

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

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

2

在我的情况......该解决方案是添加这行代码,我使用所有的插件。在我的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

0

如果您在使用离子然后试图运行cordova run ios --device而不是得到这个错误ionic run ios --device它解决了我的问题。因为该项目是一个离子1项目,我认为离子cli v2正在搞乱。在更新Ionic cli之前,我没有任何问题。

0

我有与SQLitePlugin非常相同的问题。我在这篇文章中尝试了一些建议的解决方案,但他们中没有一个完全为我工作。然后我尝试删除平台/ ios目录(我正在为iPhone开发),再次添加ios平台(离子添加平台ios)并重建项目。突然之间,一切都像魅力一样。我不必创建一个新项目,也不必删除插件。