Cordova原理与集成(iOS)

目录

1 Cordova概述

2 Cordova环境配置(iOS)

3 Cordova集成(iOS)

4 Cordova嵌入webview使用(iOS)

5 参考文档


1 Cordova概述

概述

Cordova前身是phonegap,而PhoneGap是Nitobi软件公司2008年推出的一个框架,旨在弥补web和iOS之间的不足,使得web和iPhone SDK之间的交互更容易。后来又加入了Android SDK 和BlackBerry SDK,再然后又陆续加入了更多的平台。但是在2011年,Nitobi公司被Adobe收购,PhoneGap也被提交到Apache Incubator。由于Adobe现在拥有PhoneGap商标,PhoneGap v2.0版产品就更名为Apache Cordova。

Apache Cordova是一个开源的移动开发框架。允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发。 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑定去访问每个设备的功能,比如说:传感器、数据、网络状态等。 

使用Apache Cordova的人群:

移动应用开发者,想扩展一个应用的使用平台,而不通过每个平台的语言和工具集重新实现。

web开发者,想包装部署自己的web App将其分发到各个应用商店门户。

移动应用开发者,有兴趣混合原生应用组建和一个WebView(一个特别的浏览器窗口) 可以接触设备A级PI,或者你想开发一个原生和WebView组件之间的插件接口。

架构

这是cordova应用程序的几个组成部分。下面这幅图是cordova应用架构的高级视图。

cordova应用架构的高级视图

WebView

Cordova启用的WebView可以给应用提供完整用户访问界面。在一些平台中,他也可以作为一个组件给大的、混合应用,这些应用混合和Webview和原生的应用组件。

Web App

这是你应用程序代码存在的地方。应用的实现是通过web页面,默认的本地文件名称是是index.html,这个本地文件应用CSS,JavaScript,图片,媒体文件和其他运行需要的资源。应用执行在原生应用包装的WebView中,这个原生应用是你分发到app stores中的。

 这个容器中包含一个非常重要文件- config.xml文件他提供App的重要的信息和特定的参数用来影响App的工作,比如说是否响应方向的变动。

插件

插件是Cordova生态系统的重要组成部分。他提供了Cordova和原生组件相互通信的接口并绑定到了标准的设备API上。这使你能够通过JavaScript调用原生代码.

Apache Cordova项目维护着一组插件叫做核心插件。这些核心插件可以让你的应用程序访问设备功能,比如:电源,相机,联系人等。

除了核心插件,这里还有一些第三方插件他们提供了一些附加功能,但这些功能不一定在每个平台都能用。你可以搜索Cordova插件使用插件搜索或者npm。你也可以开发自己的插件。插件是必要的,例如Cordova和自定义原生组件之间通信。

Cordova特征

命令行界面(Cordova CLI)

这是可用于启动项目,构建不同平台的进程,安装插件和许多其他有用的东西,使开发过程更容易的工具。您将在以后的章节中学习如何使用。

Cordova核心组件

Cordova提供了每个移动应用程序所需的核心组件。这些组件将用于创建应用程序的基础,所以我们可以花更多的时间来实现我们自己的逻辑。

Cordova外挂程式

Cordova提供的API将用于实现本地移动功能到我们的JavaScript应用程序。

许可证

Cordova按照Apache许可证2.0版授权。 Apache和Apache羽毛标志是Apache软件基金会的商标。

Cordova的优势

Cordova为构建混合移动应用程序提供了一个平台,因此我们可以开发一个应用程序,将在不同的移动平台IOS,Android,Windows Phone,Amazon-fireos,黑莓,Firefox OS,Ubuntu和tizien上使用。

开发混合应用程序然后原生应用程序更快,所以Cordova可以节省大量的开发时间

由于我们在使用Cordova时使用JavaScript,我们不需要学习平台特定的编程语言。

有大量的社区插件可以与Cordova一起使用。许多库和框架都经过优化以便使用它。

Cordova限制

混合应用程序比本地应用程序慢,因此对于需要大量数据和功能的大型应用程序使用Cordova不是最佳选择。

跨浏览器兼容性可能会产生很多问题。大多数时候,我们为不同的平台构建应用程序,所以测试和优化可能需要很多时间,因为我们需要覆盖大量的设备和操作系统。

某些插件与不同的设备和平台存在兼容性问题。还有一些Cordova尚不支持的本机API。


2 Cordova环境配置(iOS)

在我们开始使用Cordova设置之前,我们需要安装一些组件。

安装Node.js

要安装Cordova,需要先安装Node.js在Node.js官网,上下载并安装

具体参考 https://www.jianshu.com/p/f21fdbdf47df 

安装git

git一般不用安装,osx和linux都自带git,可以在命令行输入git --version检查一下。如果没有git,需要到git官网(https://git-scm.com)下载安装一个git客户端。

使用node.js的依赖包管理工具npm来进行cordova安装

在终端输入命令:

sudo npm install -g cordova



3 Cordova集成(iOS)

新建项目

打开终端,切换目录到工作目录下,输入以下命令,可能需要点时间来完成

cordovacreateDemocom.cordova.demo.helloHelloWorld

参数描述:

Demo(参数是必填):将为你的项目生成一个Demo目录    www子目录是应用程序的主页,以及各种资源(css,js,img),遵循共同的web开发文件命名规范。这些资源将存储在设备上的本地文件系统,而不是远程服务。config.xml文件包含重要的需要生成和分发应用程序的元数据。

com.cordova.demo.hello(参数可选):App ID,如果不填写这个参数,第三个参数就要省略,默认值是 io.cordova.hellocordova,但建议你填写一个适当的值。

HelloWorld(参数可选):应用程序的项目名  这个参数的默认值是 HelloCordova,但建议你填写一个适当的值。

平台支持

所有后续命令在项目的目录中进行,可在该项目任何子目录中,切换到项目目录下:

cd Demo

在构建项目之前,你需要指定一组目标平台。你能够运行这些命令取决于您的机器是否支持每一个SDK,合理是否已安装SDK。在MAC上运行命令:

cordova platform add ios

如果需要查看Cordova支持平台以及已经添加的平台,终端输入命令:

  cordova platforms ls

添加插件

根据项目具体功能需要,可添加插件以简单方便调用原生接口,如需添加插件,可以去Cordova插件库搜索需要的插件:

cordova plugin add com.phonegap.plugins.barcodescanner

cordova plugin add org.apache.cordova.file-transfer

cordova plugin ls

并非所有的插件都是全平台支持的,有些可能只支持安卓,也有的可能同时支持安卓和iOS,所以在多平台开发时,请慎重选择插件。

插件也可自定义,参考文档 

http://cordova.apache.org/docs/zh-cn/3.4.0/guide/hybrid/plugins/index.html

插件使用,实现h5与原生交互参考文章

https://blog.csdn.net/u013929312/article/details/55045871

项目运行

一个简单的Cordova项目就已经搭建完成了,现在,运行下工程。打开目录下

/Users/****/Desktop/测试cordova/Demo/platforms/ios




Cordova嵌入webview使用

将Cordova本地相关文件copy到已存的项目中

进入到创建的Cordova项目的路径中/Users/****/Desktop/Demo/platforms/ios,找到下面需要copy的4个文件夹( CordovaLib ,cordova, www, platform_www)copy到工程项目的根路径中,如下


copy到需要集成的项目文件夹下

拷贝对应的config.xml文件到对应的工程目录



 配置相关参数

 打开工程,进入工程TARGETS -> Build Phases 下,然后入下图所示,点击①中的按键,创建New Run Script Phase,②为创建的Run Script:


将下图示意图中,①原名称Run Script修改为Copy www directory;然后讲②中的选项去掉,最后将下面的代码字段复制到③中:

NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js  


 在工程 Build Settings -> Other Linker Flags 中添加-ObjC -all_load


Add Files to ... -> CordovaLib.xcodeproj


 Add Files to ... -> config.xml

Add Files to ... -> www文件夹


Schemes按照下图配置,然后编译一次程序(command+R),最后导入下面两项

Build Phases -> Target Dependencies -> CordovaLib

Build Phases -> Link Binary With Libraries -> libCordova.a


Schemes按照下图配置,将"ViewController.h" 文件改为:

#import <Cordova/CDVViewController.h>

#import <Cordova/CDVCommandDelegateImpl.h>

#import <Cordova/CDVCommandQueue.h>

@interface ViewController : CDVViewController

@end

运行程序就可看到工程中wwww文件目录下,index.html文件中的网页信息了。只需要将该文件内容,改为公司需要的网页内容即可。



参考文档

http://cordova.axuer.com/docs/zh-tw/6.x/guide/platforms/ios/index.html (iOS官方集成文档)

https://www.jianshu.com/p/90605320bb28 (在已有项目中集成cordova和自定义插件的使用)



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,599评论 1 180
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139