博客> Protobuf 安装和使用 - 完整版
Protobuf 安装和使用 - 完整版
2017-11-21 17:03 评论:0 阅读:206 lvhahaha
协议 pb protrol

版权归Aaidong所有〜转载需声名〜 原贴地地址:http://blog.csdn.net/aaidong/article/details/44678045

http://blog.csdn.net/hyq4412/article/details/54891038

Protobuf简介

Protocol Buffer是google 的一种数据交换的格式,已经在Github开源,目前最新版本是3.1.0。它独立于语言,独立于平台。google 提供了多种语言的实现:Java、C#、C++、Go 和 Python,Objective-C,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 XML 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

说明

protobuf3.0.0以上才官方支持Objective-C,低于3.0.0的请忽略或使用第三方转换工具 开发环境:32bit & 64bit iOS, 64bit OS X,Xcode7.0+ 基于性能原因没有使用ARC,但可以被ARC代码调用

步骤

转换:将我们编写好的XXX.proto文件转成Objective C文件,也就是XXX.h和XXX.m文件,转换的工具是使用protoc这种二进制文件来生成的,这文件需要自己生成,稍后会介绍如何使用它来转换Objective-C文件 集成:如果在iOS项目中加入protobuf库以及步骤1生成的OC文件 转换

生成protoc

如果没有装autoconf automake libtool需要先装这几个,这里使用brew来安装,在shell执行 brew install autoconf automake libtool即可,如果没有brew请自行先安装brew。

brew -v

查看你的mac里面有没有装brew。brew是mac os里面,类似于ubuntu的apt-get的功能,都可以直接在终端输入命令然后安装程序。-v自然就是版本version的意思

ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

这一句半懂不懂,大概就是利用curl工具访问那个url,然后在ruby环境下载安装brew 建议先去Homebrew官网找最新的下载地址

brew install automake

brew install libtool

brew install protobuf

就是利用brew下载安装了

另外加上 brew的指令的地址 http://www.33lc.com/article/13594.html brew 使用指令

下载面向Objective-C的protobuf库,地址为(https://github.com/google/protobuf/releases),要下载对应Objective-C的版本比如 protobuf-objectivec-3.1.0.zip, 其实哪个库都可以,看跟后台的协议 版本(建议选择 2.6.0,3.1.0版本)解压。(建议把文件夹放在桌面,因为博主曾经放在其他地方,总是make失败。)

cd到下载的目录,依次执行: $ ./autogen.sh

$ ./configure

如果在这里失败了error,不要着急,看brew 的环境,看环境的配置完整了么? lib, autoMake 必不可少。。

$ make

$ make check

$ sudo make install

再执行

objectivec/DevTools/full_mac_build.sh

执行完后会看到src目录下生成了protoc二进制文件

使用protoc转换

创建proto文件,比如Person.proto

syntax = "proto3";

message Person

{ int32 age = 1; string username = 2; string phone = 3; }

需要注意的是要指明proto的语法规则是proto2还是proto3。 在src目录(protoc所在目录)执行

protoc --proto_path=... --objc_out=... XXX.proto

其中proto_path是我们创建的proto文件所在目录,objc_out为Objective-C文件输出路径,XXX.proto是我们创建的proto文件,可以一次转换多个proto文件,加在XXX.proto后面即可。

举例:我们在src目录下新建两个文件夹,gen和protocols文件夹,gen为输出目录,protocols用于存放proto文件,将创建的Person.proto放在protocols文件夹下,执行命令 protoc --proto_path=protocols --objc_out=gen protocols/Person.proto

建议按举例的地址走。熟手绕。。。

然后在gen文件夹下就会生成Person.pbobjc.h和Person.pbobjc.m文件。

集成

将生成的Ojective-C文件(上面例子的Person.pbobjc.h和Person.pbobjc.m)放到项目中,如果项目使用了ARC,要将.m(例子的Person.pbobjc.m)的Complier Flags设为-fno-objc-arc。(protobuf基于性能原因没有使用ARC)

加入protobuf库,有两种方式

第一种是使用CocoaPods集成

使用CocoaPods集成,有一个现成的pod可以使用–Protobuf,可以pod search Protobuf搜索查看详情,pod内容为 !!!!如果protrol 是3.1.0

platform :ios, '7.1' pod 'Protobuf', '~> 3.1.0'

需要注意的是 platform :iOS, ‘7.1’ 7.1及以上才能导入这个库,这种方式优点是操作简单,缺点是platform :ios, ‘7.1’ 要7.1或以上

第二种是把相关文件拖入项目中。

拖入相关文件到项目中,将objectivec文件夹下的所有的.h文件和.m文件(除了GPBProtocolBuffers.m)(GPB开头的那些文件)以及整个google文件夹add到项目中,如果项目中使用了ARC需要将以上所有.m文件的的Complier Flags设为-fno-objc-arc。这种方法的优点是灵活性强,没有7.1的束缚。缺点是操作麻烦点,如果用了ARC的话还要手动添加-fno-objc-arc(使用CocoaPods集成会自动添加)

建议用cocapods 下载!!

注解:如果用的是2.6.0的protrol

pod 'ProtocolBuffers'

然后就可以在项目中使用了。

收藏
2
sina weixin mail 回到顶部