文档章节

kerkee在iOS上的快速上手指南

子鸿
 子鸿
发布于 2016/04/28 14:54
字数 1361
阅读 1196
收藏 38

这篇文章将介绍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快速上手指南

简述:

只需三步即可代码快速上手

  1. 注册js与native对应的类

  2. 实现native部分与js对应的方法

  3. 创建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即可运行起来

© 著作权归作者所有

共有 人打赏支持
子鸿

子鸿

粉丝 14
博文 3
码字总数 7005
作品 1
东城
私信 提问
加载中

评论(3)

UstarWay
UstarWay
请问:该框架与dcloud的h5+runtime有什么不同?
更具有实用潜力呢?
子鸿
子鸿

引用来自“ios122”的评论

不知道 和 react-native 比起来 有什么 优势; 又一个轮子?

不一样的,Kerkee是一个多主体共存型Hybrid框架,具有跨平台、用户体验好、性能高、扩展性好、灵活性强、易维护、规范化、集成云服务、具有Debug环境、彻底解决跨域问题。
ios122
ios122
不知道 和 react-native 比起来 有什么 优势; 又一个轮子?
微信开放平台开发工具包(SDK)

iOS开发工具包 开发工具包(SDK) 使用微信分享、登录、收藏、支付等功能需要的库以及文件。点击下载iOS开发工具包64位 使用微信语音识别接口、语音合成接口。点击下载 语音SDK+Demo+开发文档...

雪深
2015/02/05
0
0
基于 mmap 的高性能通用 key-value 组件 - MMKV

MMKV——基于 mmap 的高性能通用 key-value 组件 MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今,在 iOS 微信上...

匿名
2018/09/21
0
0
革命性移动端开发框架-Flutter时间简史

说到Flutter,可能很多同学都会将它和这几个词关联起来:新兴的、移动端、动态化、跨平台、开发框架。 从去年开始Flutter的热度在不断地上升,那么它对很多同学造成了一个误区:认为Flutter...

JiaPengHui
03/09
0
0
iOS 学习资料整理

视频教程(英文) Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频 iPad and iPhone Applic...

拉偶有所依
2015/01/19
2.2K
4
微信自用高性能通用key-value组件MMKV已开源!

1、MMKV简介 腾讯微信团队于2018年9月底宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性。近期也已移植到 Android ...

JackJiang2011
2018/09/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何有效的背单词

转眼间到了大三快要结束了。英语四级考了三次了,每次都220多分。成绩很稳定,但离四级线还有200多分。学校规定如果过不了四级线,就拿不到学士学位证。没有学位证就找不到好工作,找不到好工...

我是菜鸟我骄傲
41分钟前
1
0
导出表格

https://blog.csdn.net/hhzzcc_/article/details/80419396

Js_Mei
今天
0
0
Ubuntu中安装Elasticsearch

1.安装jre elasticsearch是使用java开发的搜索引擎,因此其运行依赖于java runtime environment,我们在这里不使用Oracel的官方jre,改为使用open-jre。 运行环境: ubuntu:18.04 jre:openj...

cloes
今天
0
0
nginx rails 详细站点配置入门教程

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

xiangyunyan
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部