Los complementos de Cordova 3.3.1-0.1.2 (Phonegap) no funcionan

Tengo un proyecto de testing cordova 3.3.1-0.1.2 para iOS, donde utilizo los siguientes complementos ( cordova plugin ls ):

 [ 'com.phonegap.plugins.PushPlugin', 'org.apache.cordova.console', 'org.apache.cordova.device', 'org.apache.cordova.splashscreen' ] 

He agregado los complementos como este cordova plugin add org.apache.cordova.device . En mi git repo, veo que agrega un montón de files al directory plugins/org.apache.cordova.device , crea un CDVDevice.h y un CDVDevice.m en mi directory de complementos de iOS, actualiza el ios.json , actualiza el file *.xcodeproj y agrega los complementos a mi config.xml dentro de las platforms/ios/test-app/config.xml :

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

Pero cuando bash acceder al device o a la propiedad window.device dentro de JS, me dice que ese device no está definido. Lo extraño es que PushPlugin está presente:

 document.addEventListener("deviceready", function () { console.log(device); console.log(window.device); console.log(window.plugins.pushNotification); }); 

El object window.plugins solo muestra el complemento pushNotification como una propiedad. Es extraño, porque están todos instalados, y durante la installation, dijo cordova, todo estaba bien.

Estoy un poco confundido acerca de la documentation obsoleta y mixta con el teléfono, pero estaría bien si uno de ellos funcionara. También vi una definición de complemento, dentro de un config.xml como este

 <gap:plugin name="org.apache.cordova.device" /> 

¿Alguien me puede explicar, cuál es la diferencia? ¿Es el path (con feature ) que estoy trabajando obsoleto con cordova 3.3? Cuando trato de utilizar el formatting <gap:plugin... , mi aplicación falla al iniciar.

Por lo tanto, ayúdenme a solucionar esto y aclarar mi mente;)

Lamentablemente, ninguna de las respuestas funcionó. Afortunadamente, encontré la solución en esta list de correo:

http://mail-archives.apache.org/mod_mbox/cordova-dev/201312.mbox/%3CCABiQX1Vat5XvmKkWt=+viL9oXWnOiAz5ee95h8oJp0j4MU9pJQ@mail.gmail.com%3E

Allí dicen, que esto es un error en cordova 3.3.1. En estas versiones, los complementos se copyn en el directory .staging de las diferentes plataforms.

Por lo tanto, la degradación con npm a cordova 3.3.0 ahora funciona (en Mac OS X):

 sudo npm remove -g cordova sudo npm view cordova versions sudo npm install -g cordova@3.3.0-rc.1 

Y también compruebe si cordova también está instalado desde phonegap. Si solo usa cordova y las funciones que no son de Phonegap (como la compilation remota), puede eliminar de forma segura el package de faja de teléfono con

 sudo npm remove -g phonegap 

Actualizar

La versión actual 3.4.0 funciona bien, y no tiene estos problemas.

definición de plugin usando gap:plugin es para configurar complementos para la compilation de phonegap (para que no lo necesite para compilation local).


Como sugirió MBillau, los complementos se agregan a la plataforma solo después de ejecutar cordova prepare ios (o cordova build ios que inicia prepare y luego crea el proyecto).

Cuando ejecute Prepararse, los files javascript del complemento deben copyrse a la carpeta www/plugins/pluginfullname/www carpeta platforms/ios folder .

Si los files no están allí, puede haber un problema con el file ios.json dañado. En ese caso, a veces la desinstallation y la reinstallation del complemento resuelven el problema. En algún caso, debe eliminar el file ios.json y vaciar la carpeta de complementos en la raíz de su proyecto (y tal vez también la carpeta de plataforms) y volver a instalar todos los complementos.


Si el object window.plugins solo muestra el complemento pushnotification, es solo porque es el único complemento instalado en este object:

  • org.apache.cordova.console está en la console y cordova.logger
  • org.apache.cordova.device está en window.device
  • org.apache.cordova.splashscreen está en navigator.splashscreen

Para saber el nombre del object JavaScript que se utilizará, debe leer la documentation del complemento o ver la propiedad js-module / clobbers en el file plugin.xml del complemento.

Desde la raíz de su proyecto de Cordova, vaya a ./platforms/ios/

 cd platforms/ios 

Aquí debe haber una carpeta ./build – esto contiene packages previamente construidos que Cordova luego usa para 'cargar de forma diferida' – es decir, para que Cordova no tenga que search files constantemente desde varias ubicaciones, sino que las almacena localmente. Sin embargo, he encontrado que esto es problemático.

Eliminar esta carpeta:

 sudo rm -r build 

Cuando se haya ido, reconstruya su proyecto de Cordova:

 cordova build 

Debería volver a crear la carpeta de compilation pero, lo que es más importante, los complementos se mostrarán en config.xml .

Compruebe que el file index.html tiene las líneas correctas <script></script> .

Tuve un problema al crear un nuevo proyecto a través de CLI. El file index.html hace reference a phonegap.js en lugar de cordova.js