单纯的抄袭复制~~~~~~~~~~
配置要求:
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
下载:
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
我的.podspec文件如下:
Pod::Spec.new do |s|
s.name = "ProtoTest"
s.version = "0.0.1"
s.license = "New BSD"
s.summary = "HelloWorld example!!!"
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'
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 ,进行利用
比如我发起的网络请求:
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,