這篇文章將介紹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便可運行起來