Codava

作者: fanren | 来源:发表于2020-04-23 13:45 被阅读0次

    一、安装Codava

    • 安装nodeJs下载安装
    • 安装codava sudo npm install -g cordova
    • 新建项目(HelloWorld)cordova create HelloWorld
    • 增加iOS平台cd HelloWorld cordova platform add iOS

    二、项目集成Codava

    • 创建swift项目CodavaWeb

    • Codava库的复制

      • HelloWorld/platforms/iOS目录下cordova、CordovaLib、platform_www、wwwCodavaWeb目录下
        第一步
      • HelloWorld/config.xml复制到CodavaWeb
        第二部
      • HelloWorld/platforms/ios/HelloCordova/config.xml复制到CodavaWeb/CodavaWeb目录下
        第三步
      • HelloWorld/platforms/ios/HelloCordova/Scripts复制到CodavaWeb/CodavaWeb目录下
        第四步
    • 文件添加

      • 使用Add Files To "CodavaWeb"添加CordovaLib/CordovaLib.xcodeproj
      • 使用Add Files To "CodavaWeb"添加CodavaWeb/CodavaWeb/config.xml
      • 使用Add Files To "CodavaWeb"添加www
        www
    • 项目配置

      • Build Settings -> Other Linker Flags 中添加-ObjC -all_load
      • Build Phases -> Dependencies中添加"CordovaLib"
      • Build Phases -> Link Binary With Libraries中添加"libCordova.a"
      • Build Phases中新建"New Run Script Phases", 并改名为Copy www directory, 取消勾选show environment variables in build log
      • 修改内容为"$SRCROOT/CodavaWeb/Scripts/copy-www-build-step.sh"
      • 项目中添加桥接文件MySwiftProject-Bridging-Header.h
    #ifndef MySwiftProject_Bridging_Header_h
    #define MySwiftProject_Bridging_Header_h
    
    #import <Cordova/CDVViewController.h>
    #import <Cordova/CDVCommandDelegateImpl.h>
    #import <Cordova/CDVCommandQueue.h>
    #import <Cordova/CDVPlugin.h>
    
    #endif /* MySwiftProject_Bridging_Header_h */
    
    • 项目测试
      修改ViewController
    class ViewController: CDVViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    }
    

    运行结果

    三、js调用原生

    • 创建工具类TestPlugin,并实现test方法
    @interface TestPlugin : CDVPlugin
    - (void)test:(CDVInvokedUrlCommand *)command;
    @end
    
    • config.xml类中注册工具类
      <feature name="TestPlugin">
          <param name="ios-package" value="TestPlugin" />
      </feature>
    
    • 方法调用
    // 引入cordova
        <script type="text/javascript" src="cordova.js"></script>
      function getImage(){
    //调用原生方法(TestPlugin类中的test方法,参数是"123")
          Cordova.exec(successFunction, failedFunction, "TestPlugin","test", ["123"]);
      }
      function successFunction() {
          alert("成功调用原生方法的回调");
      }
      function failedFunction() {
          alert("失败调用的回调");
      }
    

    四、原生调用js方法

    • js实现原生方法
      function uploadData(str, code) {
          alert(str + ' , ' + code);
      }
    
    • 原生调用js方法
    class ViewController: CDVViewController {
        @objc func respondsToRightItem() {
            let js = "uploadData('图片', '123456')"
            self.commandDelegate.evalJs(js)
        }
    
       // 调用js方法,获取函数uploadData返回值(result)
        @objc func respondsToRightItem2() {
            self.webViewEngine.evaluateJavaScript("uploadData('aaa', 'bbb')") { (result, _) in
                print(result)
            }
        }
    }
    
    

    五、demo

    demo

    六、使用WKWebView

    • 添加WKWebView插件 cordova plugin add cordova-plugin-wkwebview-engine
    • HelloWorld/platforms/ios/HelloCordova/Plugins复制到CodavaWeb/CodavaWeb目录下
    • 使用Add Files To "CodavaWeb"添加Plugins

    七、错误问题

    • 打包时提示'Cordova/CDVViewController.h' file not found

    Build Setting->Search Paths->Header Search Paths中加入
    "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
    Debug和Release中都要加入

    相关文章

      网友评论

          本文标题:Codava

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