美文网首页iOSiOS - CordovaIOS
使用Cordova开发iOS App -- 打包插件及JS脚本

使用Cordova开发iOS App -- 打包插件及JS脚本

作者: CatchZeng | 来源:发表于2016-09-22 21:48 被阅读4410次

    上一篇--开发iOS插件中我们开发了一个插件,本篇将讲解如何将插件打包。

    一、创建插件包

    首先在桌面上创建一个文件夹com.catchzeng.testplugin(遵守命名规范),并创建子文件夹及子文件如下图,将插件的代码复制到ios文件夹下。


    插件结构
    插件结构

    二、编写JS代码

    编写testPlugin.js,向外部暴露testModel的testPlugin方法,这便是前端人员需要调用的接口。

    var exec = require("cordova/exec");
    
    function TestModel() {};
    
    TestModel.prototype.testPlugin = function (success,fail,option) {
         exec(success, fail, 'testPlugin', 'testWithTitle', option);
    };
    
    var testModel = new TestModel();
    module.exports = testModel;
    

    三、配置plugin.xml文件

    配置plugin.xml 就是为了告诉cordova我们的文件路径在哪,我们的oc类名是什么,oc对象名是什么,js类名及js对象名是什么等信息。这样cordova在安装插件时,才能找到正确的插件文件。

    <?xml version="1.0" encoding="UTF-8" ?>
    <plugin xmlns="http://phonegap.com/ns/plugins/1.0"
        id="com.catchzeng.testplugin"
        version="1.0.0">
        <engines>
            <engine name="cordova" version=">=3.3.0" />
        </engines>
        
        <name>testPlugin</name>
        <description>测试插件</description>
        
        <js-module src="www/testPlugin.js" name="testModel">
            <clobbers target="testModel" />
        </js-module>
        
        <platform name="ios">
            <source-file src="src/ios/TestPlugin.m" />
            <header-file src="src/ios/TestPlugin.h" />
            <source-file src="src/ios/TestViewController.m" />
            <header-file src="src/ios/TestViewController.h" />
            <resource-file src="src/ios/TestViewController.xib" />
            <resource-file src="src/ios/test.png" />
            
            <config-file target="config.xml" parent="/widget">
                
                <feature name="testPlugin">
                    <param name="ios-package" value="TestPlugin" />
                </feature>
            </config-file>
        </platform>
    </plugin>
    

    参数说明:

    • id="com.catchzeng.testplugin" :插件id必须与文件夹名称相同
    • <js-module src="www/testPlugin.js" name="testModel">:此处配置js所在目录和调用的类(testModel)
    • <source-file>:标示插件所需的oc .m文件
    • <header-file>:标示插件所需的oc .h文件
    • <resource-file>:标示插件所需资源文件(图片、xib资源等)
    • <feature name="testPlugin"><param name="ios-package" value="TestPlugin" />:指明插件映射至ios的类名,此处的testPlugin便是对应到testPlugin.js exec(success, fail, 'testPlugin', 'testWithTitle', option); 中的testPlugin。

    四、测试插件

    新建一个Cordova项目,并添加iOS平台作为测试项目。


    新建测试项目

    添加插件到测试项目

    cordova plugin add  xxxxxx
    
    添加插件

    修改工程项目的index.html


    index.html
    <!DOCTYPE html>
    <html>
        <head>
            <title>TestPlugin</title>
            <meta http-equiv="Content-type" content="text/html; charset=utf-8">
                <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
                <script type="text/javascript" charset="utf-8">
    
                function testPlugin() {
                    testModel.testPlugin(alertSuccess,alertFail,["我是JS传来的参数!"]);
                }
    
                function alertSuccess(msg) {
                    alert(msg);
                }
    
                function alertFail(msg) {
                    alert('调用OC失败: ' + msg);
                }
                </script>
        </head>
    
        <body style="padding-top:50px">
            <button style="font-size:17px;" onclick="testPlugin();">调用iOS插件</button> <br>
        </body>
    </html>
    

    重新build iOS项目
    cordova build ios

    build

    此时打开iOS工程后,运行程序便能得到看到插件的效果。


    Plugin

    将插件文件上传到git后,前端人员也可以使用git的方式安装我们编写的插件
    cordova plugin add https://github.com/CatchZeng/com.catchzeng.testplugin

    最后附上Demo地址:https://github.com/CatchZeng/com.catchzeng.testplugin

    相关文章

      网友评论

      • 3a601209eff1:请教个问题,就是js那边通过cordova.exec(参数),调用了一个原生中不存在的方法,然后卡住没有任何反馈了,有没有好一点的解决方案呢?
      • cl9000:请问我的生成平台为什么会自动生成***.xcworkspace
      • 不知蜕变的挣扎:Error: Invalid Plugin! /Users/admin/Desktop/com.catchzeng.testplugin needs a valid package.json
        直接从你的demo中托的插件,加入我新建的项目 会报错
        9b72ec6ef858:解决了么? 我是自己写的 也是一样的错误
      • WinterIsHere:大神 ,如果我的插件用了很多第三方库,比如afn mjrefresh等,那是不是要把这些库也拷贝src/ios目录下??
        WinterIsHere:@CatchZeng 所有的第三方库的。m和。h文件也都要在plugin.xml导入吧?
        CatchZeng:@ChenXJ陈鑫杰 是的
      • dcfbe7c67bf3:你好,请问如果在视图界面加个按钮,调用一个方法,在方法里面给一个参数赋值,然后传到html界面,该怎么传呢?这个问题困扰了好久,求帮助

      本文标题:使用Cordova开发iOS App -- 打包插件及JS脚本

      本文链接:https://www.haomeiwen.com/subject/sunzettx.html