2019-09-29 19:00:11 investzhu 阅读数 15

Protocol Buffer  是谷歌出的一种开源的数据传输文件

使用的话分为4步

1:安装编码器 :(编译.proto文件 生成.h .m 文件 )

终端输入 :protoc *.proto --objc_out=../Pro_out 

2 项目中 导入protobuf 库, (可以github 上下载 也可以使用 pods 导入)

 

3 编码 或者 序列化(把 对象 编译成 2进制) 

 

4 解码或者叫 反序列化

 

 

2015-03-13 18:42:58 hyichao_csdn 阅读数 8070
让我们一起打开下面这个链接

在github上有protobuf-objc,其中的readme可以教会我们安装proto到咱们电脑里面。然后利用protoc,也就是protobuf的编译器可以编译.proto文件,生成一些.h和.m文件。
在移动App中,使用protobuffer可以做储存,可以做网络传输,可以干很多和数据打交道的事情。
最简单的,加入做一个APP,你要记录用户数据对吧?用户账号是?密码是?性别是?有没有女朋友?
为了记录这些数据到服务器,就需要合适的数据结构。有人说,为什么一定要用protobuf?为什么不用其他的如json?如xml?关于这个问题,请到stackoverflow,csdn等格调甚高的地方去寻找,去发现。。我要用的原因,就是我需要用,不用就会落后,就会挨打。。

首先是怎么安装protobuf这个工程。
(摘抄一段来自https://github.com/alexeyxo/protobuf-objc的文档)

How To Install Protobuf

Building the Objective-C Protobuf compiler

  1. Check if you have Homebrew
    brew -v
  2. If you don't already have Homebrew, then install it
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. Install the main Protobuf compiler and required tools
    brew install automake
    brew install libtool
    brew install protobuf
  4. (optional) Create a symlink to your Protobuf compiler.
    ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
  5. Clone this repository.
    git clone https://github.com/alexeyxo/protobuf-objc.git
  6. Build it!
    ./build.sh

什么?看不懂?没关系,本爷就是为了翻译才贴上的

首先,打开终端!

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

brew install automake
brew install libtool
brew install protobuf

就是利用brew下载安装了。protobuf就是我们想要的,另外两个是依赖库

git clone https://github.com/alexeyxo/protobuf-objc.git
./build.sh

从github下载protobuf-objc这个工程,build脚本里面做的是编译

注意:编译工程过程中,有可能会出现错误。别慌!看编译错误的提示。一般错误只是因为环境变量和路径没有配置好,少了一些东西,例如少了编译protobuf这个工程的依赖库,按照提示添加路径即可

有了工程以后,我们就可以开始测试一下怎么用protobuf了

打开Xcode!新建一个工程!
然后有两个方法把protobuf添加到你的工程里面,一个是直接添加,一个是利用cocoapod
强烈推荐后者,因为cocoapods能够很方便的管理第三方类库,以后人家的工程升级了,你只需要一行
pod update
就ok~duang~

关于安装和使用cocoapod,属于另一个话题,看另一个博文
在Podfile添加下面这个句子

platform :ios , 6.0
pod "ProtocolBuffers", "~> 1.9.7"

在保存之后,到终端,cd到工程里面,
pod install

等一会,cocoapod就会帮我们添加好,以后我们就应该打开
project的workspace,因为添加了pod作为子工程。

还没结束
在你的工程里面,新建一个文件夹,命名假如叫Protobuf
在这个文件夹里面新建一个proto文件。例如要在本地储存用户信息,那么就新建一个user.proto
里面内容可以如下
package csdnblog;

message PBUser {

required string userId = 1;                       // 用户ID
optional string nick = 2;                         // 用户昵称
optional string avatar = 3;                       // 用户头像

optional string password = 7;
optional string email = 8;
optional string mobile = 9;                       // 手机号码
optional string qqOpenId = 10;                    // QQ ID
optional string sinaId = 11;                      // SINA UserID
optional string weixinId = 12;                    // WeChat UserID
}

上面这个例子包括了几个要素。
一个是包名。包的概念在object c里面没有,java里面有,c++里面namespace也是差不多意思。
顺便提一下,oc里面一般在库名前面添加两个字母,起的作用差不多就是包的作用,作为类的上一层组织结构。
例如官方的NS,例如AFNetworking这种第三方类库的AF。

回到正题。编写pb文件,第二个要素是message
一个message就是一个整体,里面有哪些必要的内容,哪些可选的内容。详细的proto语法随便一找一大把,就不啰嗦了。

写好了proto,接下来就是编译这个proto文件,protobuf-objc这个类库会编译声称一些源码,是读写proto数据的接口API。
编译命令如下:
先打开工程,建议单独新建一个文件夹作为输出路径,例如工程下新建文件夹Gen,用来放generate出来的.pb.h文件&&.pb.m文件
打开终端
cd到工程路径下
protoc --plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out="./Gen"

大功告成!


2017-05-19 16:52:00 weixin_33937499 阅读数 4

原文地址:http://blog.csdn.net/long458/article/details/54693371

这次搭建iOS的ProtocolBuffer编译器和把.proto源文件编译成.pbobjc.h 和 .pbobjc.m文件时,碰到不少问题!
搭建pb编译器到时没有什么问题,只是在把
.proto文件编译出来后,我用cocoaPods集成ProtocolBuffers到自己项目,
cocoaPods集成的时候,我尝试了两个库,一个是:
https://github.com/google/protobuf.Git
另外一个是:
https://github.com/alexeyxo/protobuf-objc.git
但是运行时都一直报错通过:
一会报ProtocolBuffer库文件找不到;
一会报版本不对:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;
一会报属性数据格式不存在,不匹配。

最后不得已只好放弃CocoaPods, 直接把从https://github.com/google/protobuf下载下来的库拖进工程里面,这样才OK了!
简单说下我这边pb编译器的安装过程,和编译后的使用demo:

一、环境安装:pb编译器的安装
1、从https://github.com/google/protobuf/releases下载protocolBuffer对应版本编译器包,比如目前的对应的objc最新版本
    下载地址为:https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-objectivec-3.1.0.zip
  2、解压包,假设解压后的文件夹名为: protobuf-objectivec-3.1.0,     打开终端,进入文件夹protobuf-objectivec-3.1.0, 依次执行以下命令:
./configuremakemake checksudo make install

如果编译顺利的话,便可以使用protoc命令了,以后便可以用这个命令将.proto文件转换为不同语言的源代码文件。

二、创建新项目,导入pb库,编写proto文件编译,使用过程 1、从https://github.com/google/protobuf.git下载源码,解压,里面有支持不同语言的版本源码,
  我们只需要里面的支持objc的文件夹名为:objectivec,如图:
  

img_0f8216f25f6493715d3b5545177550f2.png

2、新建一个工程命名为Tan_ProtocolBuffer,创建一个文件夹,假设命名为:protocolbuf, 把第一步的pb源码复制到此文件夹中:

  
img_651b9e1656c3940143b9d153602eeaf1.png

3、使用Xcode打开工程,点击左下角“+”, 引用protocolBuffer源文件到工程中
  (源文件里面有两个工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)

  
img_bab0f08f68132e5c61f237f48fa5a04b.png
img_17cbad555ca4f4ed68d181e687637ec8.png

4、选中工程: targets —> Build Phases —> Link Binary With Libraries, 引用源码静态库文件:libProtocolBuffers.a

  
img_4abc50a3e227048cf4a74a30ecfea140.png

5、在工程设置搜索静态库的头文件(pb文件在protocolbuf文件夹里面):
   targets —> Build Setting —> Search Paths —> Header Search Paths, 写入:$(PROJECT)/protocolbuf

  
img_52a3d6fe7501cfe0e74a0a1acf082c4b.png

6、编写测试文件.proto,比如新建一个文件Person.proto, 按照官方标准语法https://developers.google.com/protocol-buffers/ 编写通用代码,  写好后在终端进入该Person.proto文件所在目录,使用protoc命令:protoc .proto --objc_out=../Pro_out 进行编译。  把Person.proto文件编译成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夹里面。  如果Person.proto源文件有语法问题,编译时会报错;当编译时什么提示都没有,表示编译成功:  将编译好的.pbobjc.h和.pbobjc.m拖入工程中,因为不支持arc, 所以需要在*.pbobjc.m设置-fno-objc-arc, 然后就可以使用了。
  截图如下:  
   

img_6d7f42f70d658c3ca8aa55ee1cc07081.png

img_e6d0eb46d39cd42dea4622e8206e9ae2.png
    ![](http://upload-images.jianshu.io/upload_images/1293851-7dbc1e8b34f2e1b1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   
img_da8bcb6c45814c6598f74206df25ddfd.png
 ![](http://upload-images.jianshu.io/upload_images/1293851-28ccd3f34f77c698.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

7、编写测试代码,使用Person类进行数据序列化和反序列:
  

img_343437918f7286df4e8b5b659a76cc9a.gif

示例demo下载地址:https://github.com/xiaotanit/Tan_ProtocolBuffer

原文链接:http://www.cnblogs.com/tandaxia/p/6181534.html

2017-01-23 14:31:01 long458 阅读数 634

 这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题!

搭建pb编译器到时没有什么问题,只是在把*.proto文件编译出来后,我用cocoaPods集成ProtocolBuffers到自己项目,

cocoaPods集成的时候,我尝试了两个库,一个是:

https://github.com/google/protobuf.git,

另外一个是:

https://github.com/alexeyxo/protobuf-objc.git

但是运行时都一直报错通过:

一会报ProtocolBuffer库文件找不到;

一会报版本不对:This file was generated by a different version of protoc which is incompatible with your Protocol Buffer library sources ;

一会报属性数据格式不存在,不匹配。

 

   最后不得已只好放弃CocoaPods, 直接把从https://github.com/google/protobuf下载下来的库拖进工程里面,这样才OK了!

简单说下我这边pb编译器的安装过程,和编译后的使用demo:

 

一、环境安装:pb编译器的安装

     1、从https://github.com/google/protobuf/releases下载protocolBuffer对应版本编译器包,比如目前的对应的objc最新版本

    下载地址为:https://github.com/google/protobuf/releases/download/v3.1.0/protobuf-objectivec-3.1.0.zip


  2、解压包,假设解压后的文件夹名为: protobuf-objectivec-3.1.0, 
    打开终端,进入文件夹protobuf-objectivec-3.1.0, 依次执行以下命令:

./configure
make
make check
sudo make install

  如果编译顺利的话,便可以使用protoc命令了,以后便可以用这个命令将.proto文件转换为不同语言的源代码文件。

 

二、创建新项目,导入pb库,编写proto文件编译,使用过程

      1、从https://github.com/google/protobuf.git下载源码,解压,里面有支持不同语言的版本源码,

  我们只需要里面的支持objc的文件夹名为:objectivec,如图:

  

 

  2、新建一个工程命名为Tan_ProtocolBuffer,创建一个文件夹,假设命名为:protocolbuf, 把第一步的pb源码复制到此文件夹中:

  

 

  3、使用Xcode打开工程,点击左下角“+”, 引用protocolBuffer源文件到工程中

  (源文件里面有两个工程配置文件:ProtocolBuffers_iOS.xcodeproj和ProtocolBuffers_OSX.xcodeproj,引用ProtocolBuffers_iOS.xcodeproj就好)

      

   

  4、选中工程: targets —>  Build Phases  —>  Link Binary With Libraries, 引用源码静态库文件:libProtocolBuffers.a

  

 

  5、在工程设置搜索静态库的头文件(pb文件在protocolbuf文件夹里面):

   targets —>  Build Setting  —>  Search Paths  —> Header Search Paths, 写入:$(PROJECT)/protocolbuf 

  

 

  

  6、编写测试文件*.proto,比如新建一个文件Person.proto, 按照官方标准语法https://developers.google.com/protocol-buffers/ 编写通用代码,
  写好后在终端进入该Person.proto文件所在目录,使用protoc命令:protoc *.proto --objc_out=../Pro_out 进行编译。
  把Person.proto文件编译成Person.pbobjc.h和Person.pbobjc.m, 生成的文件在Pro_out文件夹里面。
  如果Person.proto源文件有语法问题,编译时会报错;当编译时什么提示都没有,表示编译成功:
  将编译好的*.pbobjc.h和*.pbobjc.m拖入工程中,因为不支持arc, 所以需要在*.pbobjc.m设置-fno-objc-arc, 然后就可以使用了。

  截图如下:  

    

 

    

 

           

 

   

 

     

 

 

  7、编写测试代码,使用Person类进行数据序列化和反序列:

  

示例demo下载地址:https://github.com/xiaotanit/Tan_ProtocolBuffer

 

原文链接:http://www.cnblogs.com/tandaxia/p/6181534.html 

2015-10-14 18:25:10 qq_29892943 阅读数 2786

1:什么是protobuf ?
protobuf是google推出的一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。支持C++、Python、Java三种语言。
在github上有protobuf-objc,其中的readme可以教会我们安装proto到咱们电脑里面。然后利用protoc,也就是protobuf的编译器可以编译.proto文件,生成一些.h和.m文件。
在移动App中,使用protobuffer可以做储存,可以做网络传输,可以干很多和数据打交道的事情。
最简单的,加入做一个APP,你要记录用户数据对吧?用户账号是?密码是?性别是?有没有女朋友?
为了记录这些数据到服务器,就需要合适的数据结构。有人说,为什么一定要用protobuf?为什么不用其他的如json?如xml?关于这个问题,请到stackoverflow,csdn等格调甚高的地方去寻找,去发现。。我要用的原因,就是我需要用,不用就会落后,就会挨打。。
2.安装protobuf这个工程?

Check if you have Homebrew
brew -v
If you don't already have Homebrew, then install it
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Install the main Protobuf compiler and required tools
brew install automake
brew install libtool
brew install protobuf
(optional) Create a symlink to your Protobuf compiler.
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin
Clone this repository.
git clone https://github.com/alexeyxo/protobuf-objc.git
Build it!
./build.sh

首先,打开终端!

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

    brew install automake  
    brew install libtool  
    brew install protobuf  

就是利用brew下载安装了。protobuf就是我们想要的,另外两个是依赖库

git clone https://github.com/alexeyxo/protobuf-objc.git  
./build.sh  

从github下载protobuf-objc这个工程,build脚本里面做的是编译‘
注意:编译工程过程中,有可能会出现错误。别慌!看编译错误的提示。一般错误只是因为环境变量和路径没有配置好,少了一些东西,例如少了编译protobuf这个工程的依赖库,按照提示添加路径即可
有了工程以后,我们就可以开始测试一下怎么用protobuf了
3.使用
打开Xcode!新建一个工程!
然后有两个方法把protobuf添加到你的工程里面,一个是直接添加,一个是利用cocoapod
强烈推荐后者,因为cocoapods能够很方便的管理第三方类库,以后人家的工程升级了,你只需要一行pod update就ok
如果不会cocoapods的可以看我的另一篇博客文章,里面有详细的教程

在Podfile添加下面这个句子

platform :ios , 6.0  
pod "ProtocolBuffers", "~> 1.9.7" 

在保存之后,到终端,cd到工程里面,

pod install  

等一会,cocoapod就会帮我们添加好,以后我们就应该打开
project的workspace,因为添加了pod作为子工程。

在你的工程里面,新建一个文件夹,命名假如叫Protobuf
在这个文件夹里面新建一个proto文件。例如要在本地储存用户信息,那么就新建一个person.proto
里面内容可以如下

package csdnblog;  

message PBUser {  

required string userId = 1;                       // 用户ID  
optional string nick = 2;                         // 用户昵称  
optional string avatar = 3;                       // 用户头像  

optional string password = 7;  
optional string email = 8;  
optional string mobile = 9;                       // 手机号码  
optional string qqOpenId = 10;                    // QQ ID  
optional string sinaId = 11;                      // SINA UserID  
optional string weixinId = 12;                    // WeChat UserID  

面这个例子包括了几个要素。
一个是包名。包的概念在object c里面没有,java里面有,c++里面namespace也是差不多意思。
顺便提一下,oc里面一般在库名前面添加两个字母,起的作用差不多就是包的作用,作为类的上一层组织结构。
例如官方的NS,例如AFNetworking这种第三方类库的AF。

回到正题。编写pb文件,第二个要素是message
一个message就是一个整体,里面有哪些必要的内容,哪些可选的内容。详细的proto语法随便一找一大把,就不啰嗦了。

写好了proto,接下来就是编译这个proto文件,protobuf-objc这个类库会编译声称一些源码,是读写proto数据的接口API。
编译命令如下:
先打开工程,建议单独新建一个文件夹作为输出路径,例如工程下新建文件夹Gen,用来放generate出来的.pb.h文件&&.pb.m文件
如图:
这里写图片描述
打开终端
cd到工程路径下
1.在gen文件下生成

--plugin=/usr/local/bin/protoc-gen-objc person.proto --objc_out=../Gen

或者在protobuf文件下生成

protoc --plugin=/usr/local/bin/protoc-gen-objc  --objc_out=./ person.proto
//这种则是生成在Protobuf目录下,也就是和person.proto一个目录下
没有更多推荐了,返回首页