美文网首页iOS开发Cordova iOS PlatformIOS+前段 Cordova框架研究
使用Cordova进行iOS开发 (已存的项目中添加Cordov

使用Cordova进行iOS开发 (已存的项目中添加Cordov

作者: iwevon | 来源:发表于2016-02-23 01:28 被阅读13634次

1.将cordova本地相关的文件copy到已存在的项目中

1.1 打印当前的路径

 $ pwd
>>>:"/Users/Mac/Desktop"

1.2 创建一个Cordova目录

$ mkdir Cordova

1.3 进入到Cordova目录

$ cd Cordova

1.4 创建一个cordova项目

$ cordova create hello com.example.hello HelloWorld
>>>:"cordova create hello com.example.hello HelloWorld"
 >>>:"Creating a new cordova project."

1.5 进入到hello目录

$ cd hello

1.6 指定生成iOS平台的代码项目

$ cordova platform add ios
>>>:"Adding ios project..."
>>>:"iOS project created with cordova-ios@4.0.1"
>>>:"Discovered plugin "cordova-plugin-whitelist" in config.xml. Installing to the project"
>>>:"Fetching plugin "cordova-plugin-whitelist@1" via npm"
>>>:"Installing "cordova-plugin-whitelist" for ios"

1.7 进入到"./platforms/ios" 路径

$ cd /Users/Mac/Desktop/Cordova/hello/platforms/ios

1.8 "/Users/Mac/Desktop/Cordova/hello/platforms/ios" 路径下面需要copy的4个文件夹copy到新建项目的根路径中

CordovaLib  cordova  www  platform_www
将cordova中的文件夹copy到新建项目的根路径中

1.9 需要将下面的两个"config.xml" -> 各自copy到已存在的iOS项目的文件夹内

config.xml (一)
config.xml (二)

2.配置相关参数

2.1 下图"Run Script.png" 中点击①中的按钮创建"New Run Script Phase" ,②为创建的"Run Script"

Run Script.png

2.2 将下图"Copy www directory.png" 中①原名称"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
Copy www directory.png

2.3 Build Settings -> Other Linker Flags 中添加"-ObjC -all_load"

2.4 Add Files to ... -> CordovaLib.xcodeproj


CordovaLib.xcodeproj

2.5 Add Files to ... -> config.xml


上面的 "config.xml (二)"

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


www.png

2.7 Schemes按照下图配置,然后编译一次程序,最后导入下面两项
Build Phases -> Target Dependencies -> CordovaLib
Build Phases -> Link Binary With Libraries -> libCordova.a

注意选对Schemes编译

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

#import <Cordova/CDVViewController.h>
#import <Cordova/CDVCommandDelegateImpl.h>
#import <Cordova/CDVCommandQueue.h>
@interface ViewController : CDVViewController
@end
ViewController.h

3. 自定义插件

3.1 在config.xml文件中加入

<feature name="YourPluginName"> 
    <param name="ios-package" value="EOPlugin" /> 
    <param name="onload" value="true" /> 
</feature>

3.2 创建一个"EOPlugin" 类,实现下面的的方法

  • EOPlugin.h 实现

import <Cordova/CDVPlugin.h>

@interface EOPlugin : CDVPlugin

  • (void)myMethod:(CDVInvokedUrlCommand*)command;
    @end

> - EOPlugin.m 实现

> ```
#import "EOPlugin.h"
@implementation EOPlugin
- (void)myMethod:(CDVInvokedUrlCommand*)command
{
    CDVPluginResult* pluginResult = nil;
    NSString* myarg = [command.arguments objectAtIndex:0];
    if (myarg != nil) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];
    }
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end

3.3 编写index.html文件如下

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title></title>
  <script type="text/javascript" src="cordova.js"></script>
  <script type="text/javascript" src="cordova_plugins.js"></script>
  <script type="text/javascript">
 document.addEventListener("deviceready", yourCallbackFunction, false);
   function buttonClick(){
    Cordova.exec(successFunction, failFunction, "YourPluginName", "myMethod", ["回调方法"]);
   }
   function successFunction(){
    alert("successFunction");
   }
   function failFunction(){
    alert("failFunction");
   }
  </script>
 </head>
 <body>
  <p>ExampleObject</p>
  <button onclick="buttonClick()">自定义插件</button>
 </body>
</html>
index.html

运行效果:


运行效果.png

Cordova入门也没有那么难,多看看官方的文档Documentation。自己也练习了下文章在简书上的编写,体验还不错,给个好评。

相关文章

网友评论

  • 沃小沃:按你的demo写的报错,这个是什么原因啊
    NSURLConnection finished with error - code -1100
  • 沃小沃:怎么才能加载自己的viewcontroller
  • 一抹月光3053:Cannot find module '/Users/shenzhouguangda/Desktop/cordova/CordovaDemo/cordova/lib/copy-www-build-step.js'

    这个是怎么回事?
    蓝色达风:我跟你同样问题,请问怎么解决的
  • 十八掌:楼主 我在按照你上面的步骤写的时候出错如下:Error: Unhandled "error" event. ( Error from Cordova Fetch: Error: npm: Command failed with exit code 1 Error output:
    npm ERR! code ENOLOCAL
    npm ERR! Could not install "../../../../usr/local/lib/node_modules/cordova/node_modules/_cordova-app-hello-world@3.12.0@cordova-app-hello-world/index.js" as it is not a directory and is not a file with a name ending in .tgz, .tar.gz or .tar

    npm ERR! A complete log of this run can be found in:
    npm ERR! /Users/tianview/.npm/_logs/2017-09-29T02_33_55_034Z-debug.log)

    这个是什么原因的了
    还请指点一下 :pray:
  • seanward:如果是导入官方的插件,该怎么做吗?如果用命令(cordova plugin add cordova-plugin-statusbar)的话,好像不支持这样的项目呀(将cordova资源复制到已有的项目)
  • 鱼与熊掌不能兼得:非常好,使用cordova插件分享到微信朋友圈这个怎么做
  • nbawater1234:如何集成ionic到原有的项目中去
  • sankun:点击没反应什么情况
  • 37ee95c67c5e:楼主大大 一直不知道 2.1 这个怎么处理 我按照你说的一直出错呀
  • 36d170e52f5d:写的非常不错,有个问题不是很明白。
    Cordova 4.x 的版本, CDVViewController中移除了webViewDidFinishLoad等UIWebView的代理函数,继承CDVViewController后,如果要注入自己的一些JS,4.x之前的版本,直接在webViewDidFinishLoad中执行stringByEvaluatingJavaScriptFromString来实现,4.x的版本该如何注入JS?在什么地方注入?
  • 15e64cb0aa93:写的非常好 几乎看多所有关于cordova ios的文章 基本都是一知半解的,楼主就把所有流畅讲的非常细。
  • AppleIdGX:非常有用,没有报错。 网络上关于cordova在iOS上的博客写的都不太好,希望楼主多写一点这样的文章。
  • iSuAbner:谢谢楼主了 帮助很大 本来一脸萌比来找
  • 想吃小馄饨啊:楼主,在2.2的3里面填写的那段是什么意思啊,我填过之后报错了,有点不明白
    37ee95c67c5e:@西河老伯 我现在也是这个地方报错 就是 www 这个文件夹处理不好
    西河老伯:已经解决掉了
    西河老伯:@遇见在转角 我也是这个问题 ,你最后怎么解决了?
  • 藕藕藕汀:楼主,怎么在点击一个MainViewController中的button的时候调用一个本地的html文件啊,急求
    藕藕藕汀:@iwevon 我最近做一个Cordova的下载图片的插件,在插件类中的设置成功失败的block回调中用了__week的方法报错,不造怎么解决
    藕藕藕汀:@藕藕藕汀 谢谢楼主。是这样做的,很完美
    iwevon:@藕藕藕汀 如果是Cordova 你可以看看源码 “CDVViewController line:304” 如下
    NSURLRequest* appReq = [NSURLRequest requestWithURL:appURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0];
    [self.webViewEngine loadRequest:appReq];
  • johnmuu:继续加油! :smile:
  • 5c71a2c54d42:最近升级cordova,把6.0.0版本的cordova添加进我的新项目了,不过cordova里面的CDVViewController跟以前不一样了,当书写self.wwwFolderName = @"https://&quot;;self.startPage = @"www.baidu.com";时报了ERROR Internal navigation rejected - <allow-navigation> not set for url='https://www.baidu.com/',这个问题您有遇到过么?
    XLsn0w: self.viewController.wwwFolderName =
    self.viewController.startPage = @"index.html";
  • 5c71a2c54d42:看过的写得最好的,如果告诉添加插件的方法就更好了。本人刚接触cordova,虽然自己添加了插件文件运行也没有报错,还不知插件能不能正常使用呢?
    iwevon:@5c71a2c54d42 谢谢打赏,Add Plugin 官方的说明文档URL(http://cordova.apache.org/docs/en/latest/cordova/plugins/pluginapis.html),增加cordova-plugin-console 插件在(http://www.jianshu.com/p/d24219c008b6)中的 3.3 Plugin APIs有说,最近比较忙,5号的时候增加一篇 Camera插件或者其他插件的使用

本文标题:使用Cordova进行iOS开发 (已存的项目中添加Cordov

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