将自定义cordova插件添加到IBM Worklight 6.1

我正在尝试为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_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添加它?

Worklight 6.1.0.x还不支持使用plugman或在纯Cordova应用程序中执行的任何其他过程添加预制的Cordova 3.x插件,包括尝试编辑您尝试编辑的文件。 这是当前版本的Worklight中的已知限制。

我要做的是阅读在Worklight 中创建Cordova插件的培训材料 ,然后获取要添加的插件的来源并将其复制。

可能有其他方法可以做到,但目前没有方便。

更新:从MobileFirst 7.1开始,SDK 现在可作为Cordova插件使用。

对于那些有兴趣在他们的MobileFirst(Worklight)项目中添加第三方插件的人,我已经描述了我自己在下面安装它们的方法,等待IBM的function发布。

这个概念基本上是:

  1. 创建一个Cordova项目,
  2. 添加所需的插件,
  3. 创建一个MobileFirst项目,
  4. 将插件文件从两个项目复制到临时区域(以便我们可以轻松识别它们),
  5. 合并config.xml和cordova_plugin.js文件(即使用Cordova项目中的插件信息补充MobileFirst文件)和
  6. 将暂存和修改的文件复制到MobileFirst。

免责声明:根据公认的答案,IBM不支持/建议修改cordova_plugin.js文件。

首先,我们需要创建Cordova项目(加上插件)和MobileFirst项目(步骤1-4)。 我使用了Ionic Keyboard插件作为示例,不用说这种方法(创建Cordova项目和合并文件)适用于任何受支持的插件和目标。

 ## Create a directory to contain your MobileFirst project eg 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文件,将该function复制到plugins / native / config.xml文件中。

    

打开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中打开项目并右键单击Classes和’Add files to …’。 添加对话框中显示的文件。

最后,我们可以将插件/本机目录中的文件复制到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步),例如

  window.addEventListener('native.keyboardshow', keyboardShowHandler); function keyboardShowHandler(e){ alert('Keyboard height is: ' + e.keyboardHeight); } 

我希望这本指南certificate是有用的。 我每天都使用这个过程(尽管是Grunt的一部分),并期待IBM发布一个function。

克里斯提出上述解决方案存在问题。 如果您正确地遵循该过程,该插件肯定会起作用,但稍后会有严重后果。 例如,因为每次有mfp构建时都会覆盖plugins文件夹和cordova_plugins.js文件,所以生成的wlapp文件永远不会添加插件代码。 因此,如果您使用直接更新,一旦您上传此wlapp文件,您的代码将被覆盖,并且该插件将停止工作。