【问题标题】:Cordova iOS plugins not found未找到 Cordova iOS 插件
【发布时间】:2013-06-27 09:31:15
【问题描述】:

我最近从 2.3.0 升级到了 Cordova 2.9.0。遵循所有升级说明后,我能够让应用程序在模拟器中启动。但是,在 Xcode 中,我看到以下错误:

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>

【问题讨论】:

    标签: ios xcode cordova


    【解决方案1】:

    我重新使用旧的&lt;plugin&gt; 格式。虽然它已被弃用,但它是唯一对我有用的方法。

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

    【讨论】:

    • 嘿,每次我使用新版本的 Phonegap 时,我总是发现设置一个新项目更容易,然后将我的文件复制回来。这只是我的偏好。
    • 我也做了同样的事情,但是弃用消息真的让我大吃一惊。太令人沮丧了。
    • 我做了同样的事情,它适用于 facebook 连接插件:
    【解决方案2】:

    我有同样的问题。我刚刚使用节点的包管理器下载了 cordova 3.0 命令行工具。然后我使用终端中的工具创建我的项目,向其中添加平台,然后像这样构建它。

    cordova create myApp com.project.RobertW myApp
    cd myApp
    cordova platform add ios
    cordova platform add android
    cordova build
    

    之后,当我尝试在模拟器中运行 Xcode 时,我在 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>
    

    现在您的所有控制台功能都应该可以正常工作而不会引发错误。

    【讨论】:

    • 大家好,我刚刚遇到了与 CDVDevice 相同的问题。唯一可行的方法是创建一个新项目,如图所示重新添加插件,然后在 www 文件夹中添加现有代码。然后它又工作了(耶)。
    • 我已经通过删除 ios 平台并再次添加它解决了这个问题(当我更新了 cordova 6.0.0 -> 6.1.1 时出现了这个问题)。在创建新项目之前尝试一下。
    • 它对我有用,因为我的 console.log 是我有一个空白屏幕的关键问题。谢谢,雨果
    • 谢谢!!在我的情况下,在 Xcode 的 iOS 版本的 config.xml 中添加名称:CDVDevice、CDVStatusBar、CDVFile、CDVSplashScreen
    【解决方案3】:

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

    【讨论】:

    • 使用cordova,卸载并重新安装插件对我有用。
    【解决方案4】:

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

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

    Similar question with answers.

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我很好奇是什么导致插件文件没有检查“目标成员资格”。我查看了其他插件的 plugin.xml 文件,我看不出有什么不同。
      • 我正在使用相同的代码构建多个应用程序,因此我在 xcode 项目中创建了多个目标。只有最初创建的默认目标具有其成员资格中的文件。所以我的科尔多瓦命令不知道它们。我承认我没有深入研究 config.json 或类似的东西,看看是否有办法让我处理 xcode 项目中的多个目标。但是在 xcode 中手动添加它们是一个简单的修复。
      • 类似的东西对我有用:“在 XCode 中,转到 Build Phases -> 打开 Compiled Sources 下拉菜单。单击 + 并添加缺少的插件 .m 文件。”来自stackoverflow.com/a/21148428/80254
      • 您的解决方案实际上也是如此,但更方便。
      • 这里是issue on Cordova's bug tracker。我已经跟踪并调试了这个问题。见comments here for explanation and work around。这是 node-xcode 的问题,为此我提交了issue 和pull request,已被接受。
      【解决方案6】:

      类似问题的答案对我有用:

      删除 ./plugins/ios.json 以确保重新构建插件。

      Phonegap 3.0 IOS plugins not found

      【讨论】:

      • 完美运行,谢谢..!
      • 帮助! cordova: ^8.0.0cordova-ios: ^4.5.5
      【解决方案7】:

      我也有这个问题。我只是自己创建了目录(platforms/ios/appname/Plugins/org.apache.cordova.console)并将丢失的文件(CDVLLogger.h 和 CDVLLogger.m)复制到该目录。然后编译成功。

      我使用的是科尔多瓦 3.5 版

      【讨论】:

      • 你从哪里得到这些文件?
      【解决方案8】:

      在 Xcode 6 的 phonegap 3.5 上发生在我身上

      步骤:

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

      可能不是最佳解决方案 - 因为您丢失了 xcode 设置 - 但它解决了问题。

      【讨论】:

        【解决方案9】:

        就我而言...解决方案是在我的 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>
        

        【讨论】:

        • 此解决方案仅适用于我的情况。我有一些手动添加的插件,这解决了我的问题。谢谢!
        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

          我在使用 SQLitePlugin 时遇到了同样的问题。我在这篇文章中尝试了一些建议的解决方案,但没有一个完全适合我。然后我尝试删除 platform/ios 目录(我正在为 iPhone 开发),再次添加 ios 平台(ionic add platform ios)并重建项目。突然间,一切都像魅力一样运转起来。我不必创建新项目,也不必删除插件。

          【讨论】:

            【解决方案12】:

            我们在 Xcode 中打开了项目,并查看了 Project navigator 侧边栏。

            在虚拟“插件”文件夹下,我们注意到该文件夹​​中缺少某些插件的文件。

            解决方案是右键单击 Plugins 并选择 Add Files to "ProjectName"...

            然后我们导航到插件的文件夹并在那里添加所有.swift 和.m 和.h 文件。

            这样做会在文件 platforms/ios/[ProjectName].xcodeproj/project.pbxproj 中创建新的引用,因此我们保留了这些更改。

            【讨论】:

              【解决方案13】:

              对于新的科尔多瓦版本

              在现有项目中大量保存插件

              如果你有一个预先存在的项目,并且你想保存项目中所有当前添加的插件,你可以使用:

              cordova plugin save
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-10-06
                • 1970-01-01
                • 2017-11-12
                • 2016-04-24
                • 2013-10-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多