iOS pb编译器使用

Protocol Buffers 是 Google 出品的用来序列化/反序列化数据的工具。原生支持 C++、Java、Python。

如果要在 iOS 上使用 PB,可以直接使用 C++,但是编译过程很麻烦,因此这里使用的是第三方的库。

安装 Protocol Buffers

  • 安装 homebrew
1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安装 automake、libtool、protobuf。这里安装的 protobuf 是 google 官方版本。
1
2
3
brew install automake
brew install libtool
brew install protobuf

如果后面的步骤出错了,请确保已经安装了这些工具:automake、autoconf、autoreconf、aclocal、libtool、protoc。其中的 protoc 用来把 .proto 文件编译成 C++、Java 或 Python 代码。

  • 编译 protoc-gen-objc。protoc-gen-objc 是 protoc 的一个插件,使其能将 .proto 文件编译成 objective-c 代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
git clone git@github.com:alexeyxo/protobuf-objc.git

cd protobuf-objc

./autogen.sh

# 后面的参数保证 configure 能找到 protobuf 相关的头文件和库
# 避免报 protobuf headers are required 错误
./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib

make

make install
如果出现以下错误

  • 利用 protoc 将 .proto 文件编译成 objective-c 代码。
1
protoc message.proto --objc_out="."

如果出现下面的错误:

1
2
protoc-gen-objc: program not found or is not executable
--objc_out: protoc-gen-objc: Plugin failed with status code 1.

可以尝试:

1
cp /PATH/TO/protobuf-objc/src/compiler/protoc-gen-objc /usr/local/bin
  • 在 Podfile 中添加pod 'ProtocolBuffers', '1.9.2'然后执行pod install

  • 将生成的 .h 和 .m 文件添加到工程中,编译。

这里会提示找不到GeneratedMessageProtocol。你只需要帅气地将其注释掉就行了。

使用

假设有 person.proto 定义如下 

1
2
3
4
5
message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}

通过 protoc 生成 Person.pb.h 和 Person.pb.m 两个文件。

  • 序列化
1
2
3
4
Person* person = [[[[[Person builder] setId:123]
                                    setName:@"Bob"]
                                   setEmail:@"bob@example.com"] build];
NSData* data = [person data];
  • 反序列化
1
2
NSData* raw_data = ...;
Person* person = [Person parseFromData:raw_data];

参考

http://protobuf.axo.io/#objc
https://github.com/alexeyxo/protobuf-objc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值