首页 > 代码库 > 配置PhoneGap 到iOS

配置PhoneGap 到iOS



下载 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 找到回调方法,并把处理结果传给回调方法。