为什么所有Cordova插件都无法在iOS上加载?

时间:2019-04-04 01:09:23

标签: cordova cordova-plugins cordova-ios

我被要求对以前由另一位开发人员构建的( non-Ionic )Cordova应用程序进行一些更改。该项目带有一个依赖项管理文件,但是以前的开发人员将Cordova本身排除在依赖项之外(大概是因为他在计算机上全局安装了Cordova),所以我不知道他使用的是哪个版本的Cordova。我添加了最新版本的Cordova(9.0.0)。

如果我通过Cordova在浏览器中运行该应用程序,则效果很好。但是,当我为iOS构建并在设备上运行时,很明显,有些东西无法正常工作,例如启动屏幕和键盘设置。

如果我检查Xcode中的控制台输出,则在应用程序启动后立即看到许多有关插件的错误消息。以下是一些示例:

  

2019-04-03 17:24:50.502504-0700 APP_NAME [693:225720]错误:找不到插件BuildInfo,或者不是CDVPlugin。在config.xml中检查您的插件映射。

     

2019-04-03 17:24:50.502721-0700 APP_NAME [693:225720]-[CDVCommandQueue executePending] [第142行] FAILED pluginJSON = [“ BuildInfo1245166954”,“ BuildInfo”,“ init”,[]] < / p>      

2019-04-03 17:24:52.005066-0700 APP_NAME [693:225720]错误:找不到插件'StatusBar',或者不是CDVPlugin。在config.xml中检查您的插件映射。

     

2019-04-03 17:24:52.005259-0700 APP_NAME [693:225720]-[CDVCommandQueue executePending] [第142行] FAILED pluginJSON = [“ StatusBar1245166955”,“ StatusBar”,“ _ ready”,[]] < / p>      

2019-04-03 17:24:52.005390-0700 APP_NAME [693:225720]错误:找不到插件'StatusBar',或者不是CDVPlugin。在config.xml中检查您的插件映射。

     

2019-04-03 17:24:52.005453-0700 APP_NAME [693:225720]-[CDVCommandQueue executePending] [第142行] FAILED pluginJSON = [“ INVALID”,“ StatusBar”,“ hide”,[]] < / p>

尽管出现错误消息,但config.xml文件已经列出了插件:

<plugin name="cordova-plugin-whitelist" spec="1" />
<plugin name="cordova-plugin-keyboard" spec="~1.2.0" />
<plugin name="cordova-plugin-splashscreen" spec="~5.0.2" />
<plugin name="cordova-plugin-statusbar" spec="~2.4.2" />
<plugin name="cc.fovea.cordova.purchase" spec="~7.2.5">
    <variable name="BILLING_KEY" value="[removed]" />
</plugin>
<plugin name="cordova-plugin-buildinfo" spec="^2.0.2" />

platforms/ios/ios.json中,是这样的:

"installed_plugins": {
    "cc.fovea.cordova.purchase": {
      "PACKAGE_NAME": "[removed]"
    },
    "cordova-plugin-buildinfo": {
      "PACKAGE_NAME": "[removed]"
    },
    "cordova-plugin-keyboard": {
      "PACKAGE_NAME": "[removed]"
    },
    "cordova-plugin-splashscreen": {
      "PACKAGE_NAME": "[removed]"
    },
    "cordova-plugin-statusbar": {
      "PACKAGE_NAME": "[removed]"
    },
    "cordova-plugin-whitelist": {
      "PACKAGE_NAME": "[removed]"
    }

platforms/ios/www/cordova_plugins.js中,是这样的:

cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
  {
    "id": "cc.fovea.cordova.purchase.InAppPurchase",
    "file": "plugins/cc.fovea.cordova.purchase/www/store-ios.js",
    "pluginId": "cc.fovea.cordova.purchase",
    "clobbers": [
      "store"
    ]
  },
  {
    "id": "cordova-plugin-buildinfo.BuildInfo",
    "file": "plugins/cordova-plugin-buildinfo/www/buildinfo.js",
    "pluginId": "cordova-plugin-buildinfo",
    "clobbers": [
      "BuildInfo"
    ]
  },
  {
    "id": "cordova-plugin-keyboard.keyboard",
    "file": "plugins/cordova-plugin-keyboard/www/keyboard.js",
    "pluginId": "cordova-plugin-keyboard",
    "clobbers": [
      "window.Keyboard",
      "cordova.plugins.Keyboard"
    ]
  },
  {
    "id": "cordova-plugin-splashscreen.SplashScreen",
    "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
    "pluginId": "cordova-plugin-splashscreen",
    "clobbers": [
      "navigator.splashscreen"
    ]
  },
  {
    "id": "cordova-plugin-statusbar.statusbar",
    "file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
    "pluginId": "cordova-plugin-statusbar",
    "clobbers": [
      "window.StatusBar"
    ]
  }
];
module.exports.metadata = 
// TOP OF METADATA
{
  "cc.fovea.cordova.purchase": "7.2.8",
  "cordova-plugin-buildinfo": "2.0.2",
  "cordova-plugin-keyboard": "1.2.0",
  "cordova-plugin-splashscreen": "5.0.2",
  "cordova-plugin-statusbar": "2.4.2",
  "cordova-plugin-whitelist": "1.3.3"
};
// BOTTOM OF METADATA
});

platforms/ios/www/plugins中,每个插件都有一个文件夹。每个文件夹都包含一个www文件夹,其中有一个JS文件:

platforms/ios/www/plugins
    +---cc.fovea.cordova.purchase
    ¦   +---www
    ¦           store-ios.js
    ¦
    +---cordova-plugin-buildinfo
    ¦   +---www
    ¦           buildinfo.js
    ¦
    +---cordova-plugin-keyboard
    ¦   +---www
    ¦           keyboard.js
    ¦
    +---cordova-plugin-splashscreen
    ¦   +---www
    ¦           splashscreen.js
    ¦
    +---cordova-plugin-statusbar
        +---www
                statusbar.js

在Xcode中,所有插件的.m文件在“构建阶段”>“编译源代码”中列出

我反复卸载并重新安装了ios平台并重建了项目,但无济于事。

我知道插件可以在以前的开发人员构建的版本中使用,并且我不明白为什么在构建时插件没有加载;为什么?一切似乎都已正确配置。

1 个答案:

答案 0 :(得分:0)

我通过降级到Cordova 8.1.2解决了这个问题