没有找到Phonegap 3.0 IOS插件

时间:2013-08-23 12:44:02

标签: ios cordova

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

14 个答案:

答案 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窗口的右侧。这实际上与其他解决方案相同,但更方便。

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

答案 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)

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

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

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

答案 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中修复此类事情而不删除/重新添加我的平台我:

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

完成上述操作后,我的项目最终构建完成。

enter image description here

答案 9 :(得分:0)

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

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

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

我的解决方案,虽然是一个黑客,但它强迫xcode npm包检查PBXBuildFile部分。该部分将缺少引用,反过来插件将正确重新安装。

在此行上将pbxFileReferenceSection更改为pbxBuildFileSectionhttps://github.com/alunny/node-xcode/blob/master/lib/pbxProject.js#L620

重新安装你的插件,你应该好好去。

答案 10 :(得分:0)

我的情况安装Paypal插件后我面临问题。

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

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

检查屏幕截图。Screenshot After Add .m File

希望它为你工作

答案 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,解决了这个问题