专栏首页谈补锅iOS之ProtocolBuffer搭建和示例demo

iOS之ProtocolBuffer搭建和示例demo

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

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

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

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff } span.s1 { }

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

另外一个是:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #ffffff } span.s1 { }

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 处理粘包和拆包问题

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #822d0f } span.s1 { }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • http协议笔记

    1、连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,http不保持连接,不保持连接会降低处理速度(因为建立连接速度很慢),保...

    tandaxia
  • CSS笔记

    @import url(xx.css): 在一个css中,添加对其他css文件的引用

    tandaxia
  • ASP和ASP.NET发送邮件笔记

        这两天因公司网站邮件发不出去,然后研究了在asp网站发送邮件和在asp.net网站发送邮件的代码,把碰到的问题这里记录一下。

    tandaxia
  • Web页面中5种超酷的Hover效果

    想在自己的网站中应用超酷的hover效果吗?也许你可以从如下的这些实例中获得一些灵感,如果你喜欢这些效果,也可以直接拷贝代码并应用到你的站点。 给平淡的站点带来...

    葡萄城控件
  • CSS学习笔记(基础篇)

    CSS 指层叠样式表 (Cascading Style Sheets)(级联样式表)

    Daotin
  • Css3新特性应用之视觉效果

    一、单侧阴影 box-shadow属性的应用,格式:h-shadow v-shadow blur spread color inset属性取值介绍 h-sah...

    sam dragon
  • 怎么在vue中使用less

    用户1741436
  • 前端小白也能快速学会的博客园博客美化全攻略[附源码]

    官方介绍: 博客皮肤模板 http://skintemplate.cnblogs.com/

    Enjoy233
  • 微信小程序-margin和padding的区别

    为了方便,先看一个图,外面的是margin,是外边距,padding是内边距。

    叉叉敌
  • 实习第三周

    治电小白菜

扫码关注云+社区

领取腾讯云代金券