【问题标题】:Phonegap 3.0 IOS plugins not found找不到Phonegap 3.0 IOS插件
【发布时间】:2013-08-26 12:40:55
【问题描述】:

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

【问题讨论】:

  • 你有没有设法解决这个问题?我遇到了同样的情况,按照下面的建议重新安装没有帮助。我想知道这里需要做什么才能使其正常工作。
  • 我还没有弄清楚这一点。但我正在使用 iOS7,还在等待 iOS7 的 phongap 正式发布。也许它适用于新的 phonegap 版本。您使用哪种 iOS?
  • @ZoltanMagyar 寻找我的答案! ;)
  • 6.1.3 在这里。同时,我通过从头开始项目并在为 iOS 构建之前使用“phonegap local plugin add”安装所有cordova插件解决了这个问题。
  • 有人有不同的解决方案吗?我重新安装了插件,还再次安装了 phonegap 和 nodejs。我还删除了插件并再次安装它们。我不想再做一个新鲜的项目了。

标签: ios cordova


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    所以你只需要在编译源中添加 .m 文件就可以了。

    查看截图。

    希望它对你有用

    【讨论】:

      【解决方案3】:

      发生这种情况时,负责更改 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

      重新安装你的插件,你应该一切顺利。

      【讨论】:

        【解决方案4】:

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

        cordova build ios    
        

        而不是

        phonegap build ios    
        

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

            但是有一个简单的方法:

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

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

            另一种选择:

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

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

            【讨论】:

            • 您的第一个解决方案奏效了!请注意,然后我遇到了通知插件的问题,根据这篇 SO 文章解决了这个问题:stackoverflow.com/questions/22012394/…
            • 谢谢!帮了我一把。
            • 也为我工作,谢谢.. 很糟糕的是,cordova 随机丢失了插件文件..我在这个故障上损失了半天
            • “目标会员”通常对我有用.. 但是.. 你如何为 cordova run ios 做到这一点(不是通过 XCode)?我问是因为我使用(非常有用!)离子实时重载进行快速开发,但我仍然没有弄清楚是否/如何使用 XCode 进行实时重载。
            【解决方案7】:

            我找到了适合我的解决方案。我正在使用 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】:

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

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

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

              【讨论】:

              • 从 3.3 升级到 3.4.1,这并没有解决我的问题。还删除并重新添加了所有插件以获得最新版本。
              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                我遇到了同样的问题。我遵循了 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

                【讨论】:

                • 谢谢!我整天都在为此苦苦挣扎。
                • 这在大量重建时非常方便。
                • 如果您对 xcode 项目进行了手动自定义,则删除platforms/ios 文件夹不是解决方案。请参阅下面的答案以获取替代方法。
                【解决方案11】:

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

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

                【讨论】:

                • 这是我认为最好的答案。
                • 谢谢。并使用$ cordova ios prepare/build 重新生成正确的
                • 如何删除 ./plugins/ios.json
                • @nuteron:你问如何删除文件? rm插件/ios.json
                • 如果您对 xcode 项目进行了手动自定义,则删除platforms/ios 文件夹不是解决方案。请参阅下面的答案以获取替代方法。
                【解决方案12】:

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

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

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                  • 无法理解为什么这会被标记为答案。这显然是一种“重新安装 Windows”类型的解决方案,而实际的解决方案要容易得多。
                  【解决方案14】:

                  尝试重新安装插件:

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

                  【讨论】:

                  • 重新安装插件不起作用,在重建之前清理构建也不起作用。 @bjunix 解决方案有效
                  • @Zanderi 可能是因为我的建议已经有一年多了。我认为 Phonegap 从那以后有了一些改进,并发布了一些新版本来纠正这些问题。
                  猜你喜欢
                  • 2013-09-04
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-01
                  • 2013-08-27
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-17
                  • 1970-01-01
                  相关资源
                  最近更新 更多