Cordova 是使用HTML,CSS和JavaScript构建混合移动应用程序的平台。官方文档给了咱们Cordova的定义。html
Apache Cordova是一个开源的移动开发框架。容许你用标准的web技术-HTML5,CSS3和JavaScript作跨平台开发。 应用在每一个平台的具体执行被封装了起来,并依靠符合标准的API绑定去访问每一个设备的功能,好比说:传感器、数据、网络状态等。前端
使用Apache Cordova的人群:java
Cordova是开发跨平台web App的工具, 使用前端技术来开发App, 能够节省成本和快速发布;Cordova的底层逻辑是:HTML+CSS搭建页面, 使用JS和原平生台交互来展现原平生台的功能;Cordova全部功能是创建在各类插件上的,因此插件开发是Cordova开发的重点。node
这部分教你如何建立JS/HTMLCordova应用并发布到iOS原生移动平台,经过使用cordova命令行接口(CLI)。android
下载和安装Node.js。安装完成后你能够在命令行中使用node 和 npm 。ios
(可选)下载和安装git client, 若是你没有。安装成功后,你能够在命令行中使用 git。 这个命令行使用下载git仓库中的资源。git
安装cordova 模块使用Nodejs的npm工具。cordova模块会被npm工具自动下载。github
在OS X和Linux上:web
➜ ~ sudo npm install -g cordova
复制代码
在OS X和Linux上,npm命令加上前缀sudo由于cordova可能须要安装在其余的受限制目录好比 /usr/local/share。若是你使用可选工具nvm/nave或者具备安装目录的写权限,那么你能够省略sudo前缀。这里有更多提示 可用在使用 npm 没有 sudo前缀时,若是你想那么作。objective-c
-g标志是告诉 npm 咱们全局安装 cordova。不然咱们将会安装在当前工做目录的 node_modules子目录。
安装完成后,你应该可以在命令行中运行cordova命令,在没有任何参数的时候会打印一些帮助信息。
进入到你要建立的工程目录Cordava下,建立你的Cordova项目hello:
➜ CordovaDemo cordova create hello com.example.hello HelloWorld
复制代码
这将会为你的cordova应用创造必须的目录。默认状况下,cordova create命令生成基于web的应用程序的骨骼,项目的主页是 www/index.html 文件。
项目的目录以下:
全部后续命令都须要在项目目录或者项目目录的任何子目录运行:
➜ CordovaDemo cd hello
➜ hello cordova platform add ios --save
Using cordova-fetch for cordova-ios@^5.0.0
Adding ios project...
Creating Cordova project for the iOS platform:
Path: platforms/ios
Package: com.example.hello
Name: HelloWorld
iOS project created with cordova-ios@5.0.1
Plugin 'cordova-plugin-whitelist' found in config.xml... Migrating it to package.json
Discovered saved plugin "cordova-plugin-whitelist". Adding it to the project
Installing "cordova-plugin-whitelist" for ios
Adding cordova-plugin-whitelist to package.json
➜ hello cordova platform ls
Installed platforms:
ios 5.0.1
Available platforms:
android ^8.0.0
browser ^6.0.0
electron ^1.0.0
osx ^5.0.0
windows ^7.0.0
复制代码
运行cordova platform add ios --save或者remove的命令将会影响项目 platforms的内容,在这个目录中每一个指定平台都有一个子目录。
注意:在你使用CLI建立应用的时候, 不要 修改/platforms/目录中的任何文件。当准备构建应用或者从新安装插件时这个目录一般会被重写。
如下是运行这些命令以后的项目目录:
要构建和运行App,你须要安装每一个你须要平台的SDK。另外,当你使用浏览器开发你能够添加 browser平台,它不须要任何平台SDK。
检测你是否知足构建平台的要求:
➜ hello cordova requirements
Requirements check results for ios:
Apple macOS: installed darwin
Xcode: installed 10.3
ios-deploy: installed 1.9.4
CocoaPods: installed 1.6.1
复制代码
至此构建app须要用的工具所有安装完成。
默认状况下, cordova create生产基于web应用程序的骨架,项目开始页面位于www/index.html 文件。任何初始化任务应该在www/js/index.js文件中的deviceready事件的事件处理函数中。
运行下面命令为所添加的iOS平台构建:
➜ hello cordova build ios
复制代码
移动平台的SDK一般会绑定模拟器,它是一个可执行的设备镜像,这样你就能够在主屏幕启动你的App,看看它在多个平台是如何交互的。 在命令行运行下面的命令,会从新构建App并能够在特定平台的模拟器上查看:
➜ ~ hello cordova emulate ios
复制代码
为了能在终端上经过命令行直接部署,咱们还须要安装几个工具:
➜ ~ npm install -g ios-sim
➜ ~ npm install -g ios-deploy
复制代码
部署到模拟器以前,咱们须要肯定 target(机型 + 系统),能够经过执行如下命令来查看支持的机型:
➜ hello cordova run ios --list
复制代码
至于系统须要从 XCode 安装,这里我安装了 12.0:
如今万事俱备,咱们经过执行一条命令就能够在模拟器上运行:
➜ hello cordova run ios --target="iPhone-8, 12.0"
复制代码
或者,你能够将你的手机插入电脑,在手机上直接测试App:
➜ hello cordova run ios
复制代码
运行结果以下:
你能够修改默认生成的App经过标准的web技术,可是App要接触设备级别的特性,就须要你添加插件了。
一个插件 经过JavascriptAPI暴露原生SDK功能。插件一般由npm分发,你能够搜索他们在 插件搜索页。一些关键的API由Apache Cordova开源项目提供而且这些插件是做为[核心插件API]的。你也可使用CLI启动搜索页:
➜ hello cordova plugin search camera
cordova-plugin-whitelist 1.3.4 "Whitelist"
复制代码
plugin要添加camera插件,咱们须要指定camera的npm包名:
➜ hello cordova plugin add cordova-plugin-camera
Installing "cordova-plugin-camera" for ios
Adding cordova-plugin-camera to package.json
复制代码
插件也能够经过目录或者git仓库添加。
注意:CLI增长了适合各个平台的插件代码。若是你想伴随着低级别壳工具和平台SDK开发你能够看概述中讨论的, 你须要运行Plugman工具去给每一个平台单独添加。 (要知道更多信息, 请看 使用Plugman管理插件.)
使用 plugin ls (或者 plugin list, 或者 plugin本身)查看当前安装的插件。每一个插件显示它的标识:
➜ hello cordova plugin ls
cordova-plugin-camera 4.1.0 "Camera"
cordova-plugin-whitelist 1.3.4 "Whitelist"
复制代码
在安装cordova工具以后,你能够运行下面命令更新到最新版本:
➜ hello sudo npm update -g cordova
复制代码
运行cordova -v查看当前版本。要查找最新的cordova版本,能够运行:
➜ hello npm info cordova version
9.0.0
复制代码
用下面语法安装指定版本:
➜ hello sudo npm install -g cordova@3.1.0-0.2.0
复制代码
要更新你要定位的平台:
➜ hello cordova platform update ios --save
复制代码
platform :ios, '9.0'
target 'DyCordovaDemo' do
pod 'Cordova'
end
复制代码
第2步、建立一个Cordova工程,工程名为hello,并添加iOS平台, 由于后面须要用到cordova项目中的内容;
第3步、打开iOS项目DYCordovaDemo,将cordova工程工程名为hello中的config.xml文件复制到iOS项目下, 而且选择Create groups for any added folders选项;
第4步、将CordovaLib/CordovaLib.xcodeproj复制到Xcode项目中;
第5步、将 cordova 工程中的 hello 文件夹下 的www 文件夹 复制到Xcode项目中;
第6步、在Xcode项目导航栏中选择CordovaLib.xcodeproj, 而后在File Inspector中, 设置Location为Relative to Group;
第7步、选中Xcode项目的target, 而后在Build Settings中的Other Linker Flags中添加-force_load和-Objc;
注:这里有个bug, 官网说添加-force_load和-Objc, 发现添加-force_load后, 原生buildbuild报错. 因此网上有人推荐添加-all_load和-Objc.
AssetsLibrary.framework
CoreLocation.framework
CoreGraphics.framework
MobileCoreServices.framework
复制代码
一、打开Target Dependencies和Link Binaries with Libraries都加入CordovaLibbuild后的产物CordovaLib.a, 若是看不到libCordova.a, 能够在Cordova项目目录下运行cordova build命令.
二、在Build Settings中的Header Search Paths.加入下面这些值:
"$(TARGET_BUILD_DIR)/usr/local/lib/include"
"$(OBJROOT)/UninstalledProducts/include"
"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
"$(BUILT_PRODUCTS_DIR)"
复制代码
使用CDVViewController加载cordova页面,以后Cordova中的webView就交给www下的前端资源来管理了,加载CDVViewController代码示例以下:
#import "ViewController.h"
#import <Cordova/CDVViewController.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initUI];
}
- (void)initUI {
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(50, 120, 150, 60);
[button addTarget:self action:@selector(goToCordovaVc) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
button.backgroundColor = [UIColor redColor];
[button setTitle:@"进入cordova页面" forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)goToCordovaVc {
CDVViewController * cordovaVC = [[CDVViewController alloc]init];
//(可选)设置wwwFolderName属性, 默认为www:
cordovaVC.wwwFolderName = @"www";
//(可选),设置属性useSplashScreen, 默认值为NO:
// cordovaVC.useSplashScreen = YES;
//设置view frame, 总要设置为最新的值:
cordovaVC.view.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
//设置标题
cordovaVC.title = @"cordova";
[self.navigationController pushViewController:cordovaVC animated:YES];
}
@end
复制代码
Cordova项目中大量使用插件, 除了Cordova平台提供的核心插件外, 开发者须要针对一些额外需求自定义开发插件.
目前Cordova 官网存在一些插件,你们能够参考着看看。
一、使用plugman来建立一个扫码插件命名为Scan:
➜ cordova-plugin-scan plugman create --name scan --plugin_id cordova-plugin-scan --plugin_version 1.0.0
复制代码
运行成功以后的文件结构以下图所示:
scan.js 文件的初始代码以下:
接下来咱们来编写提供给前端调用的js类型的scan接口:
一、打开插件目录下的 scan.js 文件,在其中编写js调用的scan接口
未完待续
Cordova功能强大,使用方便,可能个人理解还不是太完整、你们有什么须要讨论的请留言。
参考文章Cordova中文文档