kerkee在iOS上的快速上手指南
這篇文章將介紹kerkee如何在iOS上快速上手!
kerkee是一個多主體共存型Hybrid框架,具有跨平臺、用戶體驗好、性能高、擴展性好、靈活性強、易維護、規范化、集成云服務、具有Debug環境、徹底解決跨域問題。
Github上的地址: https://github.com/kercer/kerkee_ios
OSChina上的地址: http://git.oschina.net/zihong/kerkee_ios
官網地址: http://www.kerkee.com
kerkee的native部分目前支持Android和iOS平臺,兩個平臺的架構設計及接口設計保持一致,大大降低了跨平臺的成本,下面介紹一下如何集成kerkee以及如何上手快速做出一款自己的demo
kerkee的集成有:包的方式集成和源碼集成兩種方式,你可以選擇其中的一種方式集成
包方式集成
iOS的kerkee使用CocoaPods進行管理,在集成的時候很方便。
簡述:如果你已知道CocoaPods如何使用,你只需在Podfile中添加 pod ‘kerkee’, ’~> 1.0.1’ 或者 pod ‘kerkee’ ,然后即可走起,此時你可不用看以下的詳細說明了
CocoaPods的安裝及深入使用:請點擊這里
前提: cocopods安裝,安裝非常簡單,本來想略去這一部分的,但還是貼一下命令吧,如果不明白網絡上搜索一搜一大把。
sudo gem install cocoapods
pod setup
1、 創建Podfile使用也比較簡單,cd到你的工程的根目錄$projectPath
cd $projectPath
pod init
這個命令就會再工程根目錄下面生成一個Podfile文件,podfile用文本編輯就行了
2、 配置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
3、執行導入命令
使用終端cd 到你的Podfile所在的目錄,然后再使用 pod install 就可以把這些開源庫導入,CocoaPods就開始為我們做下載源碼、配置依賴關系、引入需要的framework等一些列工作。
cd $projectPath
pod install --verbose
安裝完,這些庫都放在一個Pods的工程中,然后會用xcode的workspace來管理這個工程和你自己的工程。以后就打開 yourproject.xcworkspace 就行了。
至此,基本集成已完成!!!恭喜你已經集成了kerkee,接下來就代碼走起!!!
源碼集成
- 1、拉取源碼 git clone https://github.com/kercer/kerkee_ios.git
- 2、拷貝根目錄下的kerkee目錄到你的工程目錄(這步也可以忽略)
- 3、打開你的工程,把kerkee.xcodeproj文件拉到你的工程里進行lib依賴
- 4、找到你工程的TARGETS,在 Embedded Binaried 添加kerkee.framework
iOS快速上手指南
簡述: 只需三步即可代碼快速上手
- 注冊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] ];
- 實現JS對應的Native接口
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
- 創建KCWebView
在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];
- 實現KCWebView代理
#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即可運行起來
來自: http://blog.linzihong.com/kerkeezai-iosshang-de-kuai-su-shang-shou-zhi-nan/