我正在尝试为iOS平台添加一个自定义Cordova插件,当我将其与在cordova上添加插件的过程进行比较时,我遇到了一些问题。
我在这里尝试使用的插件是https://github.com/phonegap-build/StatusBarPlugin
使用cordova我以前只使用命令行c ordova plugin add com.phonegap.plugin.statusbar
首先,我尝试在原生文件夹中进行修改,但是我注意到如果我这样做,它可以工作但下次我再次部署iOS平台时会被删除。
其次,我尝试在apps / myapp / iphone或apps / myapp / common下添加文件(插件js文件和cordova_plugins.js文件。),但这会导致一个问题:cordova_plugins.js
文件格式似乎变不了确定。
而不是采用这种工作格式:
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"file": "plugins/org.apache.cordova.battery-status/www/battery.js",
"id": "org.apache.cordova.battery-status.battery",
"clobbers": [
"navigator.battery"
]
},
,
{
"file": "plugins/com.phonegap.plugin.statusbar/www/statusbar.js",
"id": "com.phonegap.plugin.statusbar.statusbar",
"clobbers": [
"window.StatusBar"
]
}
]
});
这种格式无法正常运行:
/* JavaScript content from worklight/cordova_plugins.js in JS Resources */
/*
* Licensed Materials - Property of IBM
* 5725-I43 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"file": "plugins/org.apache.cordova.battery-status/www/battery.js",
"id": "org.apache.cordova.battery-status.battery",
"clobbers": [
"navigator.battery"
]
}
]
});
/* JavaScript content from worklight/cordova_plugins.js in folder common */
/* JavaScript content from worklight/cordova_plugins.js in JS Resources */
/*
* Licensed Materials - Property of IBM
* 5725-I43 (C) Copyright IBM Corp. 2006, 2013. All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"file": "plugins/org.apache.cordova.battery-status/www/battery.js",
"id": "org.apache.cordova.battery-status.battery",
"clobbers": [
"navigator.battery"
]
},
{
"file": "plugins/com.phonegap.plugin.statusbar/www/statusbar.js",
"id": "com.phonegap.plugin.statusbar.statusbar",
"clobbers": [
"window.StatusBar"
]
}
]
});
我该怎么办?我应该把这些文件放在哪里? 添加此自定义插件的正确方法是什么,特别是如果我只想为iOS而不是Android添加它?
答案 0 :(得分:2)
更新:从MobileFirst 7.1开始,SDK为now available作为Cordova插件。
对于那些有兴趣在他们的MobileFirst(Worklight)项目中添加第三方插件的人,我已经描述了我自己在下面安装它们的方法,等待IBM的功能发布。
概念本质上是:
免责声明:根据公认的答案,IBM不支持/建议修改cordova_plugin.js文件。
首先,我们需要创建Cordova项目(加上插件)和MobileFirst项目(步骤1-4)。我以Ionic Keyboard插件为例,不用说这种方法(创建Cordova项目和合并文件)适用于任何受支持的插件和目标。
## Create a directory to contain your MobileFirst project e.g. mkdir example; cd example; ##
## Create Cordova project ##
mkdir .tmp
cd .tmp/
cordova create plugins com.plugins plugins;
cd plugins/
cordova platform add ios;
cordova plugin add com.ionic.keyboard;
cd ../..
## Create mobile first project ##
mfp create hybrid
cd hybrid/
mfp add hybrid hybrid
mfp add environment iphone
## Generate native files ##
mfp build
cd ..
## Create staging ##
mkdir -p plugins/native/www/default/worklight
mkdir -p plugins/resources/mobilefirst/
mkdir -p plugins/resources/cordova/
mkdir -p plugins/hm/
## Copy config.xml ##
cp hybrid/apps/hybrid/iphone/native/config.xml plugins/resources/mobilefirst/
cp .tmp/plugins/platforms/ios/plugins/config.xml plugins/resources/cordova/
## Copy Cordova files ##
cp -R hybrid/apps/hybrid/iphone/native/www/default/worklight/ plugins/resources/mobilefirst/
## Copy plugins JS ##
cp -R .tmp/plugins/platforms/ios/www/plugins plugins/native/www/default/worklight/
cp -R .tmp/plugins/platforms/ios/www/ plugins/resources/cordova/
## Copy classes ##
cp -R .tmp/plugins/platforms/ios/Plugins/Plugins/com.ionic.keyboard/ plugins/hm/
## Delete the Cordova project as we have copied all of the artefacts we need ##
rm -R .tmp
## Create the config and cordova_plugin.js which is going to override the mfp build version ##
cp plugins/resources/mobilefirst/config.xml plugins/native/
cp plugins/resources/mobilefirst/cordova_plugins.js plugins/native/www/default/worklight/
现在已准备好暂存的config.xml和cordova_plugins.js文件(步骤5)。
打开plugins / resources / cordova / config.xml文件并将该功能复制到plugins / native / config.xml文件中。
<feature name="Keyboard">
<param name="ios-package" onload="true" value="IonicKeyboard" />
</feature>
打开plugins / resources / cordova / cordova_plugins.js文件,将插件对象复制到plugins / native / www / default / worklight / cordova_plugins.js文件中。
{
"file": "plugins/com.ionic.keyboard/www/keyboard.js",
"id": "com.ionic.keyboard.keyboard",
"clobbers": [
"cordova.plugins.Keyboard"
]
}
现在我们准备将合并的文件复制到MobileFirst项目中(步骤6a)。
## Copy from staging to Worklight ##
cp -R plugins/hm/ hybrid/apps/hybrid/iphone/native/Classes/
第一次复制文件时,Xcode不会自动获取新类,因此在Xcode中打开项目并右键单击“类”和“将文件添加到...”#。添加对话框中显示的文件。
最后,我们可以将插件/本机目录中的文件复制到MobileFirst项目中(步骤6b)。不幸的是,我们需要在每次mfp构建之后复制此目录,因为mfp每次都会重置cordova_plugins.js文件。
## Do this after every mfp build ##
rm -f hybrid/apps/hybrid/iphone/native/www/default/worklight/cordova_plugins.js
cp -R plugins/native/ hybrid/apps/hybrid/iphone/native/
完成后,将客户端代码添加到混合应用程序并进行测试(不要忘记在mfp构建之后再次运行第6步),例如。
<input type="text">
window.addEventListener('native.keyboardshow', keyboardShowHandler);
function keyboardShowHandler(e){
alert('Keyboard height is: ' + e.keyboardHeight);
}
我希望本指南证明是有用的。我每天都使用这个过程(尽管是Grunt的一部分),并期待IBM发布一个功能。
答案 1 :(得分:1)
Worklight 6.1.0.x尚不支持使用plugman或您在纯Cordova应用程序中执行的任何其他过程添加预制的Cordova 3.x插件,包括尝试编辑您的文件试图编辑。这是当前版本的Worklight中的已知限制。
我将在Worklight中执行read the training material of creating Cordova plug-ins,然后获取要添加的插件的来源并将其复制。
可能有其他方法可以做到这一点,但目前没有一种方便。
答案 2 :(得分:0)
Chris的上述解决方案存在问题。如果你正确地遵循这个过程,插件肯定会起作用,但之后会有严重的后果。 E.g由于每次有mfp构建时都会覆盖plugins文件夹和cordova_plugins.js文件,因此生成的wlapp文件永远不会添加插件代码。因此,如果您使用直接更新,一旦您上传此wlapp文件,您的代码将被覆盖,并且该插件将停止工作。