下载 phonegap
安装phonegap之前需要NodeJS环境,下载NodeJS并安装.安装环境的目的是为了使用phonegap命令行.

3. 安装phonegap使用命令
    $phonegap create my-app
    $cd my-app
     $phonegap run iOS
这样就会自动创建ios环境,可以在目录my-app/platforms/中找到ios目录.这样系统就自动为我们创建了一个ios的phonegap项目.此项目在默认目录中.
4. 自定义项目创建路径
命令: phonegap create <项目目录> <项目ID> <项目名称>
自动创建了helloword目录,然后cd到platforms目录中,执行$phonegap run iOS命令.这样就自定义创建了phonegap项目.
从目录可以看出,widget相关项目文件都放在staging文件目录里,在www文件夹中有具体的编程文件.还有各种移动平台的适配信息及资源文件.

ios相关文件
Classes:
    代理和主界面类
Plugins:空目录
Other Sources:
    pch文件和程序入口文件
Resources:
    资源文件:图片,plist
Frameworks:类库

程序运行index.html 的原因:
CDVConfigParser类中有个属性startPage,在方法loadSettings中判断,如果没有设置指定开始页面就会执行默认页。

项目运行依赖于phonegap中提供的类库,但是在项目里面找不到相关文件,经过分析发现在Build Phases中有Copy www Directory项,其中Shell写的是/bin/sh 执行的shell在cordova/lib/copy-www-build-step.sh中。测试发现sh是unix执行脚本的可执行文件。
cordova/lib/copy-www-build-step.sh在/bin/sh -c     目录中。
在这个sh文件中有一句代码cordova/lib/copy-www-build-step.sh,这个目录在Phonegap创建的时候创建的,位于项目里的platforms/ios/cordova/lib下。ios目录就是程序根目录,所以设置配置文件cordova/lib/copy-www-build-step.sh可以用这个路径找到,sh找到这个文件之后会执行copy-www-build-step.sh里面的路径配置代码。

Cordova就是Phonegap被Adobe收购后改的名字

一、JS跟OC通信原理:
1、JS 使用了两种方式来与 Objective-C 通信,一种是使用 XMLHttpRequest 发起请求的方式,另一种则是通过设置透明的 iframe 的 src 属性.
1) JS 端使用 XMLHttpRequest 发起了一个请求,而在 Objective-C 端使用一个 NSURLProtocol 的子类来检查每个请求,如果地址是 /!gap_exec 的话,则认为是 Cordova 通信的请求,直接拦截,拦截后就可以通过分析请求的数据,分发到不同的插件类(CDVPlugin 类的子类)的方法中.

2)在 JS 端创建一个透明的 iframe,设置这个 ifame 的 src 为自定义的协议,而 ifame 的 src 更改时,UIWebView 会先回调其 delegate 的 webView:shouldStartLoadWithRequest:navigationType: 方法

二、OC跟JS通信原理
通过UIWebView的方stringByEvaluatingJavaScriptFromString:执行一段JS代码,可以达到OC与JS通信的效果。

三、JS 请求 Objective-C,Objective-C 返回结果给 JS
IOS原生代码拿到 callbackId、service、action 及 actionArgs 后,会做以下的处理:
1.根据 service 参数找到对应的插件类
2.根据 action 参数找到插件类中对应的处理方法,并把 actionArgs 作为处理方法请求参数的一部分传给处理方法
3.处理完成后,把处理结果及 callbackId 返回给 JS 端,JS 端收到后会根据 callbackId 找到回调方法,并把处理结果传给回调方法。

最新文章

  1. ZeroMQ接口函数之 :zmq_ctx_destroy - 销毁一个ZMQ环境上下文
  2. 《Linux内核设计与实现》读书笔记 - 目录 (完结)
  3. iOS开发——总结篇&amp;常用开发总结
  4. WPF中的多点触摸事件
  5. IT项目各阶段管理
  6. ROS探索总结(十八)——重读tf
  7. Python 2.7的字典实现简化版(C语言)
  8. C# Dispose模式详细分析
  9. 关于 python中的 TKinterlistbox 控件加横竖滚动条
  10. Intel收购半导体设计公司eASIC
  11. js 快速生成数组的方法
  12. 实验十五 GUI编程练习与应用程序部署
  13. LeetCode(28): 实现strStr()
  14. java指纹识别+谷歌图片识别技术_源代码
  15. FastAdmin 新年福袋进行中
  16. Linux:TCP状态/半关闭/2MSL/端口复用
  17. 23.如何查看一个keystore的具体签名信息
  18. ES6必知必会 (七)—— Generator 函数
  19. Catch That Cow(BFS广搜)
  20. Asp.Net MVC part2 View、Controller详解

热门文章

  1. nyoj------203三国志
  2. 初学java之接口基础
  3. hashtable 实现
  4. linux sort 命令详解
  5. MySQL 查看表结构
  6. 本地调试WordPress计划终告失败
  7. JavaScript中字符串转Json方法小记
  8. ASP.NET MVC 基于角色的权限控制系统的示例教程
  9. LCD驱动 15 -2
  10. SharePoint加K2,将Portal系统与BPM系统完美整合!