zoukankan      html  css  js  c++  java
  • iOS之ProtocolBuffer搭建和示例demo

         这次搭建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 

    关于使用GCDAsyncSocket 和 Protobuf开发中碰到的拆包和粘包问题,见我的下一篇文章:

    CocoaAsyncSocket + Protobuf 处理粘包和拆包问题

     

  • 相关阅读:
    SQL中关于Left Join转为Inner Join的问题,即左关联转为内关联的问题
    Mybatis Plus 2 升到 Mybatis Plus 3 时,oracle 自增序列的相关问题
    Java项目启动时,oracle 驱动异常
    window 下安装 Arthas
    postman 中给所有接口token授权的配置
    探讨:在循环前与在循环中创建对象的区别
    当你无法发现问题所在时,不要简单地把代码或者数据还原
    http://875880923.iteye.com/blog/1963400
    2013成都网络赛 J A Bit Fun(水题)
    2013成都网络赛 C We Love MOE Girls(水题)
  • 原文地址:https://www.cnblogs.com/tandaxia/p/6181534.html
Copyright © 2011-2022 走看看