2014-01-27 3 views
5

У меня есть тестовый проект Cordova 3.3.1-0.1.2 для IOS, где я использую следующие плагины (cordova plugin ls):Кордова 3.3.1-0.1.2 (PhoneGap) плагинов не работает

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

Я добавил такие плагины cordova plugin add org.apache.cordova.device. В моем мерзавца репо, я вижу, что он добавляет кучу файлов в директорию plugins/org.apache.cordova.device, создает CDVDevice.h и CDVDevice.m в моей прошивке плагин каталога, обновляют ios.json, обновляет файл *.xcodeproj и добавляет плагины к моим config.xml внутри platforms/ios/test-app/config.xml:

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

Но когда я пытаюсь получить доступ к device или window.device свойство внутри JS, он говорит мне, что device не определено. Странная вещь, что pushPlugin присутствует:

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

объект window.plugins только перечисляет pushNotification плагин как свойство. Это странно, потому что все они установлены, и во время установки кордова сказала, что все в порядке.

Я немного смущен, об устаревшей и смешанной документации по телефону, но это было бы нормально, если бы один из них работал. Я также видел определение плагин, внутри config.xml как это

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

Может кто-нибудь объяснить мне, в чем разница? Является ли способ (с feature), что я работаю устаревшим с cordova 3.3? Когда я пытаюсь использовать формат <gap:plugin..., мое приложение падает при запуске.

Так, пожалуйста, помогите мне это исправить, и очистить свой ум;)

+1

Вы использовали 'cordova build' для подготовки/компиляции кода? – MBillau

+0

да, я запустил 'cordova build', он скопировал все в нужные каталоги, но все же те же проблемы – 23tux

ответ

5

К сожалению, ни один из ответов не работал. К счастью, я нашел решение в этом списке рассылки:

http://mail-archives.apache.org/mod_mbox/cordova-dev/201312.mbox/%[email protected].com%3E

Там они говорят, что это ошибка в Кордове 3.3.1. В этих версиях плагины копируются в каталог .staging различных платформ.

Таким образом, понижая с НПМ в Кордову 3.3.0 Теперь работал (на Mac OS X):

sudo npm remove -g cordova 
sudo npm view cordova versions 
sudo npm install -g [email protected] 

, а также проверить, если это возможно, Cordova установлен с PhoneGap тоже. Если вы только использование Cordova, и не из особенностей PhoneGap (например, дистанционного сборки), вы можете безопасно удалить пакет PhoneGap с

sudo npm remove -g phonegap 

Update

Текущая версия 3.4.0 работает отлично , и не имеет этих проблем.

2

определение плагин с помощью gap:plugin для настройки плагинов для PhoneGap сборки (так что вам не нужно для местной сборки).


Как предложено MBillau, плагины добавляются к платформе только после того, как вы запустите cordova prepare ios (или cordova build ios, который запускает подготовить и затем строит проект).

Когда вы запустите программу подготовки, файлы javascript плагина должны быть скопированы в папку www/plugins/pluginfullname/wwwplatforms/ios folder.

Если файлов нет, может быть проблема с поврежденным файлом . В этом случае иногда удаление и повторная установка плагина решает проблему. В некоторых случаях вам нужно удалить файл ios.json и освободить папку плагинов в корне вашего проекта (и, возможно, всю папку с платформами) и переустановить все плагины.


Если окно.плагины приемлю только перечисляет pushnotification плагин это только потому, что это единственный плагин установлен в этом объекте:

  • org.apache.cordova.console в console и cordova.logger
  • org.apache.cordova.device в window.device
  • org.apache.cordova.splashscreen в navigator.splashscreen

Чтобы узнать имя объекта javascript для использования, вы должны прочитать документацию плагина или посмотреть свойство js-module/clobbers в plugin.xml файл плагина.

+0

Спасибо за ваш ответ! Я посмотрел, и все выглядит хорошо. Файлы копируются в пункт назначения, у меня есть правильные имена, но, тем не менее, они недоступны после события 'deviceready'. Я также попытался удалить все плагины и снова установить их, но не повезло. Что-нибудь еще я мог попробовать? – 23tux

+0

В одном файле я забыл упомянуть cordova_plugins.js внутри папки www в папке platform/ios. cordova.js использует этот файл для включения плагинов (он должен быть построен из ios.json). Если это не сработает для вашего проекта, я бы предложил очистить папку плагинов и платформ и переустановить плагины или попробовать новый проект. – QuickFix

+0

Хммм, файл 'cordova_plugins.js' присутствует и перечисляет все плагины, которые я установил. Но также с удалением всех плагинов и повторной установкой ничего не работает. Любые другие идеи? – 23tux

0

Проверьте, что файл index.html имеет правильные линии <script></script>.

У меня возникла проблема при создании нового проекта через CLI. Файл index.html ссылочного phonegap.js вместо cordova.js

1

От корня вашего проекта Кордовы, идти в ./platforms/ios/

cd platforms/ios 

В здесь должна быть ./build folder - это содержит ранее созданные пакеты, которые Кордова использует для «ленивой загрузки», то есть так, что Кордове не приходится постоянно извлекать файлы из разных мест, вместо этого они хранят их локально. Однако я нашел это проблематичным.

Удалить эту папку:

sudo rm -r build 

Когда ушел, скомпоновать проект Кордова:

cordova build 

Затем он должен воссоздать папку сборки, но что более важно, ваши плагины будут перечислены в config.xml.

Смежные вопросы