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.配置好這些內(nèi)容就去下載官網(wǎng)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.以上是官網(wǎng)的demo,以下是自己的操作

(1)創(chuàng)建Xcode你的工程。創(chuàng)建.podspec 和Podfile

? ? $ pod spec create iOS_Demo?

這樣創(chuàng)建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內(nèi)容:有幾個重點

# Base directory where the .proto files are.

? src = "../../protos" ? ?#指的就是在你的xcode工程內(nèi)*.xcodeproj當前目錄 上級目錄的上級開始protos文件绊序。

? ?#{src}/*.proto ?指的的protos文件內(nèi)的.proto的內(nèi)容豪嗽。通過終端命令查找編譯。

(2)然后編譯你的podfile($pod init ?#創(chuàng)建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的庫和內(nèi)容

編譯的庫:

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內(nèi)也就有對應的*.proto ? 對應編譯出來的*.pbobjc.h/*.pbobjc.m/*.pbrpc.h/*.pbrpc.m ?

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

類中導入*.pbobjc.h/?*.pbobjc.m? /*.pbrpc.h/*.pbrpc.m ?估蹄,進行利用

比如我發(fā)起的網(wǎng)絡(luò)請求:

? ??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;//簽名參數(shù)?zyy

? ? ? ? ? ? map SpareParameter= 4;//備用參數(shù)map zyy

? ? ? ? ? ?}

? ?/************************/

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

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

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

? ? request.HTTPBody?= [testBaseRequest?data]; ?//testBaseRequest轉(zhuǎn)化為data請求數(shù)據(jù)

?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的利用請參考谷歌官網(wǎng)demo,

參考:谷歌?http://www.grpc.io/自己理解著寫的,如發(fā)現(xiàn)有錯誤歡迎指正教導载城。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肌似,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诉瓦,更是在濱河造成了極大的恐慌川队,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬澡,死亡現(xiàn)場離奇詭異固额,居然都是意外死亡,警方通過查閱死者的電腦和手機煞聪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門斗躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昔脯,你說我怎么就攤上這事啄糙。” “怎么了云稚?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵隧饼,是天一觀的道長。 經(jīng)常有香客問我碱鳞,道長桑李,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮贵白,結(jié)果婚禮上率拒,老公的妹妹穿的比我還像新娘。我一直安慰自己禁荒,他們只是感情好猬膨,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呛伴,像睡著了一般勃痴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上热康,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天沛申,我揣著相機與錄音,去河邊找鬼姐军。 笑死铁材,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的奕锌。 我是一名探鬼主播著觉,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惊暴!你這毒婦竟也來了饼丘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辽话,失蹤者是張志新(化名)和其女友劉穎肄鸽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屡穗,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡贴捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年忽肛,在試婚紗的時候發(fā)現(xiàn)自己被綠了村砂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屹逛,死狀恐怖础废,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罕模,我是刑警寧澤评腺,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站淑掌,受9級特大地震影響蒿讥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一芋绸、第九天 我趴在偏房一處隱蔽的房頂上張望媒殉。 院中可真熱鬧,春花似錦摔敛、人聲如沸廷蓉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桃犬。三九已至,卻和暖如春行楞,著一層夾襖步出監(jiān)牢的瞬間攒暇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工子房, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留扯饶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓池颈,卻偏偏與公主長得像尾序,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躯砰,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容