我有一个针对iOS的cordova 3.3.1-0.1.2测试项目,我使用以下插件(cordova plugin ls
):
[ 'com.phonegap.plugins.PushPlugin',
'org.apache.cordova.console',
'org.apache.cordova.device',
'org.apache.cordova.splashscreen' ]
我添加了像cordova plugin add org.apache.cordova.device
这样的插件。在我的git repo中,我看到它将一堆文件添加到plugins/org.apache.cordova.device
目录,在我的iOS插件目录中创建CDVDevice.h
和CDVDevice.m
,更新{{1} },更新ios.json
文件并将插件添加到*.xcodeproj
内的config.xml
:
platforms/ios/test-app/config.xml
但是当我尝试访问JS中的<feature name="Device">
<param name="ios-package" value="CDVDevice" />
</feature>
或device
属性时,它告诉我,window.device
未定义。奇怪的是,pushPlugin存在:
device
document.addEventListener("deviceready", function () {
console.log(device);
console.log(window.device);
console.log(window.plugins.pushNotification);
});
对象仅将window.plugins
插件列为属性。这很奇怪,因为它们都安装了,在安装过程中,cordova说,一切都很好。
我有点困惑,关于过时的和混合的电话差距文档,但如果其中一个可行,那就没问题。我还在pushNotification
这样的
config.xml
有人可以解释一下,有什么不同之处?我用cordova 3.3工作的方式(<gap:plugin name="org.apache.cordova.device" />
)是不是已经过时了?当我尝试使用feature
格式时,我的应用在启动时崩溃。
所以,请帮助我解决这个问题,并清除我的想法;)
答案 0 :(得分:5)
不幸的是,没有一个答案奏效。幸运的是,我在这个邮件列表中找到了解决方案:
他们说,这是cordova 3.3.1中的一个错误。在此版本中,插件将被复制到不同平台的.staging
目录中。
因此,使用npm降级到cordova 3.3.0现在已经有效了(在Mac OS X上):
sudo npm remove -g cordova
sudo npm view cordova versions
sudo npm install -g cordova@3.3.0-rc.1
并检查,如果也可以从phonegap安装cordova。如果仅使用cordova,而不使用phonegap功能(如远程构建),则可以使用
安全地删除phonegap软件包sudo npm remove -g phonegap
<强>更新强>
当前版本3.4.0运行正常,没有这个问题。
答案 1 :(得分:2)
gap:plugin
的插件定义用于配置phonegap构建的插件(因此您不需要它用于本地构建)。
正如MBillau建议的那样,只有在您运行cordova prepare ios
(或cordova build ios
启动准备然后构建项目)后,插件才会添加到平台中。
运行prepare时,应将插件的javascript文件复制到www/plugins/pluginfullname/www
的{{1}}文件夹中。
如果文件不存在,则可能是platforms/ios folder
文件损坏的问题。在这种情况下,有时卸载然后重新安装插件可以解决问题。在某些情况下,您必须删除ios.json
文件,并清空项目根目录下的plugins文件夹(也可能是平台文件夹)并重新安装所有插件。
如果window.plugins对象只列出了pushnotification插件,那只是因为它是这个对象中唯一安装的插件:
ios.json
位于org.apache.cordova.console
和console
cordova.logger
位于org.apache.cordova.device
window.device
位于org.apache.cordova.splashscreen
要了解要使用的javascript对象名称,您必须阅读插件的文档或查看插件的navigator.splashscreen
文件中的js-module / clobbers属性。
答案 2 :(得分:1)
从Cordova项目的根目录开始,进入./platforms/ios /
cd platforms/ios
在这里应该有一个./build文件夹 - 这包含以前构建的软件包,然后Cordova用于“延迟加载” - 即Cordova不一定要从各个位置获取文件,而是将它们存储在本地。但是,我发现这是有问题的。
删除此文件夹:
sudo rm -r build
离开后,重建您的Cordova项目:
cordova build
然后它应该重新创建构建文件夹,但更重要的是,您的插件将列在config.xml
中。
答案 3 :(得分:0)
检查index.html文件是否具有正确的<script></script>
行。
通过CLI创建新项目时出现问题。 index.html文件引用了phonegap.js而不是cordova.js