ProtocolBuffer for Objective-C 运行环境配置

本文介绍如何在iOS项目中配置Protocol Buffers环境,包括安装编译Protocol Buffers及Objective-C插件,测试.proto文件编译,以及在Xcode项目中使用Protocol Buffers。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Protocol Buffers是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。

Protocol Buffers拥有多项比XML更高级的串行化结构数据的特性:

  • 更简单
  • 小3-10倍
  • 快20-100倍
  • 更少的歧义
  • 可以方便的生成数据存取类

官方版本支持C++\Java\Python三门语言,但是还有很多非官方的语言版本支持,如C、NET(C#、Vb.net)、Flex(AS3)、object-c等.

具体如何使用参考:http://www.cppblog.com/woaidongmao/archive/2009/06/23/88391.html

下面总结下在ios下面怎么配置运行环境:

1、下载ProtocolBuffer包:

注意:2.5版本与下面的object-c插件不兼容,建议下载2.4.1版本的

http://code.google.com/intl/zh-CN/apis/protocolbuffers/

编译安装(生成的编译器protoc在/usr/local/bin目录下):

注:在安装protoBuf包之前首先要确认安装过gcc(可以在终端下输入gcc - version测试)。如果没有安装 Xcod->Preferences->Downlaods->components 安装Command Line

Tools. 在安装过程中如安装失败,就以管理员的身份安装,在命令前加sudo如,sudo make install

1 cd protobuf-2.4.1
2  
3 ./configure
4  
5 make
6  
7 make install

2、下载Objective-C compiler for ProtocolBuffer

目前有两种类型的实现:

(1)、针对ProtocolBuffer2.2做修改,使最后生成的.proto文件编译器(protoc)支持Objective-C类型的文件输出。

http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers

(2)、针对ProtocolBuffer2.3推出的plugin模式编写插件,以插件方式支持Objective-C类型的文件输出。

https://github.com/booyah/protobuf-objc

我选用第二种方式,这也是Google推荐的方式。

git clone https://github.com/booyah/protobuf-objc.git

进入该目录,并执行(生成的插件protoc-gen-objc在/usr/local/bin/目录下):

 注:在执行./autogen.sh时会执行失败则

需要安装autoconf 和automake 安装过程如下:

curl -O http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz
tar -xzvf m4-1.4.13.tar.gz
cd m4-1.4.13
./configure –prefix=/usr/local
make
sudo make install


cd ..
curl -O http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz
tar -xzvf autoconf-2.65.tar.gz
cd autoconf-2.65
./configure –prefix=/usr/local
make
sudo make install
cd ..
curl -O http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz
tar xzvf automake-1.11.tar.gz
cd automake-1.11
./configure –prefix=/usr/local
make
sudo make install
cd ..
curl -O http://mirrors.kernel.org/gnu/libtool/libtool-2.2.6b.tar.gz
tar xzvf libtool-2.2.6b.tar.gz
cd libtool-2.2.6b
./configure –prefix=/usr/local
make

sudo make install



1 cd protobuf-objc
2  
3 ./autogen.sh
4  
5 ./configure
6  
7 make
8  
9 make install

3、测试.proto文件编译

写一个person.proto文件:

1 message Person {
2  required string name = 1;
3  required int32 id = 2;
4  optional string email = 3;
5  
6  enumPhoneType {
7     MOBILE = 0;
8     HOME = 1;
9     WORK = 2;
10  }
11  
12  message PhoneNumber {
13     required string number = 1;
14     optional PhoneType type = 2 [default= HOME];
15  }
16  
17  repeated PhoneNumber phone = 4;
18 }

编译该文件:


To compile the proto files using protoc, you want to indicate the path of the source files, 

To compile the proto files using protoc, you want to indicate the path of the source files, 

the directory to output the files to, and indicate the language.

For example, for C++, you will do something like this:
protoc --proto_path=src --cpp_out=build/cpp src/StoryRequest.proto
And for Objective-C, you will do something like this:
protoc --proto_path=src --objc_out=build/objc src/StoryRequest.proto


protoc –objc_out=/Output/Directory/ person.proto

protoc会使用该插件编译.proto文件,最终生成两个文件:Person.pb.h 、Person.pb.m (不支持ARC)

如果项目中使用了ARC ,所以需要使用 -fno-objc-arc 来标识相关的文件不使用ARC机制:

QQ20130502-3

这个步骤通过后,说明ProtocoBuffer Compiler for Objective-C可以正常工作了。

4、在Xcode中使用ProtocolBuffer

将步骤2中protobuf-obj/src/runtime/Classes目录导入到Xcode项目中,导入时,选中”Copy items into destination group‘s folder(if needed)“。

导入位置选择项目根目录。导入完毕后,项目根目录下将会出现Classes目录,将该目录改名为ProtocolBuffers(注意最后的s): mv Classes ProtocolBuffers

修改项目属性中”Build Settings–>Search Paths–>Header Search Paths”,将项目根目录“.”添加到头文件搜索路径中去。

QQ20130502-1

这样ProtocolBuffer for Objective-C的工作环境就配置好了。

5、使用

1)、将步骤3中编译输出的Person.pb.h 和Person.pb.m添加到项目中

2)、将Person.pb.h 中的 #import <ProtocolBuffers/ProtocolBuffers.h> 改为#import”ProtocolBuffers/ProtocolBuffers.h”

3)、在需要使用的地方引入头文件:#import “Person.pb.h”

1 - (void)viewDidLoad
2 {
3     [super viewDidLoad];
4     // Do any additional setup after loading the view, typically from a nib.
5  
6     [self writeAndReadProtobuf];
7 }
8  
9 - (void)writeAndReadProtobuf{
10     Person *person = [[[[[Person builder] setName:@"极致"]
11                         setId:1]
12                        setEmail:@"abc@163.com"] build];
13     NSData *data = [person data];
14  
15     NSString *docPath = [self applicationDocumentsDirectory];
16     NSString *path = [docPath stringByAppendingFormat:@"/person.data"];
17  
18     if([data writeToFile:path atomically:YES]) {
19         [self readFileWithPath:path];
20     }
21 }
22  
23 - (NSString *)applicationDocumentsDirectory {
24  
25     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
26     NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
27     returnbasePath;
28 }
29  
30 - (void)readFileWithPath:(NSString *)path {
31  
32     NSData *data = [NSData dataWithContentsOfFile:path];
33     Person *person = [Person parseFromData:data];
34  
35     if(person) {
36         NSLog(@"\n id %d \n name: %@ \n email: %@ \n",person.id, person.name, person.email);
37     }
38 }

输出打印的结果如下:

QQ20130502-2

遇到的问题:

在执行 ./autogen.sh时出现错误: /autogen.sh: line 10: autoreconf: command not found 

解决办法:需要安装automake和autoconf:

1 brew install automake
2  
3 brew install autoconf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值