Почему все плагины Cordova не загружаются на iOS?

#cordova #cordova-plugins #cordova-ios

#кордова #cordova-плагины #cordova-ios

Вопрос:

Меня попросили внести некоторые изменения в (неионное) приложение Cordova, ранее созданное другим разработчиком. Проект поставлялся с файлом управления зависимостями, но предыдущий разработчик исключил саму Cordova из зависимостей (предположительно, потому что на его компьютере была глобально установлена Cordova), поэтому я не знаю, какую версию Cordova он использовал. Я добавил самую последнюю версию Cordova (9.0.0).

Приложение отлично работает, если я запускаю его в браузере через Cordova. Однако, когда я создаю для iOS и запускаю на своем устройстве, сразу становится очевидно, что некоторые вещи работают некорректно, такие как заставка и настройки клавиатуры.

Если я проверяю вывод консоли в Xcode, я вижу множество сообщений об ошибках плагинов сразу после запуска приложения. Вот несколько примеров:

2019-04-03 17:24:50.502504-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] ОШИБКА: плагин BuildInfo’не найден или не является подключаемым модулем CDV. Проверьте соответствие вашего плагина в config.xml.

2019-04-03 17:24:50.502721-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] -[CDVCommandQueue executePending] [Строка 142] СБОЙ pluginJSON = [«BuildInfo1245166954», «BuildInfo», «init»,[]]

2019-04-03 17:24:52.005066-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] ОШИБКА: плагин ‘StatusBar’ не найден или не является подключаемым модулем CDV. Проверьте соответствие вашего плагина в config.xml.

2019-04-03 17:24:52.005259-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] -[CDVCommandQueue executePending] [Строка 142] СБОЙ pluginJSON = [«StatusBar1245166955», «Строка состояния», «_ready»,[]]

2019-04-03 17:24:52.005390-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] ОШИБКА: плагин ‘StatusBar’ не найден или не является подключаемым модулем CDV. Проверьте соответствие вашего плагина в config.xml.

2019-04-03 17:24:52.005453-0700 ИМЯ_ПРИЛОЖЕНИЯ[693:225720] -[CDVCommandQueue executePending] [Строка 142] СБОЙ pluginJSON = [«НЕДОПУСТИМЫЙ», «Строка состояния», «скрыть»,[]]

Несмотря на сообщения об ошибках, 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]"
    }
  

In platforms/ios/www/cordova_plugins.js , there is this:

 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. Стоит попробовать удалить сами плагины, а затем добавить их снова.

Ответ №1:

Я решил эту проблему, понизив версию до Cordova 8.1.2