这篇文章将介绍kerkee如何在iOS上快速上手!ios
kerkee是一个多主体共存型Hybrid框架,具备跨平台、用户体验好、性能高、扩展性好、灵活性强、易维护、规范化、集成云服务、具备Debug环境、完全解决跨域问题。git
Github上的地址:https://github.com/kercer/kerkee_ios OSChina上的地址:http://git.oschina.net/zihong/kerkee_ios 官网地址:http://www.kerkee.comgithub
kerkee的native部分目前支持Android和iOS平台,两个平台的架构设计及接口设计保持一致,大大下降了跨平台的成本,下面介绍一下如何集成kerkee以及如何上手快速作出一款本身的demoweb
kerkee的集成有:包的方式集成和源码集成两种方式,你能够选择其中的一种方式集成json
iOS的kerkee使用CocoaPods进行管理,在集成的时候很方便。跨域
简述: 若是你已知道CocoaPods如何使用,你只需在Podfile中添加pod ‘kerkee’, ’~> 1.0.1’
或者 pod ‘kerkee’
,而后便可走起,此时你可不用看如下的详细说明了xcode
CocoaPods的安装及深刻使用:请点击这里网络
***前提:***cocopods安装,安装很是简单,原本想略去这一部分的,但仍是贴一下命令吧,若是不明白网络上搜索一搜一大把。架构
sudo gem install cocoapods pod setup
一、 建立Podfile框架
使用也比较简单,cd到你的工程的根目录$projectPath
cd $projectPath pod init
这个命令就会再工程根目录下面生成一个Podfile文件,podfile用文本编辑就好了
二、 配置Podfile
在你工程的Podfile文件添加
pod ‘kerkee’, ’~> 1.0.1’
或者你想直接使用最新版可把版本号去掉,使用如下这句
pod ‘kerkee’
我帖出个podfile文件配置的例子
# Uncomment this line to define a global platform for your project # platform :ios, '8.0' # Uncomment this line if you're using Swift # use_frameworks! target 'TestKerkeePod' do #or this way,If it is a team work,please do not use this way. #because it use last version of kerkee,it is a bad way #pod ‘kerkee’ pod ‘kerkee’, ’~> 1.0.1’ end target 'TestKerkeePodTests' do end target 'TestKerkeePodUITests' do end
三、执行导入命令
使用终端cd 到你的Podfile所在的目录,而后再使用pod install
就能够把这些开源库导入,CocoaPods就开始为咱们作下载源码、配置依赖关系、引入须要的framework等一些列工做。
cd $projectPath pod install --verbose
安装完,这些库都放在一个Pods的工程中,而后会用xcode的workspace来管理这个工程和你本身的工程。之后就打开yourproject.xcworkspace
就好了。
至此,基本集成已完成!!!恭喜你已经集成了kerkee,接下来就代码走起!!!
一、拉取源码
git clone https://github.com/kercer/kerkee_ios.git
二、拷贝根目录下的kerkee目录到你的工程目录(这步也能够忽略)
三、打开你的工程,把kerkee.xcodeproj文件拉到你的工程里进行lib依赖
四、找到你工程的TARGETS,在Embedded Binaried
添加kerkee.framework
简述:
只需三步便可代码快速上手
注册js与native对应的类
实现native部分与js对应的方法
建立KCWebview进行调用
如下详情说明一下如何快速上手
在使用以前,你必须先注册对应的接口类或模块,使得js对象能与Native类进行映射,全局只须要注册一次就够了
//have rewritten jsBridgeClient in kerkee //you can use this way, first you can import "KCJSDefine.h" //[KCJSBridge registClass:[KCApiOverrideJSBridgeClient class] jsObjName:kJS_jsBridgeClient]; [KCJSBridge registJSBridgeClient:[KCApiOverrideJSBridgeClient class]]; [KCJSBridge registClass:[KCApiTest class] jsObjName:kJS_TestModule]; //you can regist class which inherit from KCJSObject,js call static function //[KCJSBridge registClass:[KCApiJSObjExample class] jsObjName:kJS_JSObjExampleModule]; [KCJSBridge registObject:[[KCApiJSObjExample alloc]init] ];
KCApiOverrideJSBridgeClient
#import "KCApiOverrideJSBridgeClient.h" #import "KCBaseDefine.h" #import "KCJSBridge.h" @implementation KCApiOverrideJSBridgeClient +(void)testJSBrige:(KCWebView*)aWebView argList:(KCArgList*)args { NSString* jsonInfo = [args getString:@"info"]; KCLog(@"%@", jsonInfo); } +(void)commonApi:(KCWebView*)aWebView argList:(KCArgList*)args { NSString* jsonInfo = [args getString:@"info"]; KCLog(@"%@", jsonInfo); NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setObject:@"OK!" forKey:@"info"]; NSString *json = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:dic options:0 error:nil] encoding:NSUTF8StringEncoding]; KCAutorelease(json); //回调 [KCJSBridge callbackJS:aWebView callBackID:[args getObject:@"callbackId"] jsonString:json]; } @end
KCApiTest
#import "KCApiTest.h" #import "KCBaseDefine.h" #import "KCJSBridge.h" @implementation KCApiTest +(void)testInfo:(KCWebView*)aWebView argList:(KCArgList*)args { NSString* jsonInfo = [args getString:@"testInfo"]; KCLog(@"%@", jsonInfo); KCJSCallback* callback = [args getCallback]; if (callback) { [callback callbackJS:aWebView jsonString:@"{}"]; } //也能够这么回调 //[KCJSBridge callbackJS:aWebView callBackID:[args getString:@"callbackId"] string:@"This is testInfo callball"]; } @end
KCApiJSObjExample
#import "KCApiJSObjExample.h" #import "KCJSObjDefine.h" @implementation KCApiJSObjExample - (NSString*)getJSObjectName { return kJS_JSObjExampleModule; } -(void)objExampleNotStaticFunction:(KCWebView*)aWebView argList:(KCArgList*)args { KCLog(@"objExampleNotStaticFunction"); } +(void)objExampleStaticFunction:(KCWebView*)aWebView argList:(KCArgList*)args { KCLog(@"objExampleStaticFunction"); } @end
在ViewController中,添加成员变量
@interface ViewController () { KCWebView* m_webView; KCJSBridge* m_jsBridge; }
初始化KCWebView和KCJSBridge对象
m_webView = [[KCWebView alloc] initWithFrame:self.view.bounds]; //add webview in your view [self.view addSubview:m_webView]; //you can implement webview delegate m_jsBridge = [[KCJSBridge alloc] initWithWebView:m_webView delegate:self];
#pragma mark -- #pragma mark KCWebViewProgressDelegate -(void)webView:(KCWebView*)webView identifierForInitialRequest:(NSURLRequest*)initialRequest { } #pragma mark - UIWebView Delegate - (void)webViewDidFinishLoad:(UIWebView *)aWebView { NSString *scrollHeight = [aWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"]; NSLog(@"scrollHeight: %@", scrollHeight); NSLog(@"webview.contentSize.height %f", aWebView.scrollView.contentSize.height); NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:aWebView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:[scrollHeight floatValue]]; // [aWebView addConstraint:heightConstraint]; NSLog(@"webview frame %@", NSStringFromCGRect(aWebView.frame)); } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { } - (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return YES; }
至此,简单Demo便可运行起来