我在XCode中收到此错误:
2013-08-23 14:36:18.284 Tell The DJ[14955:c07] ERROR: Plugin 'Device' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2013-08-23 14:36:18.284 Tell The DJ[14955:c07] -[CDVCommandQueue executePending] [Line 116] FAILED pluginJSON = [
"Device1096677259",
"Device",
"getDeviceInfo",
[
]
]
2013-08-23 14:36:18.285 Tell The DJ[14955:c07] CDVPlugin class CDVConnection (pluginName: NetworkStatus) does not exist.
2013-08-23 14:36:18.285 Tell The DJ[14955:c07] ERROR: Plugin 'NetworkStatus' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2013-08-23 14:36:18.285 Tell The DJ[14955:c07] -[CDVCommandQueue executePending] [Line 116] FAILED pluginJSON = [
"NetworkStatus1096677260",
"NetworkStatus",
"getConnectionInfo",
[
]
]
我使用命令行界面安装了Phonegap 3.0,并将我的www文件粘贴到项目文件夹中。该应用程序工作正常,但当我来到设备ID,相机,网络连接等本机功能时它失败并让我得到这个错误。但我认为我的config.xml是对的?
<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.helloCordova" version="2.0.0" xmlns="http://www.w3.org/ns/widgets">
<name>Hello Cordova</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<feature name="LocalStorage">
<param name="ios-package" value="CDVLocalStorage" />
</feature>
<access origin="http://dev.tellthedj.de" />
<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="orientation" value="portrait" />
<preference name="webviewbounce" value="false" />
<preference name="prerendered-icon" value="true" />
<preference name="phonegap-version" value="3.0.0" />
<preference name="fullscreen" value="false" />
<preference name="stay-in-webview" value="false" />
<preference name="android-minSdkVersion" value="7" />
<preference name="android-installLocation" value="internalOnly" />
<preference name="target-device" value="universal" />
<preference name="autohide-splashscreen" value="true" />
<preference name="load-url-timeout" value="60000" />
<preference name="show-splashscreen-spinner" value="true" />
<preference name="show-splash-screen-spinner" value="true" />
<preference name="allow-inline-media-playback" value="false" />
<preference name="launch-mode" value="standard" />
<feature name="Media">
<param name="ios-package" value="CDVSound" />
</feature>
<feature name="Camera">
<param name="ios-package" value="CDVCamera" />
</feature>
<feature name="Console">
<param name="ios-package" value="CDVLogger" />
</feature>
<feature name="Device">
<param name="ios-package" value="CDVDevice" />
</feature>
<feature name="Notification">
<param name="ios-package" value="CDVNotification" />
</feature>
<feature name="File">
<param name="ios-package" value="CDVFile" />
</feature>
<feature name="FileTransfer">
<param name="ios-package" value="CDVFileTransfer" />
</feature>
<feature name="Geolocation">
<param name="ios-package" value="CDVLocation" />
</feature>
<feature name="Capture">
<param name="ios-package" value="CDVCapture" />
</feature>
<feature name="NetworkStatus">
<param name="ios-package" value="CDVConnection" />
</feature>
<feature name="SplashScreen">
<param name="ios-package" value="CDVSplashScreen" />
</feature>
<plugins>
<plugin name="Device" value="CDVDevice" />
</plugins>
</widget>
答案 0 :(得分:73)
我正在使用PhoneGap 3.0 / 3.1并且在重建之前删除了本地构建文件夹(因为我必须在辅助构建脚本中复制图标和内容)。这破坏了我的插件并产生了同样的错误信息。
最后,我发现在删除./plugins/ios.json
时我必须删除./platforms/ios
以确保重建插件。
答案 1 :(得分:52)
删除platforms / ios文件夹不是我的解决方案,因为对xcode项目的所有手动自定义都将丢失。
但有一个简单的方法:
在XCode中,转到Build Phases - &gt;打开Compiled Sources下拉列表。 单击+并添加应该在您的。中的缺少的插件.m文件 插件目录(但编译源中缺少)。
此解决方案来自另一个堆栈溢出答案,此处为:https://stackoverflow.com/a/21148428/80254
另一种选择:
在xcode中确保插件的源文件具有&#39;目标成员资格&#39;设置集:在文件资源管理器中转到插件&gt; CDVDevice.m并检查您的应用名称旁边是否有勾选&#34;目标会员资格&#34;在xcode窗口的右侧。这实际上与其他解决方案相同,但更方便。
答案 2 :(得分:17)
我遇到了同样的问题。我遵循了Jeffrey Van Alstine给出的解决方案。这是我用于构建和测试使用Phonegap 3.0 / 3.1开发的iOS应用程序的脚本。
#!/bin/bash
echo "Killing xcode..."
kill $(ps aux | grep 'Xcode' | awk '{print $2}')
rm -r platforms/ios
rm plugins/ios.json
phonegap build ios
open platforms/ios/*.xcodeproj
将其保存为bash文件,例如ios.sh
到您的工作目录(包含www
文件夹的目录)并运行./ios.sh
答案 3 :(得分:2)
答案 4 :(得分:1)
尝试重新安装插件:
phonegap本地插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
答案 5 :(得分:1)
我使用Cordova 3.7并且我用Kobkrit Viriyayudhakorn的解决方案解决了问题,但当然你需要使用
cordova build ios
而不是
phonegap build ios
答案 6 :(得分:0)
我认为您需要使用正确的config.xml 对我来说,它是Xcode项目目标文件夹config.xml,而不是平台www文件夹
答案 7 :(得分:0)
我找到了一个适合我的解决方案。我正在使用Compass插件,在添加插件后我注意到config.xml(插件文档)说它应该有
<feature name="Compass">
<param name="ios-package" value="**CDVLocation**" />
</feature>
虽然插件中的ios.json已添加
"config.xml": {
"/*": {
"<feature name=\"Compass\"><param name=\"ios-package\" value=\"**CDVCompass**\" /></feature>": 1,
"<feature name=\"Device\"><param name=\"ios-package\" value=\"CDVDevice\" /></feature>": 1
}
其中一个引用CDVCompass而另一个CDVLocation ...将xml更改为CDVCompass就可以了,现在应用正在运行。
答案 8 :(得分:0)
我已经厌倦了删除和重新添加插件问题的平台!即使现在(2014/10),它似乎仍然是一个问题,如果你在添加平台后添加插件,插件有时不会传播到相应的平台文件夹/等。请注意,这似乎主要影响iOS - 而不是Android。
我认为我的解决方案只是bjunix之前发布的同样事情的更新方法 - 但在XCode 6中修复此类事情而不删除/重新添加我的平台我:
完成上述操作后,我的项目最终构建完成。
答案 9 :(得分:0)
当发生这种情况时,似乎负责更改pbxproj文件的xcode npm包有时会留下对已删除的插件文件的引用。我没有追踪到这种情况发生的确切情况,但它似乎发生在频繁的插件删除/添加操作(例如更新插件)。
我怀疑当删除插件并且xcode npm包在其作业中失败时,它只能从PBXBuildFile部分删除插件文件引用但没有其他部分,使pbxproj处于损坏状态。
当xcode npm包尝试再次添加插件文件引用时,它首先检查引用是否已经在pbxproj中。它在PBXFileReference部分查找,因为它在那里找到对插件的引用,中止进一步处理,让我们无处可去。
我的解决方案,虽然是一个黑客,但它强迫xcode npm包检查PBXBuildFile部分。该部分将缺少引用,反过来插件将正确重新安装。
在此行上将pbxFileReferenceSection
更改为pbxBuildFileSection
:https://github.com/alunny/node-xcode/blob/master/lib/pbxProject.js#L620
重新安装你的插件,你应该好好去。
答案 10 :(得分:0)
我的情况安装Paypal插件后我面临问题。
我通过在编译源中添加“PayPalMobileCordovaPlugin.m”来解决它。
所以你只需要在编译源中添加.m文件,添加它对我有用。
希望它为你工作
答案 11 :(得分:0)
如果您有一个已引用但未安装的插件,也会发生这种情况。如果您已经尝试了上述解决方案并且找不到引用的插件的.m文件,则可能是该插件未真正安装。
我会检查你的插件目录,以确保其中有文件。如果没有,请重新安装插件。当我从config.xml恢复插件时,我遇到git repo中的拼写错误时遇到了这个问题。
答案 12 :(得分:-1)
我通过将“plugin”条目更改为config.xml中的“feature”条目来解决此问题。 (使用PhoneGap 3.1 / iOS)。这就是修复的样子:
<feature name="DGGeofencing">
<param name="ios-package" value="DGGeofencing"/>
</feature>
答案 13 :(得分:-4)
我通过CLI工具
完全重新安装了Node.js和Phonegap,解决了这个问题