2018-01-05 google GRPC for Ios Xcode 集成grpc 以及使用

记录篇文章http://blog.csdn.net/g1602333924/article/details/52838887

单纯的抄袭复制~~~~~~~~~~

一 grpc 的简介(可参考谷歌http://www.grpc.io/

1.配置可参考http://www.grpc.io/docs/quickstart/objective-c.html

配置要求:

cocoaPods: Version 1.0 or Higher   查看版本 pod --Version

Xcode: version 7.2 or higher    :installed:sh [sudo] xcode-select --instal

Install with Homebrewsh brew install autoconf automake libtool pkg-config

2.配置好这些内容就去下载官网demo

下载:

 $git clone https://github.com/grpc/grpc.git

Install gRPC plugins and libraries:

$cd grpc

$git submodule update--init

$make

$[sudo]make install

Install protoc compiler:

$brew tap grpc/grpc

$brew install google-protobuf

Run the server:

$cd examples/cpp/helloworld

$make

$./greeter_server&

Run the client:

$cd../../objective-c/helloworld

$pod install

Run the client app:

$ openHelloWorld.xcworkspace

3.以上是官网的demo,以下是自己的操作

(1)创建Xcode你的工程。创建.podspec 和Podfile

    $ pod spec create iOS_Demo 

这样创建ProtoTest.podspec文件 然后编辑此文件可参考(http://guides.cocoapods.org/syntax/podspec.html

我的.podspec文件如下:

Pod::Spec.new do |s|

  s.name         = "ProtoTest"

  s.version      = "0.0.1"

 s.license  = "New BSD"

 s.homepage = "http://www.grpc.io/"

  s.summary = "HelloWorld example!!!"

  s.source = { :git => 'https://github.com/grpc/grpc.git' }

  s.author             = { "" => "1602333924@qq.com" }

  s.source_files  = "Classes", "Classes/**/*.{h,m}"

  s.exclude_files = "Classes/Exclude"

  s.ios.deployment_target = "7.1"

  s.osx.deployment_target = "10.9"

  # Base directory where the .proto files are.

  src = "../../protos"

  # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.

  s.dependency "!ProtoCompiler-gRPCPlugin", "~> 1.0"

  # Pods directory corresponding to this app's Podfile, relative to the location of this podspec.

  pods_root = 'Pods'

  # Path where Cocoapods downloads protoc and the gRPC plugin.

  protoc_dir = "#{pods_root}/!ProtoCompiler"

  protoc = "#{protoc_dir}/protoc"

  plugin = "#{pods_root}/!ProtoCompiler-gRPCPlugin/grpc_objective_c_plugin"

  # Directory where the generated files will be placed.

  dir = "#{pods_root}/#{s.name}"

  s.prepare_command = <<-CMD

    mkdir -p #{dir}

    #{protoc} \

        --plugin=protoc-gen-grpc=#{plugin} \

        --objc_out=#{dir} \

        --grpc_out=#{dir} \

        -I #{src} \

        -I #{protoc_dir} \

        #{src}/*.proto

  CMD

  # Files generated by protoc

  s.subspec "Messages" do |ms|

    ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"

    ms.header_mappings_dir = dir

    ms.requires_arc = false

    # The generated files depend on the protobuf runtime.

    ms.dependency "Protobuf"

  end

  # Files generated by the gRPC plugin

  s.subspec "Services" do |ss|

    ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"

    ss.header_mappings_dir = dir

    ss.requires_arc = true

    # The generated files depend on the gRPC runtime, and on the files generated by protoc.

    ss.dependency "gRPC-ProtoRPC"

    ss.dependency "#{s.name}/Messages"

  end

  s.pod_target_xcconfig = {

    # This is needed by all pods that depend on Protobuf:

    'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1',

    # This is needed by all pods that depend on gRPC-RxLibrary:

    'CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES' => 'YES',

  }

end

以上.podspec内容:有几个重点

# Base directory where the .proto files are.

  src = "../../protos"    #指的就是在你的xcode工程内*.xcodeproj当前目录 上级目录的上级开始protos文件。

   #{src}/*.proto  指的的protos文件内的.proto的内容。通过终端命令查找编译。

(2)然后编译你的podfile($pod init  #创建podfile ),编译podfile如下:

# Uncomment this line to define a global platform for your project

# platform :ios, '9.0'

source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '8.0'

install! 'cocoapods', :deterministic_uuids => false

target 'ProtoTest' do

pod 'ProtoTest', :path => '.'

end

注意: pod 'ProtoTest', :path => '.' 是指当前目录下查询,ProtoTest.podspec的文件。

然后通过$pod install 进行编译grpc的库和内容

编译的库:

Downloading dependencies

Using !ProtoCompiler (3.0.0)

Using !ProtoCompiler-gRPCPlugin (1.0.0)

Using BoringSSL (6.0)

Using Protobuf (3.1.0)

Using gRPC (1.0.0)

Using gRPC-Core (1.0.0)

Using gRPC-ProtoRPC (1.0.0)

Using gRPC-RxLibrary (1.0.0)

这样库的就编译好了。并且在你工程中的pod内也就有对应的*.proto   对应编译出来的*.pbobjc.h/*.pbobjc.m/*.pbrpc.h/*.pbrpc.m  

4.下面就说说如何去利用

类中导入*.pbobjc.h/ *.pbobjc.m  /*.pbrpc.h/*.pbrpc.m  ,进行利用

比如我发起的网络请求:

    NSURL *url = [NSURL URLWithString:@"http://115.239.231.164:8080//tv-http/user/verifyPhone"];

 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

 //    request.timeoutInterval = 0.5;

    request.HTTPMethod = @"POST";

[request addValue:@"application/x-protobuf" forHTTPHeaderField:@"Content-Type"];

    BaseRequest *testBaseRequest = [[BaseRequest alloc] init];    // ProtocBaseRequest.pbobjc.h  中BaseRequest的类,中阐述如

   /********** ProtocBaseRequest.proto如下:**************/


            syntax = "proto3";

             message BaseRequest{

            string token=1;//用户标识 zyy

            string p=2;//加密P zyy

            string sign=3;//签名参数 zyy

            map SpareParameter= 4;//备用参数map zyy

           }

   /************************/

[testBaseRequest setP:@"p->Hello"];

[testBaseRequest setToken:@"token->hello"];

[testBaseRequest setSign:@"sign->hello"];

    request.HTTPBody = [testBaseRequest data];  //testBaseRequest转化为data请求数据

 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration]];

 NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

 if (error)

        {

 NSLog(@"error = %@",error);

        }

 else

        {             

 BaseReply *reply = [[BaseReply alloc ] initWithData:data error:nil];

 BaseReply  *replyOne = [GPBMessage parseFromData:data error:&error]; 

//ProtocBaseReply.proto  生成的就是BaseReply

 NSLog(@"%@",result); 

       }

    }];

[task resume];

以上的利用就是对*.pbobjc.h。

对 *.pbrpc.h的利用请参考谷歌官网demo,

参考:谷歌 http://www.grpc.io/自己理解着写的,如发现有错误欢迎指正教导。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容