29

我在 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>
4

14 回答 14

73

我使用的是 PhoneGap 3.0/3.1,并在重建之前删除了本地构建文件夹(因为我必须在辅助构建脚本中复制图标和内容)。这破坏了我的插件并产生了同样的错误消息。

最后我发现我必须在删除./plugins/ios.json时删除./platforms/ios以确保插件被重建。

于 2013-10-21T18:04:22.100 回答
52

删除 platform/ios 文件夹对我来说不是一个解决方案,因为对 xcode 项目的所有手动自定义都将丢失。

但是有一个简单的方法:

在 XCode 中,转到 Build Phases -> 打开 Compiled Sources 下拉菜单。单击 + 并添加缺少的插件 .m 文件,该文件应该在您的插件目录中(但从编译的源代码中丢失)。

该解决方案来自另一个堆栈溢出答案,此处:https ://stackoverflow.com/a/21148428/80254

另一种选择:

在 xcode 中确保插件的源文件设置了“目标成员资格”设置:在 File-Explorer 中,转到 Plugins > CDVDevice.m 并检查右侧“目标成员资格”中您的应用名称旁边是否有勾号xcode 窗口的一侧。这实际上与其他解决方案相同,但更方便一些。

从这里:https ://stackoverflow.com/a/20576744/80254

于 2014-05-29T13:05:54.067 回答
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

于 2013-11-01T18:52:30.523 回答
2

这似乎是 3.* 版本的已知问题

https://issues.apache.org/jira/browse/CB-4971

您可以通过将 Phonegap 升级到 3.4 版来解决此问题。

于 2014-03-10T03:28:07.137 回答
1

尝试重新安装插件:

phonegap 本地插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git

于 2013-08-24T05:29:49.767 回答
1

我使用 Cordova 3.7,我用 Kobkrit Viriyayudhakorn 的解决方案解决了这个问题,但是你当然需要使用

cordova build ios    

代替

phonegap build ios    
于 2014-10-14T08:55:37.647 回答
0

我认为您需要为我使用正确的 config.xml,它是 Xcode 项目目标文件夹 config.xml,而不是平台 www 文件夹

于 2013-12-05T17:29:57.663 回答
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 就可以了,现在该应用程序正在运行。

于 2014-04-03T16:49:38.533 回答
0

我厌倦了为插件问题删除和重新添加平台!即使现在(2014/10)似乎仍然是一个问题,如果在添加平台后将插件添加到应用程序,插件有时不会传播到相应的平台文件夹/等。请注意,这似乎主要影响 iOS - 而不是 Android。

我认为我的解决方案只是 bjunix 之前发布的做同样事情的更新方法 - 但在 XCode 6 中修复这种事情而不删除/重新添加我的平台我:

  • 在左侧项目导航器面板中展开我的 App/Plugins 文件夹
  • 单击列表中当前以红色文本显示的每个插件文件(一次一个)
  • 跳转到右侧(实用程序)面板并单击“身份和类型”部分中的文件夹图标,将其重新链接到实际文件(参见下面的屏幕截图)。

完成上述操作后,我的项目终于建立了。

在此处输入图像描述

于 2014-10-09T13:32:11.610 回答
0

发生这种情况时,似乎负责更改 pbxproj 文件的 xcode npm 包有时会留下对已删除的插件文件的引用。我还没有追踪到这种情况发生的确切情况,但它似乎是由于频繁的插件删除/添加操作(例如更新插件)而发生的。

我怀疑当一个插件被删除并且 xcode npm 包在其工作中失败时,它只能从 PBXBuildFile 部分中删除插件文件引用,而不能从其他部分中删除,从而使 pbxproj 处于损坏状态。

当 xcode npm 包尝试再次添加插件文件引用时,它首先检查引用是否已经在 pbxproj 中。它在 PBXFileReference 部分中查找,因为它在那里找到了对插件的引用,所以中止了进一步的处理,让我们无处可去。

我的解决方案是强制 xcode npm 包检查 PBXBuildFile 部分,尽管归结为 hack。该部分将缺少参考资料,而插件将被正确重新安装。

更改pbxFileReferenceSectionpbxBuildFileSection在此行:https ://github.com/alunny/node-xcode/blob/master/lib/pbxProject.js#L620

重新安装你的插件,你应该很高兴。

于 2015-04-14T21:11:26.300 回答
0

我的情况 安装 Paypal 插件后,我遇到了问题。

我通过在编译源中添加“PayPalMobileCordovaPlugin.m”来解决它。

所以你只需要在编译源中添加 .m 文件添加它对我有用。

检查屏幕截图。添加 .m 文件后的屏幕截图

希望它对你有用

于 2015-09-16T07:01:47.850 回答
0

如果您有一个被引用但未安装的插件,也会发生这种情况。如果您尝试了上述解决方案并且找不到引用的插件的 .m 文件,则可能是该插件没有真正安装。

我会检查您的插件目录以确保其中有文件。如果没有,请重新安装插件。从 config.xml 恢复插件时,当我在 git repo 中出现拼写错误时,我遇到了这个问题。

于 2015-10-31T18:12:30.040 回答
-1

我通过将 config.xml 中的“插件”条目更改为“功能”条目解决了这个问题。(使用 PhoneGap 3.1/iOS)。这是修复的样子:

<feature name="DGGeofencing">
    <param name="ios-package" value="DGGeofencing"/>
</feature>
于 2013-10-16T16:37:22.033 回答
-4

我通过 CLI 工具完全重新安装 Node.js 和 Phonegap 解决了这个问题

于 2013-09-10T07:38:33.780 回答